1 This file is superseded/continued by the toplevel NEWS file.
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 ===============================
18 1. General clean up all over to fix small incompatibilities and obvious
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
25 3. Fixed a bug that caused the "<target> is up to date" message to be
28 4. Fixed a bug involving the value of $@ in conjunction with dynamic
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
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
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
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
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 ...)
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:
103 echo [$(foreach,i,$(list) [$i])]
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))
124 and cannot just be the list itself. That is, the following foreach
127 $(foreach,i,a b c [$i])
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:
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
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
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.