home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tools / make / dmake37e / release < prev    next >
Text File  |  1991-05-06  |  18KB  |  455 lines

  1. dmake Version 3.7
  2. =================
  3.  
  4. FULL RELEASE OF DMAKE, REPLACES VERSION 3.6
  5.  
  6. Nature:  It is highly recommended that this version replace all versions of 3.6
  7. -------  that are in current use.  Version 3.7 fixes numerous memory bugs that
  8.      were present in Version 3.6.  These often caused spurious behaviour
  9.      especially on MSDOS machines when complex makefiles were used.
  10.  
  11.      This release addresses the following issues:
  12.  
  13.          1. Modifications to the inference algorithm.
  14.          2. Memory bug fixes.
  15.          3. Enhancements to the macro expansion facilities.
  16.          4. Addition of .KEEP_STATE functionality.
  17.          5. Many other tweaks and tunes
  18.  
  19.       This distribution advances dmake to Version 3.7, patch level 0.
  20.  
  21.  
  22. Availability:
  23. -------------
  24.       dmake is available via anonymous ftp from watmsg.uwaterloo.edu
  25.       (129.97.129.9) as:
  26.  
  27.           pub/dmake/dmake37.tar.Z        - compressed tar archive
  28.           pub/dmake/dmake37.zoo        - zoo archive
  29.           pub/dmake/dmake37-msdos-exe.zoo    - MSDOS executable zoo archive
  30.           pub/dmake/dmake37-msdos-exe.zip    - MSDOS executable zip archive
  31.           pub/dmake/dmake37.shar01        - xx part shar archive
  32.           ...                  (get all parts)
  33.           pub/dmake/dmake37.sharxx
  34.  
  35.       and comes in several archive formats.  Choose the one that best
  36.       suits your needs.
  37.  
  38. Acknowledgements:
  39. -----------------
  40.       Thanks to all who submitted code for new features, suggestions for
  41.       improvements, and bug fixes.  I have tried to make sure no gotchas
  42.       remain, if you encounter problems installing or running dmake please
  43.       let me know.  As always, I am always happy to receive e-mail.
  44.  
  45.  
  46. DETAILS OF ENHANCEMENTS/TWEAKS:
  47. ===============================
  48. - Ran the whole thing with a DEBUGING malloc library on.  Found one memory
  49.   bug in expand.c, one in BSD 4.3's version of getwd.  I am now fairly
  50.   confident that no more obscure memory allocation bugs remain in dmake.
  51.  
  52. - Addition of the malloc dbug code made me move all debug code into the
  53.   dbug directory and I changed the config.mk files around to reflect the
  54.   changes.  Setting DEBUG=1 on the command line gives you DB_ macros, and
  55.   DEBUG=1 DBMALLOC=1 gives you DB_ macros and debuging malloc library.
  56.  
  57. - Added sysvr4 directory and targets
  58.  
  59. - Disallowed %.o :: %.c rules.  They make no sense and the implementation
  60.   was completely wrong.  That is, the difference between
  61.  
  62.     %.o : %.c; ...
  63.     %.o : %.f; ...
  64.   and
  65.     %.o :: %.c; ...
  66.     %.o :: %.f; ...
  67.  
  68.   is less than clear, and the efficacy of the latter is even muddier.  From
  69.   now on :: rules are not allowed in %-meta rules.  This simplifies the
  70.   description of what is going on and makes the code in infer.c significantly
  71.   more correct.  When %-meta rules are now replaced by other rules, the
  72.   .SETDIR attribute (if specified) is taken into consideration and only rules
  73.   whose target, prerequisite, and .SETDIR value match are considered for
  74.   replacement, otherwise the new rule is added.
  75.  
  76. - Modified the setting of external file name for targets that have been made
  77.   and that had a .SETDIR= attribute as follows:
  78.  
  79.     .SETDIR=fred : test
  80.  
  81.     target : test ; ...
  82.  
  83.   then the name of test in any $< expansions is fred/test if the change of
  84.   directory was successful, if however the rules for making test are:
  85.  
  86.     test .SETDIR=a :: ...
  87.     test .SETDIR=b :: ...
  88.  
  89.   then the external file name for 'test' is simply 'test'.  We don't know
  90.   which recipes will be used to bring it up to date in which directories
  91.   hence we will not attempt to modify the name of test.   The same holds for
  92.   the .SOURCE search rules in this case.
  93.  
  94.   You are now able to provide different .SETDIR=dir attributes to each
  95.   new :: rule associated with a target, see above for what name is deduced
  96.   for such targets after they are made.
  97.  
  98. - Went to a Breadth-first search inference algorithm.  Major change and two
  99.   days of hacking, but it seems to work.  It is much nicer now and I can
  100.   describe with definite determinism what the algorithm will not infer.
  101.   All ambiguities are reported rather than choosing an arbitrary inference
  102.   chain.  This is considerably less error prone, but may break some existing
  103.   makefiles.  Modified -v display to show exactly what inference chain is
  104.   used.
  105.  
  106. - Fixed the recipe handling of +,-,%,@ at the start of a recipe line.  The
  107.   attributes are now recognized even if they appear in a macro at the start
  108.   of the recipe line.  ie;
  109.  
  110.     all:
  111.         $(SH) do the right thing
  112.  
  113.   will use the shell if SH=+ is defined somewhere.
  114.  
  115. - Modified string{token_list} expansions to better co-exist with /bin/sh.
  116.   /bin/sh treats the following as valid syntax:
  117.  
  118.       { echo hello;}
  119.  
  120.   under version 3.6 of dmake it would strip the {} characters or worse.
  121.   This version of dmake has been modified to apply the {} only of the
  122.   first token in token_list follows the opening { with no intervening
  123.   white space.  Thus the above line will NOT BE Expanded, while
  124.  
  125.         {foo fee}.c
  126.  
  127.   will result in foo.c and fee.c as the result of the expansion.
  128.  
  129. - If using Augmake (-A) flag then directories are always made, even if they
  130.   are up to date.
  131.  
  132. - Added .PHONY attribute.  Any target with this attribute will have it's
  133.   recipe made each time it is made even if a file with the name of the target
  134.   exists and can be found by dmake.  Targets that have as a prerequisite a
  135.   target with the .PHONY attribute set will also get made since the time stamp
  136.   of the prerequisite will be made current and it will appear older than the
  137.   target thereby forcing it to be made as well.
  138.  
  139. - Added .ELIF <condition> construct, and allowed .ENDIF as a synnonym for
  140.   .END.  Made the parsing of .IF....ELIF....ELSE....END constructs a little
  141.   more robust.
  142.  
  143. - Changed behaviour of .SETDIR= attribute when used without prerequisites or
  144.   a target.
  145.  
  146.     .SETDIR=somedir :
  147.  
  148.   is no longer supported you should instead use the macro form of the
  149.   attribute:
  150.  
  151.     .SETDIR := somedir
  152.  
  153.   The reasoning behind the switch goes as follows.  If you wrote the line
  154.  
  155.     .SETDIR=somedir : $(SOURCE_FILES)
  156.  
  157.   and $(SOURCE_FILES) was null this would cause dmake to CD to somedir prior
  158.   to making any targets.  This situation is undesirable at best as it caused
  159.   some weird error messages.  The new modified behaviour is more consistent
  160.   and allows the attribute to be set on the command line.
  161.  
  162. - Modified inference to assume targets that have no .suffix can be made from
  163.   files that contain at least one .suffix.  This prevents early termination of
  164.   the inference algorithm.
  165.  
  166. - Added -v{dfimt} flag so that you can now control
  167.   how much junk -v actually prints.  This means that
  168.   -v is now a seperate flag and cannot be catenated
  169.   with the rest... oh well.
  170.  
  171. - Added DOS tee function to copy the contents of output to stdout and stderr
  172.   to a file specified using -C option.  patches were supplied by Len Reed.
  173.  
  174. - Added KEEPSTATE functionality based on Dean Hoovers stuff.
  175.     BEWARE:  If you make a target and the recipe has a default set of rules
  176.          when things are updated, but a slightly different set when it
  177.          updates then using KEEPSTATE will fail.  In particular:
  178.  
  179.          Suppose you infer a recipe % --> %.o --> %.c, and the first time
  180.          you make a target the .o is in the '.' directory, but by default
  181.          you tell dmake to look in objects, then when you run dmake the
  182.          next time the recipe will be different as the .o will now be
  183.          objects/foo.o and the KEEPSTATE value will be outdated and hence
  184.          the target will look as if it needs making.
  185.   .NOSTATE attribute to disable keeping of state for any target with this
  186.   attribute set.  no state is kept for .PHONY targets either.
  187.  
  188. - Added some more GNU style macro expansions:
  189.  
  190.     $(null,text true false)
  191.     $(!null,text true false)
  192.     $(eq,lhs,rhs true false)
  193.     $(!eq,lhs,rhs true false)
  194.  
  195.   The first returns Expand(true) if Expand(text) is null, and Expand(false) if
  196.   Expand(text) is not null.  The second is the negation of the first.
  197.  
  198.   The equality macros are similar but test
  199.      Expand(lhs) == Expand(rhs)
  200.   rather than against null.
  201.  
  202. - Modified the running of normal recipes to perform the following expansion
  203.   prior to doing the command:
  204.  
  205.     set CNMDNAME := name of command to execute (first whitespace ending
  206.             token in command line)
  207.     set CMNDARGS := remainder of the line
  208.  
  209.   Expand $(COMMAND) to form the the command line to pass to be executed.  By
  210.   default COMMAND is set to:
  211.  
  212.     COMMAND = $(CMNDNAME) $(CMNDARGS)
  213.  
  214.   If however you wish to use a different interface (esp under DOS) for passing
  215.   long command line arguments then you can easily do so, for example:
  216.  
  217.     COMMAND = $(CMNDNAME) @(mktmp $(CMNDARGS))
  218.  
  219.   assigns a temporary file that holds the arguments and executest the comand
  220.  
  221.     $(CMNDNAME) @/tmp/ASAD38479217
  222.  
  223.   or whatever, the temporary file is removed upon completion of the command
  224.   unless the -vt flag is given.
  225.  
  226. - Added $(shell command) macro, which passes the commands specified as data to
  227.   a shell using the usual interface and returns the result of the output from
  228.   the command catenated together into a single string separated by spaces.
  229.  
  230.   For example:
  231.  
  232.       $(shell ls *.c)
  233.  
  234.   returns the list of *.c files from the current directory.
  235.  
  236. - Added $(sort data) macro which sorts the list of space separated tokens in
  237.   data.
  238.  
  239. - Added $(strip data) macro which makes sure that data contains a list
  240.   of tokens separated by a single space.
  241.  
  242. - Added $(subst,pat,replacement data)
  243.  
  244.  
  245.  
  246. DETAILS OF BUG FIXES:
  247. =====================
  248.  
  249. MAN PAGE TWEAKS:
  250. ----------------
  251. - Made all "it's" in the document to "its" -- oops.
  252.  
  253. - Documented '.IMPORT : .EVERYTHING' functionality and ensured that global
  254.   attributes are not affected by it.
  255.  
  256. - Documented '.NOINFER:' functionality.
  257.  
  258. - Documented new features
  259.  
  260.  
  261. UNIX RELATED BUG FIXES:
  262. -----------------------
  263. - Changed unix/arlib.c to use binary time headers if M_XENIX.  You can fix
  264.   this by changing the definition of ASCARCH in unix/sysvr3/config.h when
  265.   M_XENIX is defined.  I don't know which is the true case so if anyone knows
  266.   can you let me know and I'll make sure it gets set right.
  267.  
  268. - Updated unix/arlib.c to handle RS6000/AIX 3.0 archive headers.  This is
  269.   a bit of a pain as #ifdef _AIX had to be spattered throughout arlib.c
  270.   and in a number of other places.  It was the lesser of two evils.  Will
  271.   IBM ever get stuff like __STDC__ right?
  272.  
  273.  
  274. MSDOS RELATED BUG FIXES:
  275. ------------------------
  276. - Applied fix supplied by few@gupta.com (Frank Whaley) to msdos/spawn.c for
  277.   building and handling path names during the search for an executable.
  278.   It could have hung the machine the way it was due to lack of a NULL
  279.   pointer.
  280.  
  281. - Fixed another bug in msdos/spawn.c.  If you tried to run a program that had
  282.   a full path including extension then the current spawn.c did not find it
  283.   in some instances.  Whether it did or not depended on what the contents of
  284.   the NULL pointer happened to be :-).
  285.  
  286. - Fixed a HUGE bug in msdos/spawn.c.  There was an off by one error in
  287.   _get_path that caused serious memory stomps, and eventual hangs of the
  288.   machine.
  289.  
  290. - Fixed bug in msdos/switchar.c, it now correctly selects the code to
  291.   get the switchar if it's an MSDOS compile.
  292.  
  293.  
  294. OS/2 RELATED FIXES:
  295. -------------------
  296. - Applied patch for OS/2 supplied by "Kai Uwe Rommel".  Details (from Kai) of
  297.   patch:
  298.      o in os2/_chdir.c, there was a transmission error or typo, Ox20 instead of
  299.        0x20
  300.      o in os2/dmake.cs I corrected the options; my compiler shell maintains a
  301.        global ("system-wide") set of default options, so there is no need to
  302.        use -G2 etc. there. Also, -WX seems to be unnessecary.
  303.      o in os2/dmake.def, I commented out the IMPORT statement (see below).
  304.      o in os2/ruletab.c, MAXPROCESS *MUST* me removed, otherwise the argument
  305.        of the -Pn option seems to be ignored.
  306.      o in os2/runargv.c, I moved the session title code (with a call to an
  307.        undocumented system call) into "#ifdef SESSTITTLE" because it also
  308.        prevents BIND to make a family mode application that also runs under DOS
  309.        or in the DOS box; this may be of interest to people who use both DOS
  310.        and OS/2 on their machines, to prevent them from having two binaries of
  311.        dmake on their hard disk. This also requires to remove the import
  312.        statement  for the undoc. system call from the dmake.def file.
  313.      o in os2/startup.h I added a / into the MAKESTARTUP definition.
  314.  
  315.  
  316. GENERAL FIXES:
  317. --------------
  318. - Fixed the # comment handling inside recipes to mirror what standard makes
  319.   do.  This turned out to be trivial to do so I stuck it in.
  320.  
  321. - Fixed bug reported by bill@twwells.com, If dmake was run in a /bin/sh with
  322.   makefile text comming via a pipe from stdin then when dmake executed the
  323.   makefile it would see an extra child termination comming from the source
  324.   of the pipe.  dmake now ignores returned pid's from child processes that it
  325.   did not spawn.  An example, under /bin/sh, do:
  326.  
  327.     cat <<\+ | dmake -vf - verify
  328.     verify : make
  329.         echo verify
  330.     make :
  331.         echo make
  332.     +
  333.  
  334.   The cat could finish before the first real dmake child finished and would
  335.   cause a core dump.
  336.  
  337. - Inserted definitions of FP_OFF and FP_SEG into spawn.c and find.c under
  338.   msdos directory as Turbo C++ was having troubles finding them.  As reported
  339.   by Nino Margetic (nino@uk.ac.ucl.sm.mph).
  340.  
  341. - Changed Fatal error message for multiple .SETDIR= attribute specifications
  342.   into a Warning.
  343.  
  344. - Fixed a nasty bug in Parallel Make.  It would get the names of .SETDIR'ed
  345.   prerequisites wrong.  Specifically it lost the .SETDIR value when setting
  346.   the $< etc macro values for the final target.
  347.  
  348. - Fixed bug reported by Len Reed.  When removing prerequisites using .REMOVE
  349.   I now set their flags as no longer existing.  This way if we happen to
  350.   walk this part of the graph again from some other place we know enough
  351.   to remake them.  This is really a simpler case of the general go to the
  352.   same spot from a different .SETDIR location problem.
  353.  
  354.   NOTE:  The following makefile is an example of what this fixes, but that
  355.   it may not work correctly with -Pn where n>1 since .REMOVES are run and
  356.   they happen in parallel along with the rest of the processing.  There is
  357.   a race in getting the .REMOVE done and walking the graph from
  358.   the large.target side.  Don't build graphs like this.  If you want to
  359.   do it in parallel then put each of large and small in a different
  360.   directory.
  361.  
  362.       all .SEQUENTIAL : small.target large.target
  363.  
  364.       small.target : one.sml two.sml
  365.           echo Building $@ from $&
  366.  
  367.       large.target : one.lrg two.lrg; echo Building $@ from $&
  368.  
  369.       %.sml : %.c; echo $(CC) $(CFLAGS) -c -Fo$<; touch $@
  370.  
  371.       %.lrg : %.c; echo $(CC) $(CFLAGS) -AL -c -Fo$<; touch $@
  372.  
  373.       CO = co -u
  374.       CC = cc
  375.       V = ,v
  376.  
  377.      % : $$(@:d)RCS/$$(@:f)$V;- $(CO) $(COFLAGS) $@
  378.         .NOINFER : %$V $$(@:d)RCS/$$(@:f)$V
  379.  
  380.       :REMOVE :; /bin/rm -f $&
  381.  
  382. - Fixed core dump on circularity test for targets that contain a .LIBRARY
  383.   beats me why I put the explicit test in to ignore the libraries if found
  384.   to be circular.  Someone will complain if this is broken now but I don't
  385.   think it is.
  386.  
  387. - Cleaned up the .h files, they are much cleaner and more
  388.   organized now.
  389.      o Added define of _POSIX_SOURCE for RS/6000
  390.      o Moved the definition of size_t from all over the place to alloc.h
  391.      o Cleaned up the definition of POSTAR for XENIX, You shouldn't need it.
  392.  
  393. - Fixed a bug with setting macro variables from the command line.
  394.   It now recognizes a + only if it preceeds an '='.
  395.  
  396. - WARNING if you use the vfprintf code supplied with dmake then you might get
  397.   a warning indicating that an illegal pointer assignment is taking place,
  398.   ignore it.
  399.  
  400. - Fixed handling of attributes for recipes and :: rules.  The following is now
  401.   true:
  402.  
  403.     .MKSARGS : list_of_targets
  404.  
  405.   Will set .MKSARGS for any target appearing in list_of_targets irrespective
  406.   of whether it appears as a target in :: or : recipe lines.  Conversely
  407.   the construct:
  408.  
  409.     target1 :: ; recipe 1
  410.     target1 .MKSARGS :: ; recipe 2
  411.  
  412.   will set .MKSARGS when making target1 using recipe 2 only.
  413.  
  414. - Fixed a nasty bug in string.c.  Forgot to check for NIL(char) in second
  415.   argument to _strspn and _strpbrk, sheesh!.
  416.  
  417. - Propagate parent timestamp for infered prerequisites if it is >= not just >.
  418.   This fixes a small bug with directories that were prerequisites of a target.
  419.   If the directory was modified when the target was made it is quite possible
  420.   they may have the same time-stamp.  This in general is not a good thing to
  421.   do anyway.
  422.  
  423. - Modified $(mktmp ...) macro so that you can specify a file name.
  424.  
  425.     $(mktmp[,[FILE][,TEXT]] data);
  426.  
  427.   will put data into a file called Expand(FILE), if FILE contains
  428.   $(TMPFILE) then a suitable temporary file name is generated and
  429.   substituted.  The result value of the macro is the name of the tempfile
  430.   or if TEXT is defined, is the result of Expand(TEXT).
  431.  
  432.   Some examples are:
  433.  
  434.     $(mktmp data)            ==> normal tmpfile
  435.     $(mktmp,$(TMPFILE) data)    ==> normal tmpfile
  436.     $(mktmp,, data)            ==> normal tmpfile
  437.     $(mktmp,turboc.cfg $(CFLAGS))    ==> tmpfile named turboc.cfg
  438.     $(mktmp,,$(TMPSHELL) data)    ==> normal tmpfile, named Expand(...)
  439.     $(mktmp,,$(NULL) data)        ==> normal tmpfile, null result
  440.  
  441. - Modified making of .MAKEFILES special targets to make certain that
  442.   it does not make a prerequisite of that target if the -n flag is specified.
  443.  
  444. - Changed statting of targets to match the functionality of .SETDIR a bit
  445.   better.  When looking into a library and we have used .SETDIR to change
  446.   directories, dmake will look into a relative current path, and if it
  447.   does not find it, it will search a library found by prepending the value
  448.   of the TMD macro to the path of the library file.
  449.  
  450. - Fixed the handling of :: and %-meta targets by ripping out the HOW internal
  451.   data-structure, and by doing some interesting things with the cell dag.
  452.   .UPDATEALL is now more comprehensive in its behaviour (might even be
  453.   correct).  Sets of :: rules for a target return the timestamp for the target
  454.   that resulted in it's being made.
  455.