update dev300-m58
[ooovba.git] / dmake / readme / release.txt
blob41b95097679c0dcd8164025444009855f7c9de73
1 This file is superseded/continued by the toplevel NEWS file.
3 DMAKE Version 4.1
4 =================
5 FINAL FREE RELEASE OF DMAKE, REPLACES VERSION 4.0
7 Nature: This distribution advances dmake to Version 4.1, patch level 0.
8 ------- This release adds significant functionality and eliminates
9         bugs that were introduced with release 4.0.
12 DETAILS OF ENHANCEMENTS/TWEAKS:
13 ===============================
15 BUG FIXES:
16 ----------
18 1. General clean up all over to fix small incompatibilities and obvious
19    typos.
21 2. Fixed bug in getinp.c where buffer was being erroneously overwritten,
22    this caused the invalidation of the return address on the stack on
23    DOS systems.
25 3. Fixed a bug that caused the "<target> is up to date" message to be
26    suppressed.
28 4. Fixed a bug involving the value of $@ in conjunction with dynamic
29    prerequisites.
31 5. Relegated the warning associated with duplicate entries in prerequisite
32    lists to a non-essential warning.  Added an option flag -Vw to display
33    it if you wish to check your makefile for duplicate entries.  Either way
34    the parser ignores duplicates.
36 6. Better default action on checking out RCS targets.  If an RCS target has
37    no directory prefix of its own it is checked out into the directory
38    which contains the RCS subdirectory, otherwise it ends up in its directory
39    qualified location.
41 7. Improved the speed of lookups in the directory cache; handle mixed case
42    file name entries on OS/2 and Win95/NT.
44 8. Improved prerequisite list generation for long prerequisite lists.
46 9. Rearanged startup macro files to form an architectural hierarchy.
47    This greatly simplifies the maintenance of the startup files.  They
48    might even be right at some point in the future.  Please let me know if
49    you encounter difficulties, as I don't have access to all possible
50    platforms, this sub-hierarchy is bound to have ommisions at this release
51    and hence is intended to be evolutionary over time.
53 10. A build that only touches targets (-t) uses the same algorithm to decide
54     valid names as a normal build.
56 11. Conditional macro assignments fixed, and now work for builtin macro
57     variables as well.
60 NEW FEATURES:
61 -------------
63 0. Complete reorganization of Dmake STARTUP scripts.  Please refer to the
64    installation notes for details.  THIS ONE IS IMPORTANT!!!
66 1. Support for long archive member names if Elf is available, plus better
67    support for archivers that truncate member names (see comments in
68    unix/arlib.c for details).
70 2. Added variable MAKEVERSION which contains a string indicating the current
71    version of dmake.
73 3. Added the .EXECUTE attribute, see man page for details.
75 4. Added the .ERRREMOVE attribute, see man page for details.
77 5. Added support for gmake style if/else/endif, but only if not part of
78    a Group recipe.
80 6. Added initial build target for Coherent version 4.2 UNIX
81    and for Windows-NT/Windows-95 32-bit app using Borland C++ 4.0,4.5, 5.0,
82    and Microsoft Visual C++ 4.0.
84 7. MSDOS version now supports two builtin runtime commands, noop, and echo.
86 8. Added new macro $(uniq list) which returns a sorted version of the
87    white space separated tokens in list such that there are no repetitions.
89 9. Added the function macro $(echo list) which simply returns list.
90    This is most useful in conjunction with the new $(foreach ...)
91    function macro.
93 10. Added gmake style function macro
95         $(foreach,var,list data)
97     where var and list are expanded, and the result is the concatenation of
98     expanding data with var being set to each white space separated token in
99     list in turn.  For example:
101         list = a b c
102         all :
103                 echo [$(foreach,i,$(list) [$i])]
105     will output
107         [[a] [b] [c]]
109     The iterator variable is defined as a local variable to this foreach
110     instance.  The following expression illustrates this:
112         $(foreach,i,$(foreach,i,$(sort c a b) root/$i) [$i/f.h])
114     when evaluated the result is:
116         [root/a/f.h] [root/b/f.h] [root/c/f.h]
118     The specification of list must be a valid macro expression, such as:
120         $($(assign list=a b c))
121         $(sort d a b c)
122         $(echo a b c)
124     and cannot just be the list itself.  That is, the following foreach
125     expression:
127         $(foreach,i,a b c [$i])
129     yields:
130         
131         "b c [a]"
133     when evaluated.
135 11. Added the macro $(and list).
137 12. Added the macro $(or list).
139 13. Added the macro $(not term).
141 14. Added the .NOINFER attribute to the .INCLUDE directive.  When specified
142     any prerequisite of the .INCLUDE directive which cannot be found in
143     the .INCLUDEDIRS search list is not automatically made.
145 15. Improved the handling of internal macros for proper functioning of the *=
146     and *:= assignment constructs.  Macros that are internally initially
147     defined are considered to be undefined for the purpose of *= and *:=
148     assignment until they are the target of an explicit assignment operation.
150 16. Improved the caching of file names, and their matching on case insensitive
151     file systems.  Two control macros help to manage the functionality:
153         .DIRCACHE := yes
155     Implies that the directory cache will be used.  This is on by default for
156     systems that support the reading of directories.  Setting the value of this
157     macro to 'no' is equivalent to supplying the '-d' command line switch.
159         .DIRCACHERESPCASE := yes
161     Causes dmake to respect the case of the directory entries when the cache
162     is enabled, thereby treating directory entries in a case sensitive manner.
163     Setting this to 'no' disables the matching of case.  This macro has effect
164     only if .DIRCACHE := yes.  Otherwise the facilities provided by the native
165     OS are used to match file names using 'stat'.
167 17. Added parameterized user defined function macros.  Yes it's true
168     you may now define your own parametized function macros.  Here is
169     how it works.  Any macro that is not a predefined function macro and
170     is invoked with parameters is looked up as a user defined function
171     macro.  A new macro scope is created.  The n'th argument to the
172     macro is then assigned to the value of the the macro $n where n is 0
173     for the first argument, 1 for the second argument and so on.  The
174     argument is expanded before it is assigned.  The original macro is
175     then expanded.  For example:
177         FOO = a $0 b $1 c $2 d
178         echo :; $(FOO x y z)
180     Will produce the result string "a z b y c z d".  The
181     expansion of $(FOO) on it's own behaves as expected and returns the
182     string "a b c d" (assuming that each of $0, $1, $2
183     are undefined).   The only restriction when specifying function
184     macro arguments is as before:  they cannot contain spaces
185     themselves.
188 ACKNOWLEDGEMENTS:
189 =================
190     Thanks to all who submitted code for new features, suggestions for
191     improvements, and bug fixes.  I have tried to make sure no gotchas
192     remain, if you encounter problems installing or running dmake please
193     let me know.  As always, I am always happy to receive e-mail.
195     Many have contributed suggestions and bug fixes that make this
196     release possible.  The NET thanks you.