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:
- Experimental structured build logs (allows build output in XML)
- OS Version dependent probe files
- Support for recent Solaris C/C++ compilers
- Improved support for Windows
- Fixes for Java builds
- Experimental Eclipse plugin pre-release
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 http://www.bell-labs.com/project/nmake/ 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:
- bad package name error
- jdeps exception error without --vpath arg
- jdk 1.4.2 class names
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 libxyz.so.
$ 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 CCFLAGS += $$(CC.PIC) LIBDIR = lib .SOURCE.a : $(LIBDIR) libxyz.so :: xyz.c -labc $ nmake + cc -O -xcode=pic32 -I- -c xyz.c + /tools/SUNWspro/bin/cc -G -o libxyz.so xyz.o lib/libabc.a $ nmake install + cp libxyz.so lib/libxyz.so
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 CCFLAGS += $$(CC.PIC) LIBDIR = lib sharedliblinks = 0 sharedlibvers = 0 .SOURCE.a : $(LIBDIR) :ALL: 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 libxyz.so -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 libxyz.so lib/libxyz.so $ cat lib/lib/xyz -lxyz -labc