Man Linux: Main Page and Category List


       bake - yet another Make replacement


       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

       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.


       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

         - 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.


       -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

       -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

       -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.


       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.


       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.


       ./bakefile or ./Bakefile
              The default declaration file if none is  given  in  a  -f/--file


       As  the  project is young and as there are many cases to test there are
       presumably some bugs not noticed yet.

       Report bugs to <>.




       (C) 2004 Bertram Scharpf <>