spac: Simple Package Configuration
spac-dist: Build distributable
dist: Rules describing distributable
files: Automatically installed files
rules: Rules describing building targets
- Identify all the executables you want to build.
- For each executable, create a file named BASE=x, where
BASE is the name of the executable. This will instruct
spac to translate BASE.o into an executable by linking it
with all the other object files and libraries in the created
- Identify all the libraries used by the above step.
- For each library, create a file named BASE=l, where the
library is named BASE.a, which lists all the object files
required by that library.
- Dependancy files for the object files will be automatically
created internally by spac.
- Dependancies for object targets and system-dependant header files
will be automatically created.
- Starts by examining the "all" rule. This rule will produce a list
of top-level targets.
- The rules are examined to satisfy the top-level targets, which
produces more dependancies.
- The remaining dependancies are recursivly satisfied until no
- If any dependancies could not be satisfied, the program exits.
- All the targets are sorted into a Makefile.
- A list of all the files that will be generated during the build
process is written into TARGETS.
- A list of all source files used to produce the above targets is
written into SRCFILES.
- A list of all the files that were automatically generated is
written into AUTOFILES.
Special targets and files:
See the documentation on files and rules for more information.
- The BASE=x, BASE=l, FILES, and TARGETS file names were taken from
evidence in the distributed ezmlm-0.53.tar.gz source package.
- Many of the system dependancy tests have been lifted either as-is
or with minor modifications from ezmlm, checkpassword, and other DJB
- Does not handle documentation in any form. It should be made to
handle man pages, HTML documents, plain text files, and a set of
pre-named files including (but not limited to) AUTHORS, NEWS, README,
THANKS, TODO, and VERSION.
- Does not handle directories. Targets within directories (ie
libraries) should produce both additional targets within the top-level
Makefile so that they can be built without recursion, as well as a
Makefile within the directories so they can be built seperately.
- Does not handle shell scripts.
- Needs to write out another file containing a list of all the
dependancy list files used by the package, to aid with source code