Nokia nmake Product Builder
Release Notes -- Nokia nmake 3.0
[Table of Contents]
The following bugs were fixed in nmake 3.0:
- A Fix in the += Assignment Operator
Do not accumulate extra spaces when null value
variables are on the rhs of the += assignment operator.
- Fixes in Handling Automatic Variables
- $(!) has the correct value when nmake command is invoked
the second time.
- $(=) can now pass state variables through .EXPORT.
- Fix in Handling Modified Variable Value
If the value of a variable is a bound file name and it may be changed
at execution time especially under viewpathing, now
examines the old value when nmake command is invoked the second time. If
the value changed, makefile will be re-compiled:
DEFAULT_SRCS = $("file":T=F)
When nmake command runs for the first time, the VPATH is set and
"file" is located in a lower view. When nmake is invoked
the second time, the VPATH is not set, "file" does not
exist. nmake will now re-evaluate the value for
- 4.1.4 A Fix in Base Rule Variable link
now correct pattern matching for
link=pattern (except link=* in viewpathing,
see Section 5.1 for details) when installing selective targets by
link (i.e., ln). For example, if t1,
t2 and t3 are targets:
nmake install link=t1
t1 will be linked to the installed area, and
the targets t2 and t3 will be copied.
- A Fix in Handling $PATH
Able to handle the long length of the environment
variable PATH value.
- Fixes in clobber
- No *.mo file is left in a directory where no *.mo
exists and the common action clobber is executed.
- The clobber common action now also won't clobber the *.mk
files when makefile is:
:MAKE: a.mk b.mk
- A Fix in clobber.install
When INSTALLROOT=., clobber.install will now remove
files in the installed area.
- Fixes in clean and clobber
The clean and clobber common actions will not
remove the files in the installed area when INSTALLROOT
has the value of $(HOME).
- A Fix in :LIBRARY:
:LIBRARY: now will take CCFLAGS assignment from
the command line. For example, using :LIBRARY: with
CCFLAGS+=-g on the command line now generates the correct
library name (e.g. libname-g.a).
- Fixes in the :JOINT: Assertion Operator
Now make the multiple targets specified on the
lhs behave the same when common actions are applied. Touching
any secondary targets of a multiple targets assertion now will trigger
the action. :JOINT: will not cause core-dump
at the subsequent nmake invocation.
- Fixes in :MAKE:
Now find makefiles specified on the rhs
of the :MAKE: assertion operator via viewpathing. Also, the
variable values assigned on the command line are correctly passed to
makefiles. In addition, treats the lhs atom
as a label target.
- Fixes in :cc:
:cc: now inherits .SOURCE.h and can locate header
files specified in .SOURCE.h. Also, :cc: works in a
viewpathing situation. nmake can use *.o's in a lower view to link
with top-view targets.
- Fixes in :COPY:
If an implicit dependency of a copied file of :COPY: is
touched, the copied file will now be rebuilt. For example:
a1.c :COPY: a.c
If the included header file is touched, both of a.c and
a1.c will be rebuilt.
- A Fix in :INSTALLDIR:
nmake won't install the targets such as in the following
example where the target name includes a relative or absolute path,
and lhs of :INSTALLDIR: is not specified.
LIBRARIES = ../lib/liba.a
$(LIBRARIES) :: a.c
- A Fix for the Exit Code of Unknown Command Line Option
Now give exit code 1 for any unknown command line options.
- A Fix for -g
Now allow both the global makefile and its compiled
file (*.mo) to coexist in the same directory.
- Fixes for -M
Fixes were made in the -M command line option to work with
-k and -x options to produce correct output
for explicit recursion (i.e. $(MAKE)) and implicit recursion
(i.e. :MAKE:), nested includes and conditional includes, and
in a viewpathing situation. -k is needed when there are nested
includes and -x is needed when using viewpathing. Fixes
were also made to generate -l++ for the C++ link line. This
command line option has to work with keepgoing (-k)
and expandview (-x) to get the correct output.
(See Section 5.1 also).
- A Fix in the .DONTCARE Special Atom
Now correctly react to the command line options
ignore and keepgoing when the .DONTCARE
special atom is used.
- A Fix in the .UNBIND Special Atom
Now correctly unbind the directories. This special
atom didn't function in nmake 2.2.
- A Fix in .APPEND.%.x
.APPEND.%.x now works where x is .ARCHIVE
- A Fix in Scanning for C Conditional Includes
Touching any conditional included header files causes
rebuilding relevant target(s).
- A Fix in Scanning for Makefile Includes
Recompile makefiles when an included file of
the makefile is touched.
- A Fix in Handling Directory Structure in Viewpathing
Now correctly find files when some directories are
missing either in the top view, or in the intermediate view, or in the
- A Fix in Metarule Chaining
Now work properly on metarule chaining. Cases like
the following did not work in nmake 2.2.
%.om : %.o
cp $(*) $(<)
%.y : %.r
cp $(*) $(<)
%.r : %.m
cp $(*) $(<)
In this example, nmake makes y.mo from y.m by
triggering a chain of metarules defined in this makefile and in the base
- A Fix in %.o : %.c .CLEAR Metarule
Now do not recompile everything when the user is in
the top view of VPATH and the rule of
%.o : %.c .CLEAR
is set in a lower view.
- A Fix in if-elif-else-end Construct
The construct with back slashes in elif clause now works
- Now correctly processes the ## C++ notation for
- Does not generate extra space for asm.
- Will no longer dump core when handling long comments in C code.
- Now gives more appropriate error messages when an error is detected.
- Now handles a macro definition containing # at the beginning
of the string.
- Now generates correct configuration files for all the compilers we
- Generates correct directory names for standard include files and
libraries of the C++ language processor.
- ccc generates the -I-D option correctly when the mcc68k
cross-compiler is used on a SUN4 workstation with nmake.
- ccc can now recognize source with .C suffix.
- Linking Shared Libraries Once and Not Relinking
No longer relinks a newer version of shared libraries
to targets after the first link, unless the base rule variable
force_shared is set to 1.
- A Fix in Generating -L Flags
Now generates -L for the libraries specified
in LDLIBRARIES and for shared libraries specified as
-lname (i.e. library name is libname.a) in the
prerequisite list of the :: operator.
- A Fix in Linking Library of -l*.1
Now treats -l*.1 correctly as a library,
not a man page.
- Changing User-defined Attributes
Now do not dump core when user-defined attributes
are changed or deleted.
- A Fix in the # Style Comments
Now correctly recognize # style comments
when an odd number of quotes exists in the comment.
- A Fix in Binding
No longer dumps core when it cannot bind a file.
- A Fix in Handling ./ File Name Aliasing
Now work correctly with ./ file name aliasing.
t :: ./src/main.c
t :: src/main.c
- A Fix in Handling exec make
When nmake execs old make, the Makefile is
now picked, not makefile.
- A Fix in Generating -I Flags
Now generate the correct -I compiler flags
and no longer ignores the /usr/include used in the
.SOURCE.h special atom.
- A Fix in Handling cpp
When using nohup, nmake now won't
pick up a wrong cpp.
- A Fix in the 2.2 Release Notes
The base rule variable concurrency has been replaced by
- Fixes in nmake man Pages
Man pages have been updated.
[Table of Contents]
Last Update: Friday,12-Aug-2016 12:29:06 EDT