NAME
bake − yet another Make replacement
SYNOPSIS
bake [ OPTION | ASSIGNMENT | TARGET ]
An OPTION starts with ’-’. Multiple single-character options with no arguments may be compounded (’-nv’ is the same as ’-n -v’). For a summary, see the OPTIONS section below.
An ASSIGNMENT is of the form ’VARIABLE=value’. See the ASSIGNMENTS section.
A TARGET is a name. See the TARGETS section.
The parameters are evaluated in the order they are specified. That means if you specify a target before an option or an assignment, those don’t apply to the target build procedure.
DESCRIPTION
Bake is a replacement for Make, the popular Unix utility. It surveys project generation regarding build dependencies. The motivation to write Bake was that Make doesn’t handle header dependencies itself.
Bake is written in Python. Definition files, usually named ’bakefile’, are Python source code as well. This makes it very flexible. Further advantages come out of this fact. They are (as far as yet detected):
- |
It can handle header dependencies. (A dependency resolution function for C source code is included.) | ||
- |
Build processes written in Python can be called directly, without loading another shell and interpreter. | ||
- |
Password entering can be put in front of all other work. For example when a homepage is built and uploaded afterwards, you can ask for the FTP password, then build the pages and finally establish a FTP connection to your web hoster. (Normally, you would have to wait until the pages are built and you could enter tha password just before the upload.) | ||
- |
Subordinated instances can be called Python-internally without loading another shell, too. A class is provided to do the cleanup afterwards correctly. | ||
- |
The names of the files to be built can be collected in a list. This list can be used to generally compose cleanup or installation targets. | ||
- |
Bake can change its user and group id. If you’re building a target as root and a program that will be run may be a security risk, just change to the user id that is the owner of the directory you’re currently in. |
Feel free to realize your own ideas. If there are other useful applications, let me know.
See bakefile(5) for how to write description files.
OPTIONS
-a, --anyway
Build targets anyway, even if they’re up to date.
-A, --noanyway
Build targets only if they’re not up to date (default).
-C, --chdir DIR
Change to directory DIR. From this point on, Bake behaves as if it would have been called after a ’cd’ command.
-e, --envprec
Let environment variabes precede variables from bakefiles.
-E, --noenvprec
Environment variabes no longer precede variables from bakefiles (default).
-f, --file FILE
Use FILE as declaration file. If none is given as soon as a target is specified, Bake tries to read ’./bakefile’ or ’./Bakefile’, in this order.
-h, --help
Print a help message, explaining the calling syntax and the options.
-n, --noexec
Do not execute commands, just print out what would be done. Caution: functions and commands that are meant for prerequisite detection are executed.
-p, --printout
Print out all variables, rules and suffix rules as they are currently defined. If no bakefile is loaded, the standard bakefile will be read in first. To obtain the empty set, call ’bake -f /dev/null -p’.
-s, --silent
Produce definitely no output. Overrides verbose mode.
-U, --usergrp SPEC
Become another user and group. SPEC is a user:group specification, both user and group given either as name or as number. If group is omitted, the users default group is assumed. SPEC may further be a path to a file or a directory. Then, the file objects owner is detected and the rest behaves like you expect.
Especially the option combination ’-Csomewhere -U.’ comes in handy when you’re root and you build targets for real users that aren’t fully security-trusted. Caution! This is highly order-sensitive; the ’.’ directory refers to the previous directory change. Any target specified before the user change will be built as the old user. |
-v, --verbose
Print detailed information, what dependencies are found, what macro expansions are done and so on. Overrides silent mode.
-V, --version
Print version and copyright/(non-)warranty information.
ASSIGNMENTS
As in Make, you may declare variables in three ways: environment variables, variable objects in the declaration file (bakefile) and assignments on the command line. The latter overrides the former.
Variables are expanded when executig shell commands like in Make: ’$(VAR)’ or ’${VAR}’ expand to the contents of the Variable. See the MACROS section in bakefile(5) for a detailed description.
TARGETS
The targets given on the command line will be built. If no target is given, the first one in the declaration file (bakefile) is assumed.
Dependencies are resolved automatically and header files are searched where it is defined to do so.
FILES
./bakefile or ./Bakefile
The default declaration file if none is given in a -f/--file option.
BUGS
As the project is young and as there are many cases to test there are presumably some bugs not noticed yet.
Report bugs to <software [AT] bertram-scharpf.de>.
SEE ALSO
AUTHOR
(C) 2004 Bertram Scharpf <software [AT] bertram-scharpf.de>