OPTIMIZED
|
|
Release Notes
The following are release notes for
dmake
Version 4.1.
FULL RELEASE OF DMAKE, REPLACES VERSION 4.0
This distribution advances
dmake.
to Version 4.1, patch level 0.
This release adds significant functionality and eliminates
bugs that were introduced with release 4.0.
DETAILS OF CHANGES:
BUG FIXES
- General clean up all over to fix small incompatibilities and obvious
typos.
- Fixed bug in getinp.c where buffer was being erroneously overwritten,
this caused the invalidation of the return address on the stack on
DOS systems.
- Fixed a bug that caused the " is up to date" message to be
suppressed.
- Fixed a bug involving the value of $@ in conjunction with dynamic
prerequisites.
- Relegated the warning associated with duplicate entries in
prerequisite lists to a non-essential warning. Added an option
flag -Vw to display it if you wish to check your makefile for
duplicate entries. Either way the parser ignores duplicates.
- Better default action on checking out RCS targets. If an RCS target
has no directory prefix of its own it is checked out into the
directory which contains the RCS subdirectory, otherwise it ends
up in its directory qualified location.
- Improved the speed of lookups in the directory cache; handle mixed
case file name entries on OS/2 and Win95/NT.
- Improved prerequisite list generation for long prerequisite lists.
- Rearanged startup macro files to form an architectural hierarchy.
This greatly simplifies the maintenance of the startup files. They
might even be right at some point in the future. Please report
if you encounter difficulties, as
this sub-hierarchy is bound to have ommisions at this
release and is intended to be evolutionary over time.
- A build that only touches targets (-t) uses the same algorithm to
decide valid names as a normal build.
- Fixed conditional macro assignments; they now work for builtin macro
variables as well.
NEW FEATURES
- Complete reorganization of STARTUP scripts.
Please refer to the
installation
notes for details. THIS ONE IS IMPORTANT!!!
- Support for long archive member names if Elf is available, plus
better support for archivers that truncate member names
(see comments in unix/arlib.c for details).
- Added variable MAKEVERSION which contains a string
indicating the current version of
dmake.
- Added the .EXECUTE attribute, see
On-Line Manual for details.
- Added the .ERRREMOVE attribute, see the
On-Line Manual for details.
- Added support for gmake style if/else/endif,
but only if not part of a Group recipe.
- Added build target for Coherent version 4.2 UNIX
and for Windows-NT/Windows-95 32-bit app using Borland
C++ 5.0, and Microsoft Visual C++ 4.0.
- MSDOS version now supports the builtin runtime command,
noop.
- Added new macro $(uniq list) which returns a sorted
version of the white space separated tokens in list such that
there are no repetitions.
- Added the function macro $(echo list) which simply
returns list. This is most useful in conjunction with the new
$(foreach ...) function macro.
- Added gmake style function macro
$(foreach,var,list data)
where var and list are expanded, and the result is the
concatenation of expanding data with var being set to each
white space separated token in list in turn. For example:
list = a b c
all :; echo [$(foreach,i,$(list) [$i])]
will output
[[a] [b] [c]]
The iterator variable is defined as a local variable to this foreach
instance. The following expression illustrates this:
$(foreach,i,$(foreach,i,$(sort c a b) root/$i) [$i/f.h])
evaluates to:
[root/a/f.h] [root/b/f.h] [root/c/f.h]
The specification of list must be a valid macro expression, such as:
$($(assign list=a b c))
$(sort d a b c)
$(echo a b c)
and cannot just be the list itself. That is, the following foreach
expression:
$(foreach,i,a b c [$i])
yields:
"b c [a]"
when evaluated.
- Added the macro $(and list) which takes each token from
list and expands it. If any expansion results in an
empty string, then the result is an empty string, otherwise the
result is "t".
- Added the macro $(or list) which takes each token from
list and expands it. If any expansion results in a
non-empty string, then the result is "t", otherwise the
result is an empty string.
- Added the macro $(not arg) which returns "t" if
the expansion of arg results in an empty string, otherwise
it returns an empty string.
- Added the .NOINFER attribute to the .INCLUDE
directive. When specified any prerequisite of the .INCLUDE
directive which cannot be described in the .INCLUDEDIRS
search list is not automatically made.
- Improved the handling of internal macros for proper functioning
of the *= and *:= assignment constructs.
Macros that are internally initially
defined are considered to be undefined for the purpose of *=
and *:= assignment until they are the target of an explicit
assignment operation.
- Improved the caching of file names, and their matching on case
insensitive file systems. Two control macros help to manage the
functionality:
.DIRCACHE := yes
Implies that the directory cache will be used. This is on
by default for systems that support the reading of directories.
Setting the value of this
macro to 'no' is equivalent to supplying the '-d' command line
switch. Setting the control macro:
.DIRCACHERESPCASE := yes
causes
dmake
to respect the case of the directory entries when the cache
is enabled (the default),
thereby treating directory entries in a case sensitive manner.
Setting this to 'no' disables the matching of case,
thereby matching directory entries in a case incensitive
manner.
This macro has effect only if .DIRCACHE := yes.
Otherwise the facilities provided by the native
OS are used to match file-name case.
- Added parameterized user defined function macros. Yes it's true
you may now define your own parametized function macros. Here is
how it works. Any macro that is not a predefined function macro and
is invoked with parameters is looked up as a user defined function
macro. A new macro scope is created. The n'th argument to the
macro is then assigned to the value of the the macro $n where n is 0
for the first argument, 1 for the second argument and so on. The
argument is expanded before it is assigned. The original macro is
then expanded. For example:
FOO = a $0 b $1 c $2 d
echo :; $(FOO x y z)
Will produce the result string "a z b y c z d". The
expansion of $(FOO) on it's own behaves as expected and returns the
string "a b c d" (assuming that each of $0, $1, $2
are undefined). The only restriction when specifying function
macro arguments is as before: they cannot contain spaces
themselves.
For those that may still be interested here are the release notes
for previous major versions of
dmake.
Please send comments and suggestions to
webmaster
Copyright © 1996, 1997 by
WTI Corp., All rights reserved.
|