


Read Me(Cook)                                       Read Me(Cook)


NNAAMMEE
       cook - a file construction tool

DDEESSCCRRIIPPTTIIOONN
       The _c_o_o_k program is a tool for constructing files, and
       maintaining referential integrity between files.  It is
       given a set of files to create, and recipes of how to
       create and maintain them.  In any non-trivial program
       there will be prerequisites to performing the actions
       necessary to creating any file, such as include files.
       The _c_o_o_k program provides a mechanism to define these.

       When a program is being developed or maintained, the
       programmer will typically change one file of several which
       comprise the program.  The _c_o_o_k program examines the last-
       modified times of the files to see when the prerequisites
       of a file have changed, implying that the file needs to be
       recreated as it is logically out of date.

       The _c_o_o_k program also provides a facility for implicit
       recipes, allowing users to specify how to form a file with
       a given suffix from a file with a different suffix.  For
       example, to create _f_i_l_e_n_a_m_e.o from _f_i_l_e_n_a_m_e.c

       * Cook is a replacement for   * There is a _m_a_k_e_2_c_o_o_k
       the traditional _m_a_k_e(1)       utility included in the
       tool.                         distribution to help
       * Cook is more powerful       convert makefiles into
       than the traditional _m_a_k_e     cookbooks.
       tool.
       * Cook has true variables,    * Cook has a simple but
       not simple macros.            powerful string-based
       * Cook has user defined       description language with
       functions.                    many built-in functions.
                                     This allows sophisticated
                                     filename specification and
                                     manipulation without loss
                                     of readability or
                                     performance.
       * Cook can build in           * Cook is able to build
       parallel.                     your project with multiple
       * Cook can distribute         parallel threads, with
       builds across your LAN.       support for rules which
                                     must be single threaded.
                                     It is possible to
                                     distribute parallel builds
                                     over your LAN, allowing you
                                     to turn your network into a
                                     virtual parallel build
                                     engine.







Reference Manual               Cook                             1





Read Me(Cook)                                       Read Me(Cook)


       * Cook is able to use         * Cook can be configured
       fingerprints to supplement    with an explicit list of
       file modification times.      primary source files.  This
       This allows build             allow the dependency graph
       optimization without          to be constructed faster by
       contorted rules.              not going down dead ends,
       * In addition to walking      and also allows better
       the dependency graph, Cook    error messages when the
       can turn the input rules      graph can't be constructed.
       into a shell script, or a     This requires an accurate
       web page.                     source file manifest.
       * Cook runs on almost any     * Cook has special _c_a_s_c_a_d_e
       flavor of UNIX.  The source   dependencies, allowing
       distribution is self          powerful include dependency
       configuring using a GNU       specification, amongst
       Autoconf generated            other things.
       configure script.

       If you are putting together a source-code distribution and
       planning to write a makefile, consider writing a cookbook
       instead.  Although Cook takes a day or two to learn, it is
       much more powerful and a bit more intuitave than the
       traditional _m_a_k_e(1) tool.  And Cook doesn't interpret tab
       differently to 8 space characters!

AARRCCHHIIVVEE SSIITTEE
       The latest version of _c_o_o_k is available on the Web from:
           URL:    http://www.canb.auug.org.au/~millerp/cook/
           File:   cook-2.20.README     # the README from the tar file
           File:   cook-2.20.lsm        # LSM format description
           File:   cook-2.20.spec       # RedHat package specification
           File:   cook-2.20.rm.ps.gz   # PostScript of the Reference Manual
           File:   cook-2.20.ug.ps.gz   # PostScript of the User Guide
           File:   cook-2.20.tar.gz     # the complete source

       This Web page also contains a few other pieces of software
       written by me.  Please have a look if you are interested.

       Cook is also carried by sunsite.unc.edu in its Linux
       archives.  You will be able to find Cook on any of its
       mirrors.
           URL:    ftp://sunsite.unc.edu/pub/Linux/devel/make/
           File:   cook-2.20.README     # the README from the tar file
           File:   cook-2.20.lsm        # LSM format description
           File:   cook-2.20.spec       # RedHat package specification
           File:   cook-2.20.rm.ps.gz   # PostScript of the Reference Manual
           File:   cook-2.20.ug.ps.gz   # PostScript of the User Guide
           File:   cook-2.20.tar.gz     # the complete source
       This site is extensively mirrored around the world, so
       look for a copy near you (you will get much better
       response).






Reference Manual               Cook                             2





Read Me(Cook)                                       Read Me(Cook)


MMAAIILLIINNGG LLIISSTT
       A mailing list has been created so that users of _c_o_o_k may
       exchange ideas about how to use the _c_o_o_k program.
       Discussion may include, but is not limited to: bugs,
       enhancements, and applications.  The list is not
       moderated.

       The address of the mailing list is
              cook-users@canb.auug.org.au
       Please DO NOT send subscribe requests to this address.

       To subscribe to this mailing list, send an email message
       to majordomo@canb.auug.org.au with a message body
       containing the single line
              subscribe cook-users
       If you have an email address which is not readily derived
       from your mail headers (majordomo is only a Perl program,
       after all) you will need to use a message of the form:
              subscribe cook-users _a_d_d_r_e_s_s
       where _a_d_d_r_e_s_s is the email address to which you want
       messages sent.

       The software which handles this mailing list CANNOT send
       you a copy of the _c_o_o_k program.

BBUUIILLDDIINNGG CCOOOOKK
       Full instructions for building the _c_o_o_k program may be
       found in the _B_U_I_L_D_I_N_G file included in this distribution.

CCOOPPYYRRIIGGHHTT
       _c_o_o_k version 2.20
       Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994,
       1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Peter
       Miller; All rights reserved.

       This program is free software; you can redistribute it
       and/or modify it under the terms of the GNU General Public
       License as published by the Free Software Foundation;
       either version 2 of the License, or (at your option) any
       later version.

       This program is distributed in the hope that it will be
       useful, but WITHOUT ANY WARRANTY; without even the implied
       warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the GNU General Public License for more
       details.

       You should have received a copy of the GNU General Public
       License along with this program; if not, write to the Free
       Software Foundation, Inc., 59 Temple Place, Suite 330,
       Boston, MA 02111, USA.

       It should be in the _L_I_C_E_N_S_E file included with this
       distribution.



Reference Manual               Cook                             3





Read Me(Cook)                                       Read Me(Cook)


AAUUTTHHOORR
       Peter Miller   E-Mail:   millerp@canb.auug.org.au
       /\/\*          WWW:      http://www.canb.auug.org.au/~millerp/






















































Reference Manual               Cook                             4





Read Me(Cook)                                       Read Me(Cook)


NNEEWW IINN TTHHIISS RREELLEEAASSEE
       A number of features have been added to _c_o_o_k with this
       release.  The following list is only a summary; for
       excruciating detail, and also acknowlegements of those who
       generously sent me feedback, please see the _e_t_c_/_C_H_A_N_G_E_S_._*
       files included in this distribution.

   VVeerrssiioonn 22..2200
       * There is a fix for the build problems caused by recent
       GNU Gettext releases.

       * The fingerprint handling is now more robust,
       particularly when faced with files that move backwards in
       time.

       * There is a fix for the build problems caused by recent
       Bison releases.

   VVeerrssiioonn 22..1199
       * Some introduced with recent versions of GNU Bison have
       been fixed.  Bison's include file insulation didn't use YY
       in the insulating symbol (just to be completely
       inconsistent) and in another case a namespace clash
       occurred for a function name.

       * The generated Makefile has been improved, along with
       other small build and install improvements.

       * A top-level _f_a_i_l statement how halts the parse as soon
       as it is executed.  This will make it more useful for
       checking build environments.

       * Documentation about _c_o_o_k___r_s_h(1) has been added to the
       Parallel chapter of the User Guide.

   VVeerrssiioonn 22..1188
       * A bug has been fixed in the _i_n_g_r_e_d_i_e_n_t_s_-_f_i_n_g_e_r_p_r_i_n_t
       recipe attribute.  It was failing to save the fingerprint
       cache file in some cases, and thus came to incorrect
       conclusions on following runs.

       * The _(_e_x_i_s_t_s_) ingredients attribute has been fixed so
       that it no longer implies behavious rimilar to _s_e_t
       _s_h_a_l_l_o_w.

       * There is a new _c_o_o_k___r_s_h(1) program, for use with the
       _h_o_s_t_-_b_i_n_d_i_n_g recipe attribute, which allows you to load
       balance builds across classes of hosts.  See _c_o_o_k___r_s_h(1)
       and the Parallel chapter of the User Guide for more
       information.

       * Some build problems have been fixed on various
       platforms.




Reference Manual               Cook                             5





Read Me(Cook)                                       Read Me(Cook)


       * More keywords are now understood for M4 include
       directives.

   VVeerrssiioonn 22..1177
       * When using file fingerprints, the way the _._c_o_o_k_._f_p file
       is written has been changed, so that the timestamp of the
       containing directory is modified much less often.  This is
       useul in combination with the _c_o_o_k___b_o_m(1) utility.

       * A bug has been fixed under Cygwin, where archive members
       were not being fingerprinted correctly.

       * A bug has been fixed in the [quote] function.  It now
       quotes all _s_h(1), _c_s_h(1) and _b_a_s_h(1) special characters
       correctly.

       * A bug has been fixed in the [uptodate] function.  It now
       works as advertised.

       * There is a new _i_n_g_r_e_d_i_e_n_t_s_-_f_i_n_g_e_r_p_r_i_n_t recipe flag.
       This means that you can now cause a recipe to re-trigger
       when the ingredients list changes.  This is especially
       useful when a library has a file removed.

       * The dependency graph can now have the edge types
       specified.  The ``weak'' edge type if useful for managing
       links, and the ``exists'' edge type is useful for managing
       version stamps.  See the User Guide for more information.

   VVeerrssiioonn 22..1166
       * The _s_t_r_i_n_g_s_e_t function now accepts a `+' operator.
       While union is implicit, the apparrently redundant `+'
       operator is useful for cancelling the other operators.

       * The ``reason and fingerprint bug'' has been fixed.  This
       caused a mysterious error message to appear sometimes when
       using the -reson option incombination with fingerprints.

       * The % and %_n patterns are now allowed to match the empty
       string, provided they aren't the first thing in the
       pattern (otherwise undesirable absolute path problems can
       occur).

       * The _c___i_n_c_l(1) command now accepts `-' as a file name on
       the command line, meaning standard input.

       * Some improvements have been made to the Cygwin support,
       extending the ``.exe'' automatic executable suffix
       coverage to a couple more places.

       * A bug in the ``c'' cookbook has been fixed, which was
       getting .h dependency files wrong.





Reference Manual               Cook                             6





Read Me(Cook)                                       Read Me(Cook)


   VVeerrssiioonn 22..1155
       * The _C___i_n_c_l(1) problem with absolute paths has been
       fixed.

       * A bug has been fixed which caused problems on Solaris
       and SGI, where Cook would report a No child processes
       error.

   VVeerrssiioonn 22..1122
       * The _c___i_n_c_l program now has a --qquuoottee--ffiilleennaammeess option,
       which means that you can have filenames with spaces and
       special characters in them.

       * A bug in the _c___i_n_c_l program's path flattening has been
       fixed.

       * A small Y2K bug has been fixed in the date parsing used
       by the _c_o_o_k_t_i_m_e(1) command.

       * A bug which caused the -parallel option to lose track of
       processes when you used [execute] in a recipe body has
       been fixed.

       * The restrictions on the placement of the placement of %0
       in a pattern have been dropped; too many people didn't
       like it.  This does _n_o_t break any cookbooks.

       * Cook now copes with the absence of the HOME environment
       variable.  This was a problem for CGI scripts.

   VVeerrssiioonn 22..1111
       * Numerous portability problems have been fixed in the
       configure and build.

       * A bug has been fixed which prevented Cook from working
       correctly when run by some versions of _c_r_o_n(8) and _a_t(1).

       * There is a new _c_o_o_k___b_o_m _-_-_i_g_n_o_r_e option, allowing you to
       nominate file patterns that you don't want in the file
       lists.

       * There is a new [__FUNCTION__] variable, which contains
       the name of the executing function, which suppliments the
       existing [__FILE__] and [__LINE__] variables.

       * Functions now have local variables, just put the word
       local on the left-hand-side of the first assignment.
       Local variables are reentrant and thread-safe.

   VVeerrssiioonn 22..1100







Reference Manual               Cook                             7





Read Me(Cook)                                       Read Me(Cook)


       * The _[_p_r_i_n_t_] and _[_w_r_i_t_e_] functions now work more sensably
       with the --SSCCrriipptt option.

       * The fingerprint code has been improved.  It now does
       considerably fewer redundant fingeprint calculations,
       resulting is some very welcome speed improvements.

       * The behaviour of the remote shell invocation to cope
       with rshd at the remote end failing to spawn a shell, and
       it copes with the default shell at the remote end not
       being the Bourne shell.

       * The --PPAARRaalllleell behaviour has been improved, so that it
       now looks for child process who have finished _m_o_r_e _t_h_a_n it
       looks for recipes to run.  This doesn't change the
       semantics any, but it matches user expectations far better
       (and results in shorter-lived zombie processes).

       * The _s_e_t _m_e_t_e_r recipe flag works once more.  (It stopped
       working when the parallel modifications were made, and
       mysteriously forgotten until now.)

       * There are some changes made to the fingerprinting code
       to detect when files under ClearCase move backwards in
       time (because the underlying file version is
       ``uncovered'') meaning that the derived (object) files
       need to be rebuilt.

       * There is a new [mtime-seconds] function, similar to the
       [mtime] function, except that it returns seconds since the
       epoch, rather than a human readable date.  More useful to
       handing to [expr].

       * A bug has been fixed on SGI IRIX which failed to cope
       with not being able to create directories because they
       already exist.

       * Ingredient recipes (ones with no body) may now have a
       double colon rather than a single colon, even when there
       is more than on target specified.  Some users may find
       this a more natural syntax for ingredients recipes.

       * The [expr] function now reports an error when given a
       number too big to represent, rather than quietly returning
       wrong answers.  The range of representable values depends
       on your system.

       * Cook now works with GNU Regex correctly on Windows-NT.

   VVeerrssiioonn 22..99







Reference Manual               Cook                             8





Read Me(Cook)                                       Read Me(Cook)


       * There is a new ``for each'' style looping construct.
       See the User Guide for more information.

       * It is now possible to use regular expression patterns,
       instead of Cook's native patterns.  You can set this for a
       whole cookbook or individual recipes.  The default is to
       use Cook's native patterns.  See the _F_i_l_e _N_a_m_e _P_a_t_t_e_r_n_s
       chapter of the User Guide for more information.

       * A bug which caused _h_o_s_t_-_b_i_n_d_i_n_g and _s_i_n_g_l_e_-_t_h_r_e_a_d to
       core dump has been fixed.

       * All text file input now copes with CRLF sequences, so
       mixing NT and Unix builds on the one file server no longer
       creates problems.

       * Fingerprints are now cached per-directory, rather than
       one huge file for an entire directory tree.  This is more
       useful in recursive build and [search_list] situations.

       * The [cando], [cook] and [uptodate] functions now return
       lists of successful files, rather than a simple true/false
       result.

       * The [in] and [matches] functions now return the list
       index (1 based) of the matching word.  See the User Guide
       for more information.

       * There is a new _c_o_o_k _-_w_e_b option, to print a HTML web
       page on the standard output, representing the dependency
       graph.  This is useful in documenting the build process,
       or debugging cookbooks.

       * There is a new _c_o_o_k _-_-_f_i_n_g_e_r_p_r_i_n_t_-_u_p_d_a_t_e option which
       scans the directory tree below the current directory and
       updates the file fingerprints.  This helps when you use
       another tool (such as RCS or ClearCase) which alters the
       file but preserves the file's modification time.

       * There is a new [write] function for writing text files.
       This is useful for coping with Windows-NT's absurdly short
       command lines.

   VVeerrssiioonn 22..88













Reference Manual               Cook                             9





Read Me(Cook)                                       Read Me(Cook)


       * The remote _h_o_s_t_-_b_i_n_d_i_n_g code has been improved to cope
       with staggeringly long commands (which tended to make
       _r_s_h(1) barf), and also wierd and wonderfull $SHELL
       settings.

       * The #include directive now accepts more than one file,
       to be more symmetric with the #include-cooked directive.

       * A bug has been fixed where cooktime gave an incorrect
       error message if setting the file's utimes failed.

       * The configure script has been improved for use on non-
       UNIX systems.

       * There is a new builtin [cook] function, a natural
       companion for the [cando] and [uptodate] functions.  See
       the Cook User Guide for more information.

   VVeerrssiioonn 22..77
       * There is a new _c_o_o_k___b_o_m(1) command (Bill Of Materials).
       This may be used to efficiently scan a directory tree for
       files, so that ingredients lists may be produced
       automatically.  See _c_o_o_k___b_o_m(1) for more information.

       * There is a new assign-append statement, so you can now
       use += to append to the value of a variable.  See the User
       Guide for more information.

       * There is a new _g_a_t_e_-_f_i_r_s_t recipe flag, which causes the
       recipe gate to be evaluated before the ingredients are
       derived, rather than after.

       * The _c___i_n_c_l(1) command has a new --interior-files option,
       so you can tell it about include files that don't exist
       yet.  This is helpful when they are generated, _i_._e_. they
       are interior files of the dependency graph, hence the
       option name.

       * There is a new [interior-files] function, which returns
       the files interior to the dependency graph (constructed by
       a recipe), and a complementatry [leaf-files] function,
       which returns the leaf files of the dependency graph (not
       constructed by any recipe).

       * There is a new ``no-include-cooked-warning'' flag, if
       you want to suppress the warnings about derived file
       dependencies in include-cooked files.

       * There is a new _r_e_l_a_t_i_v_e___d_i_r_n_a_m_e built-in function,
       similar to the existing _d_i_r_n_a_m_e function, but it returns
       ``.'' for files with no directory part, rather than the
       absolute path of the current directory.





Reference Manual               Cook                            10





Read Me(Cook)                                       Read Me(Cook)


   VVeerrssiioonn 22..66
       * Cook has been ported to Windows-NT using CygWin32.  See
       the BUILDING file for details.

       * There are two new functions (_d_o_s_-_p_a_t_h and _u_n_-_d_o_s_-_p_a_t_h)
       for use when invoking non-CygWin32 WindowsNT programs.
       See the Cook User Guide for more information.

       * Fingerprints now work meaningfully with directories.

       * A bug has been fixed in the pattern matching code.  It
       would sometimes cause core dumps.

       * A bug involving fingerprints in combination with the
       search_list has been fixed.  Cook would occasionally
       conclude that a shallow target was up-to-date when a
       shallow ingredient was edited to be the same as a deeper
       ingredient.

       * A bug has been fixed in cooktime.  It would use an
       inappropriate timezone offset on some systems.

   RReelleeaassee 22..55
       * A problem which caused some tests to fail on Solaris'
       tmpfs now has a work-around.

       * The ``setenv'' statement has finally been documented.
       It's been in the code tfor years, but I could never figure
       out why folks weren't using it!

       * A number of build problems on various systems have been
       fixed.

   RReelleeaassee 22..44
       * There is a new form of dependencies.  Known as cascaded
       dependencies, they allow the user to associate additional
       dependencies with an ingredient.  For example, a C source
       file can be associated with cascaded include dependencies.
       This means that all files which depend on the C source
       file, also depend on the included files.  The Cook
       Reference Manual has been updated to include this new
       functionality.

       * There is a new section of the Cook Reference Manual
       giving suggestions and a template for building large
       projects.

       * There is a new [expr] function, to calculate simple
       arithmetic expressions.  See the User Guide for more
       information.

       * There is a new c_incl -no-recursion option, to prevent
       scanning nested includes.  This is of most use when
       combined with the new cascade dependencies.



Reference Manual               Cook                            11





Read Me(Cook)                                       Read Me(Cook)


       * There is a new [exists-symlink] function, which may be
       used to test for the existence of symlinks.  The [exists]
       function follows symbolic links, and is not useful when
       manipulating the links themselves.

   RReelleeaassee 22..33
       * There are 6 new special variables: graph_leaf_file,
       graph_leaf_pattern, graph_interior_file,
       graph_interior_pattern, graph_exterior_file and
       graph_exterior_pattern.  These variables may be used to
       define the leaves of the derivation graph (the _a_c_c_e_p_t
       forms), and non-leave of the graph (the _r_e_j_e_c_t forms).
       This can make the graph derivation faster, and greatly
       improves some error messages.  This functionality is of
       most use when you have an exact source file manifest, _e_._g_.
       from a software configuration management system.  See the
       User Guide for more information.

       * The %0 pattern element has been extended to permit the
       matching of absolute paths.

   RReelleeaassee 22..22..22
       * There is a new statement type, allowing functions to be
       invoked as subroutines in any place where a command may be
       invoked.  See the User Guide for more information.

       * A number of problems with installing Cook have been
       fixed.  This includes changing -mgm to -mm for the
       documnetation formatting, and missing include dependencies
       and missing rules for installing the man pages.

       * There is a new ``print'' builtin function.  When
       combined with the new function call statement, this
       provides a way of printing information without invoking
       ``echo''.  See the User Guide for more information.

       * Cook now defaults the language to ``en'' internally if
       neoither the LANG nor LANGUAGE environment variable was
       set.  This gives better error messages.

   RReelleeaassee 22..22..11
       * A bug was fixed where a recipe would fail to trigger if
       some, but not all, of its targets were not present, but
       the existing targets were up-to-date.  This bug was
       introduced in the inference engine re-write.

   RReelleeaassee 22..22










Reference Manual               Cook                            12





Read Me(Cook)                                       Read Me(Cook)


       * The _c___i_n_c_l utility has had two new languages added.  It
       now understands M4, and also has an ``optimistic''
       language which can scan many assemblers and even some
       high-level languages.  See _c___i_n_c_l(1) for more information.

       * The _c___i_n_c_l utility also has a new --no-absolute-path
       option, to supress scanning and reporting of such files.
       See _c___i_n_c_l(1) for more information.

       * There is a new warning added for dependencies on derived
       ingredients when this information resides solely in
       derived cookbooks included using the #include-cooked
       facility.  This assists in detecting problems which may
       preclude a successful ``clean'' build.

       * This release adds a number of cookbook functions to the
       distrubuted cookbooks.  These may be used by adding a
           #include "functions"
       line to your cookbook.  See the Cook User Guide for more
       information.

       * This release fixes a bug where the graph walking phase
       ignored interrupts until something went wrong.

       * This release fixes a bug where _m_a_k_e_2_c_o_o_k did not
       correctly translate ``%'' into sematicly equivalent Cook
       constructs.

   RReelleeaassee 22..11
       * It is possible to specify that a command is to be
       executed on a specific machine or machines.  This can be
       useful for restrictively licensed third party software
       tools.

       * The parallel functionality has been extended to
       implement a virtual parallel machine on a LAN.

       * Fingerprinting has been enhanced to be more informative,
       and to adjust file modification times so that subsequest
       fingerprint-less runs will not find too much to do.

       * The #line directive is now available, for better
       diagnostics of generated cookbooks.  The __FILE__ and
       __LINE__ variable are also available.

       * There is now a thread-id variable, to obtain a thread-
       unique value for use in generating temporary file names or
       variable names, _e_t_c, which are unique to a thread.

       * Added the wordlist function and the command-line-goals
       variable for compatibility with GNU Make.  Updated
       _m_a_k_e_2_c_o_o_k to understand them.





Reference Manual               Cook                            13





Read Me(Cook)                                       Read Me(Cook)


   RReelleeaassee 22..00..11
       * An install problem in the generated Makefile, to do with
       the the manuals, has been fixed.

   RReelleeaassee 22..00
       Development of this release was generously supported by
       Endocardial Solutions, Inc.

       * Parallel execution is now supported.  If you have a
       multi-processor machine, you can specify the number of
       parallel processing threads with the -PARallel command
       line option, or via the _[_p_a_r_a_l_l_e_l___j_o_b_s_] variable.  By
       using the _[_o_s _n_o_d_e_] function, the _[_p_a_r_a_l_l_e_l___j_o_b_s_] variable
       can be set appropriately for the host machine
       automatically by the cookbook.  There is a new single-
       thread keyword to support single threading recipes which
       cannot be paralleized.

       * The dependency graph is now constructed differently.
       This gives exactly the same results, but the order of
       evaluation of recipes is a little more random.  This
       different graph construction is able to give better error
       messages, better -Reason information, and allows the
       introduction of parallel recipe evaluation if you have a
       multi-processor computer.

       * Recipes which use _c___i_n_c_l(1) to calculate their
       dependencies in the ingredients section will need a small
       modification - they will need to use the --Absent-Program-
       Ignore option.  See the User Guide for more information.

       * You can now print pair-wise file dependencies by using
       the -PAirs option.

       * You can now print a shell script which approximates the
       actions cook would take when building the targets by using
       the -SCript option.

       * There is a new ``shallow'' recipe flag, allowing you to
       specify that the targets of a recipe are required to be in
       the top-level directory, not further down the search_list
       path.

       * You may now define user-written functions in the
       cookbook to supplement the built-in functions.  Your
       functions will be called in the same manner as built-in
       functions.  There are new function and return keywords to
       support definition of functions.

       * The progress indicators produced by the -STar option now
       have more detail: ++ means that the cook book is being
       read, ** means that the graph is being constructed, and ##
       means that the graph is being walked.




Reference Manual               Cook                            14





Read Me(Cook)                                       Read Me(Cook)


   RReelleeaassee 11..1111
       * Fixed a bug in the pattern matching which caused %0
       (when not at the start of the pattern) to fail to match
       the empty string.

       * The install locations have been changed slightly to
       conform better to the GNU filesystem standards, and to
       take advantage of the additional install location options
       of the configure scripts generated by GNU Autoconf.

   RReelleeaassee 11..1100
       * Error messages have been internationalized.  It is now
       possible to get error messages in your native language, if
       it is supported.

       * The cook command now accepts a -no-include-cooked
       option, to disable any cooking of the #include-cooked
       files.

       * The cook -TRace option has been renamed -Reason.  This
       is thought to more accurately reflect what it does.

       * The cook -Reason output has been changed to cite
       cookbook file names and line numbers, in order to be more
       useful.  In addition, more reason messages carry location
       information.

   RReelleeaassee 11..99
       * There are new ``f77'' and ``g77'' cookbooks, to allow
       Fortran sources, in addition to C sources.

       * There is a new [options] function, which expands to the
       current settings of the command line options.  This is
       useful for recursive cook directory structures.  See the
       Reference Manual for more information.

       * There is a new ``recursive'' cookbook, to assist in
       constructing recursive cook structures.

       * The _f_i_n_d___l_i_b_s program now understands about shared
       libraries.

       * A bug which made the builtin [glob] function far to
       generous has been corrected.

       * A bug which caused some expression evaluation errors to
       be ignored has been corrected.

       * The ``set update'' flag has been re-named the ``set
       time-adjust'' flag, to more closely describe what it does.
       The old name will continue to work indefinitely.

       * There is a new ``set time-adjust-back'' flag, which sets
       recipe target times to be exactly one (1) second younger



Reference Manual               Cook                            15





Read Me(Cook)                                       Read Me(Cook)


       than the youngest ingredient.  This is usually an
       adjustment into the recent past.

   RReelleeaassee 11..88
       * The fingerprint code has been improved to work better
       with the search_list functionality.

       * The diagnostics have been improved when cook ``don't
       know how''.  A list of attempted ingredients is included
       in the error message.

       * There is a new _m_k_d_i_r recipe flag.  This creates recipe
       target directories before the recipe body is run.  See the
       Reference Manual for more information.

       * There is a new _u_n_l_i_n_k recipe flag.  This unlinks recipe
       targets before the recipe body is run.  See the Reference
       Manual for more information.

       * There is a new _r_e_c_u_r_s_e recipe flag.  This overrides the
       infinite loop recipe heuristic, allowing recipes to recuse
       upon themselves if one of their ingredients matches one of
       their targets.  See the Reference Manual for more
       information.

   RReelleeaassee 11..77
       * The AIX code to handle archive files has been fixed.

       * The fingerprint code now works on 64-bit systems.

   RReelleeaassee 11..66
       * Fixed a bug in the leading-dot removal code, and added
       an option to make it user-settable.  Fixed a bug in the
       search_path depth code.

   RReelleeaassee 11..55
       * The _c___i_n_c_l program now correctly prints the names of
       absent include files, causing them to be cooked correctly
       in a greater number of cases.

       * Recipes with no ingredients are now only applied if the
       target is absent.  To still use the previous behaviour,
       use the "set force" clause on the recipe.

       * It is now possible to supplement the last-modified time
       with a fingerprint, so cook does even fewer unnecesary
       recompilations than before.  Put the statement
              set fingerprint;
       somewhere near the top of your _H_o_w_t_o_._c_o_o_k file for this to
       be the default for your project.

       * There is a new form of include directive:
              #include-cooked _f_i_l_e_n_a_m_e...
       When files are included in this way, _c_o_o_k will check to



Reference Manual               Cook                            16





Read Me(Cook)                                       Read Me(Cook)


       make sure they are up-to-date.  If not, they will be
       cooked, and then _c_o_o_k will start again and re-read the
       cookbook.  This is most often used for maintaining
       include-dependency files.

       * CCooookk now configured using a program called _c_o_n_f_i_g_u_r_e,
       distributed with the package.  The _c_o_n_f_i_g_u_r_e program is
       generated by GNU Autoconf.  See the _B_U_I_L_D_I_N_G file for more
       details.

       * The semantics of _s_e_a_r_c_h___l_i_s_t have been improved.  It is
       now guaranteed that when ingredients change they result in
       targets earlier in the _s_e_a_r_c_h___l_i_s_t being updated.

       * There is now a _m_a_k_e_2_c_o_o_k translator, to translate
       _M_a_k_e_f_i_l_e files into _H_o_w_t_o_._c_o_o_k files.  Most of the GNU
       Make extensions are understood.  There is no exact
       semantic mapping between _m_a_k_e and _c_o_o_k_, so manual editing
       is sometimes required.  See _m_a_k_e_2_c_o_o_k(1) for more
       information.

       * _C_o_o_k now understands archive member references, in the
       same format as used by _m_a_k_e, et al.  Archive member
       references benefit from stat caching and fingerprinting,
       just as normal files do.

   RReelleeaassee 11..44
       * The _c_o_o_k program is now known to work on more systems.
       Most changes were aimed at improving portability, or
       avoiding problems specific to some systems.

       * The GNU long option name convention is now understood.
       Option names for _c_o_o_k were always long, so this mostly
       consists of ignoring the extra leading '-'.  The
       "--foo=bar" convention is also understood for options with
       arguments.

       * Tests which fail now tell you what it was they were
       testing for.  This will give the user some idea of what is
       happening.

















Reference Manual               Cook                            17


