Nokia nmake Product Builder
Customer Support Newsletter

Issue No. 29 - August 2008
  1. Alcatel-Lucent nmake 10 Released
  2. New Release Numbering Scheme
  3. Javadeps alu2.2.4 Released
  4. Structured Build Logs
  5. $(>) Behavior Restored
  6. Required libraries for shared library targets

Alcatel-Lucent nmake 10 Released

We are pleased to announce availability of Alcatel-Lucent nmake 10. nmake 10 provides several features and enhancements, including the following:

The release is coordinated with Javadeps alu2.2.4 and nmake Eclipse CDT plugin 0.4.0, both separately downloadable. See the nmake 10 Release Notes for more information including a complete list of changes from the previous release alu3.9.

With few exceptions, nmake 10 is upwardly compatible from nmake alu3.9. Current customers may upgrade free of charge to nmake 10 using existing installed licenses, no license upgrade is required. See the nmake 10 release page for download information and documentation, and the Alcatel-Lucent nmake home page at for general product information.


New Release Numbering Scheme

The release numbering scheme has changed. Starting with the release of nmake 10 the major release number is being dropped and releases are numbered incrementally starting from "10". The previous release was "alu3.9".


Javadeps alu2.2.4 Released

Javadeps alu2.2.4 is now available. Javadeps is an optional package and only required for projects building Java code using the nmake supplied :JAVA: operator. Current Javadeps users upgrading to nmake 10 should also upgrade to Javadeps alu2.2.4 since alu2.2.4 is required by nmake 10 for full functionality. Download the new package from the Javadeps page. This release contains the following changes:


Structured Build Logs

nmake 10 introduces an experimental feature designed to generate structured build logs. Build log structure is indicated through insertion of tags at appropriate locations in the build log, generally at beginning and end of build output for each triggered action. The tags are user configurable with few restrictions on their format.

The initial release provides special support for XML format tags. This enables build log query, formatting, and transformation using standard XML tools.

For details and usage examples see Generating Structured Build Logs.


$(>) Behavior Restored

nmake 10 restores the behavior of the $(>) automatic variable when used in metarules to its original behavior prior to release lu3.6 (see lu3.6 Release Notes, change 010035). The change should not affect most users.

The previous behavior allowed $(>) to expand more than one file prerequisite in a metarule. However, the first %-pattern prerequisite would always expand but the remaining prerequisites would expand only if their time stamps were out of date. It appears projects are not using this model and the inconsistent expansion of the prerequisites makes it difficult to take advantage of. Also, the expansion of multiple prerequisites had some side effects causing simple compiles to get unexpected file names attached to their command line and other unexpected expansion of $(>) when chaining metarules.

The restored behavior provides more consistent and predictable results. Now $(>) in a metarule always expands only the first %-pattern prerequisite, also known as the primary metarule prerequisite. Since we found no one using the previous behavior we believe this change to have little to no impact on existing makefiles. To expand multiple prerequisites in a metarule use the $(*) automatic variable instead, which expands all the file prerequisites. Also, the user manuals now correctly document the behavior of $(>) in metarules.


Required libraries for shared library targets

nmake 10 adds the ability to link archive libraries in shared library targets made with the double colon (::) operator. This allows required archive members to be included directly in the target shared library. Here is a simple example, notice libabc.a is included in the creation of

$ ls -l
total 4
-rw-r--r-- 1 richb richb   63 Jul 24 16:39 Makefile
drwxr-xr-x 2 richb richb 4096 Jul 24 16:44 lib
-rw-r--r-- 1 richb richb   58 Jul 24 16:42 xyz.c

$ ls -l lib
total 4
-rw-r--r-- 1 richb richb 1112 Jul 24 16:44 libabc.a

$ cat Makefile 
LIBDIR = lib
.SOURCE.a : $(LIBDIR) :: xyz.c -labc

$ nmake
+ cc -O -xcode=pic32 -I- -c xyz.c
+ /tools/SUNWspro/bin/cc -G -o xyz.o lib/libabc.a

$ nmake install
+ cp lib/

Shared library targets using the :LIBRARY: operator are not affected. :LIBRARY: uses nmake's required library feature to track library dependencies and pull in prerequisite libraries when necessary. To do this an extra file listing the required libraries is created when the library is installed. This file is installed with the library under a lib/ sub-directory. When linking with the library nmake reads the file and includes any other listed libraries. Here is the above example using :LIBRARY:.

$ cat Makefile 
LIBDIR = lib
sharedliblinks = 0
sharedlibvers  = 0
xyz :LIBRARY: xyz.c -labc

$ nmake
+ cc -O -xcode=pic32 -I- -c xyz.c
+ ar r libxyz.a xyz.o
ar: creating libxyz.a
+ rm -f xyz.o
+ /tools/SUNWspro/bin/cc -G -o -zallextract libxyz.a -zdefaultextract

$ nmake install
+ cp libxyz.a lib/libxyz.a
+ mkdir -p lib/lib
+ 2> /dev/null
+ cp xyz.req lib/lib/xyz
+ cp lib/

$ cat lib/lib/xyz


<<home / newsletters