makemake
Jiffy Howto:
- 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
makemake to translate BASE.o into an executable by linking it
with all the other object files and libraries in the created
file.
- 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 makemake.
- Magic dependancies for other targets and system-dependant header
files will be automatically created.
Processing:
- 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
dependancies remain.
- 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 files used to produce the above targets is written
into FILES.
- A list of all the above files that were automatically generated is
written into AUTOFILES.
Special targets and files:
See the documentation on files and rules for more information.
Compatibility notes:
- 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
packages.
To Do:
- Pick a better, more distinct name. Ideas: SPAC (Simple PAckage
Configuration toolkit).
- 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.
- Does not handle turning the package into a distributable tarball
(to be written as a seperate tool).
- Needs to write out another file containing a list of all the
dependancy list files used by the package, to aid with source code
distribution.