| Alcatel-Lucent nmake Product Builder | ![]() |
Released: October 2004
1. Introduction
1.1 Supported Hardware
1.2 Hardware Requirements
1.3 Software Requirements
1.4 Customer Support
2. New Features and Significant Enhancements
2.1 Support for the Services for Unix (SFU) platform
2.2 Support for JDK 5.0
2.3 Performance improvement in Java dependency analysis
2.4 Option to disable probe
2.5 Support for HP-UX nonstandard shared library names
2.6 quoteinclude prefix enhancement
2.7 Support for ISO C99 standard variadic macros
2.8 New lock files
2.9 New option to disable umask change
3. Bug Fixes and Enhancements
3.1 Baserules
3.2 cpp
3.3 Engine
3.4 Operators
3.5 Probe
3.6 Miscellaneous
3.7 Variables
3.8 Options
4. Changes Impacting lu3.5 Makefiles
5. Known Problems and Remarks
5.1 Known Problems
5.2 Remarks
This document announces the new release of nmake version lu3.7. nmake is fully supported and is in wide production use throughout Lucent Technologies, AT&T, and elsewhere.
These lu3.7 Release Notes discuss in detail the new features, highlights bug fixes, additional enhancements, and known problems.
The lu3.7 release has been ported to many UNIX-based and UNIX-like systems. For a current list see the Availability Chart on the nmake web site, http://www.bell-labs.com/project/nmake/. Or contact the Customer Support helpdesk below.
This release of nmake is available for 6 UNIX® platforms (HP-UX, AIX, MP-RAS, IRIX, Solaris, and SunOS), Linux®, and Windows® (under SFU/Interix or UWIN). See the release lu3.7 download page for a listing of available distribution packages. nmake is generally upward compatible with later OS releases in a series (for example, the series Solaris 2.5 through 2.9); contact Technical Support with any compatibility questions or with any requests for porting to other platforms.
The Windows-based versions of nmake are based on either the Windows Services for UNIX (SFU/Interix) or UWIN porting/development environments and require installation of one of these packages in order to run. The selected porting/development package needs to be obtained directly from the package supplier and installed following the installation procedure of the particular package. See http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx for information on SFU/Interix and http://www.research.att.com/sw/tools/uwin for information on UWIN. See the release lu3.7 download page for specific Windows versions required as well as required versions for either SFU/Interix or UWIN.
The Linux version of nmake requires the package which
provides libstdc++-libc6.1-1.so.2 for
makelog output serialization support. In Red Hat 6.0 this
is the libstdc++ rpm, and in Red Hat 7.0 and later the compat-libstdc++ rpm.
nmake lu3.7 provides dependency-based Java build support. This feature currently requires an external Java source scanner called JavaDeps to extract inter-modules dependencies from Java source. nmake lu3.7 requires JavaDeps release lu2.2; this version is downloadable from the nmake JavaDeps page. Installation instructions are also on that page. THIS PACKAGE IS ONLY REQUIRED BY PROJECTS PERFORMING JAVA BUILDS USING THE :JAVA: ASSERTION OPERATOR. JavaDeps release lu2.2 is itself written in Java; it requires jdk1.2.1 or higher version on its PATH in order to run. (Note that this does not restrict the project being built to jdk1.2.1 or higher.)
We provide patch support, where code changes are required, for the latest 2 point releases of nmake (currently releases lu3.7 and lu3.6). Customers using older releases can still acquire help in using the product, but genuine problems found in older releases will not be fixed. Such problems may require an upgrade to a current release or, when possible, a makefile work-around will be provided.
Fee-based services are also available. These include makefile rewrites, conversion of non-nmake makefiles to nmake, integration with vendor tools, build assessments, and porting nmake to new machines.
Contact Customer Support for any questions regarding nmake.
This release introduces support for Microsoft® Windows® Services for UNIX (SFU), allowing the use of nmake on the Windows® 2000 and Windows® Server 2003 operating systems running SFU 3.5.
The initial release on SFU includes support for all core Lucent® nmake product functionality except for coshell-based distributed builds (this is planned for a future release). A primary goal of this release is compatibility with existing nmake makefiles developed on other platforms. ksh88i is included to eliminate compatibility problems with the native SFU 3.5 pdksh shell. Java builds using the Windows native JDK are supported. The product is distributed as a BSD-style pkg_add package.
See the Support for Windows® Platforms Notes for more information about the SFU-based version of nmake.
This release includes support for Java programs developed using JDK 5.0. This is accomplished through a coordinated release of JavaDeps 2.2, a new version of the Java dependency analyzer tool used by nmake. JavaDeps 2.2 features initial support for the 7 language enhancements introduced in JDK 5.0: enhanced for loop, variable-length argument list, autoboxing/unboxing, static imports, typesafe enumerations, metadata or program annotations, and generics. The language support in JavaDeps 2.2 is current as of JDK 5.0 beta 2. JavaDeps 2.2 also supports the new JDK 5.0 class naming format.
Improvements in the new JavaDeps 2.2 Java dependency analyzer tool yield substantial performance improvements. Measurements of dependency analysis times for large Java projects (in the range of 700-1000 files per project) yield speedups of 5 to 6 times times compared with JavaDeps 2.1.
A new option, disableautomaticprobe, prevents nmake from
automatically triggering a probe of the $(CC) compiler. When
the option is in effect, nmake will not trigger a probe under
any condition. The option allows users of build rules that do not
involve $(CC) to conveniently bypass automatic probe and allow
nmake to continue. For example, users of :JAVA: may not even
have a C compiler and need a convenient way to suppress $(CC)
based probe. The option is also useful to nmake administrators
who want to prevent end users from kicking off a probe.
The option is set using the -m command line flag or
disableautomaticprobe option name. The optional variable
disable_probe_message can be set as
"ERRORLEVEL custom_message" to further control the
behavior when probe needed but is disabled. If ERRORLEVEL is 2
or less then custom_message is issued as a warning and processing
is continued. If ERRORLEVEL is greater than 2 then
custom_message is issued as an error and nmake
exits with an exit code of ERRORLEVEL-2. The default
value of disable_probe_message is "3 probe file
non-existent or out-of-date - contact nmake administrator".
Setting the CC variable to null is equal to setting
disableautomaticprobe and disable_probe_message
to null.
nmake now supports linking against libraries with
non-standard names such as those used by HP-UX C compilers. This
feature works by extending the -lname atom binding
algorithm for compilers supporting non-standard library names. For
these compilers, the standard search algorithm for -lname
is extended with a third step:
If steps 1 and 2 fail and the last step succeeds, nmake will bind
-lname to <libdir>/name and generate
a -l:name compiler option to pick up the library with
non-standard name name. For example:
$ cat Makefile
CCFLAGS =
a :: a.c -llibdbm.1
$ nmake
+ cc -t p,/tools/nmake/hppa10/lu3.7/lib/cpp -I-D/tools/nmake/hppa10/lu3.
7/lib/probe/C/pp/2CDDBEC6rbincc -I- -c a.c
+ cc -o a a.o -l:libdbm.1
The nmake quoteinclude
feature is enhanced to optionally warn only for quoted headers within the
viewpath that inherit a directory prefix. Previously, the quoteinclude
feature unconditionally warned for all quoted headers within the viewpath.
This new feature is useful with compilers that provide means to
override automatic search of quoted include files in the current
directory but do not support prefix include processing, in cases where
the nmake cpp is not used. The new option is activated by
adding "prefix" to the end of the quoteinclude setting.
The usage change is upward compatible. The usage is:
quoteinclude = 1|2|3 [prefix]
The nmake cpp now supports macros with a variable number of
arguments according to the ISO C99 standard. The standard specifies
that __VA_ARGS__ should be replaced by the variable argument
list. For example, given input:
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
debug("%s %s %s %s", "1", "2", "3", "4");
cpp now outputs:
fprintf (stderr, "%s %s %s %s", "1", "2", "3", "4");
Lock file handling is enhanced to provide information about the process responsible for creating the lock file. The lock file now includes the pid, uid, and hostname and when a lock file is detected the uid is now included in the diagnostic message. Under certain conditions, stale lock files are automatically detected and cleaned up.
nmake normally changes the umask to match the current directory's group
and other write permissions. This may result in files being generated
with unexpected permissions. An option is now available which provides
the ability to suppress this behavior. The option is set using the
-u command line flag or disableumaskchange
option name.
libname.1 on HP-UX, is now supported.
localprobe=vpath was used and the probe file was moved
from one node to another between builds.
ccase_audit=1. A warning message is printed to verify
clearaudit is being used. The message change be changed or eliminated
by setting variable ccase_message. A ClearCase view must
be set and the working directory must be in a dynamic view.
:JAVA: and :JAR: assertions are
supported on UWIN for compiling java code and making jar files.
A wrapper command, npwj,
is used to translate UWIN pathnames to native win32 pathnames for
the java commands. See the
:JAVA: and
:JAR: man pages for more
information.
:JAVA: and :JAR: assertions are
supported on SFU for compiling java code and making jar files.
A wrapper command, npwj,
is used to translate SFU/Interix pathnames to native win32 pathnames for
the java commands. See the
:JAVA: and
:JAR: man pages for more
information.
+lname to link a library without the "lib" prefix will
now correctly pick up the archive library name.a rather than
the shared library name.so when both files exist.
quoteinclude = 1|2|3 [prefix]See also New Features: quoteinclude prefix enhancement
CC.SUFFIX.SHARED=.o was set in the probe file,
which is set for some AIX platforms.
__VA_ARGS__ should be replaced by the variable argument
list.
$(abc:C/\"//G:N=three)
error 3 command
was nested within several if and while statements.
VPATH initialization on UWIN
case-insensitive file systems.
:L now works as expected on case insensitive file
systems under UWIN:
$ cat makefile
target:
: $(PWD:L>=a*)
: $(PWD:L>=A*)
$ export case_sensitive_file_system=0
$ nmake
[2]+ : ab ABC
[3]+ : ab ABC
$ export case_sensitive_file_system=1
$ nmake
[2]+ : ab
[3]+ : ABC
targetcontext option was enabled.
:: assertion defined in
Makerules.mk. This is now fixed.
LDLIBRARIES to an (invalid) null library name caused a
core dump. This is now fixed.
nmake install will now build :JAVA:
java class targets. Previously, jdeps would run but the classes
were not made.
:JAVA: operator, jdeps will now only be
executed if some java source files exist. Previously, if there were
no java files jdeps would be run with no source file arguments leading
to an error.
nmake install, the default installation of
:JAR: targets to LIBDIR can now be suppressed
using the :INSTALLDIR: assertion with no RHS directory.
For example, the following will not install
$(LIBDIR)/test.jar:
:INSTALLDIR: test.jar test.jar :JAR: classes/*.class
:JAVA:, they are no longer rebuilt unnecessarily when
a new node is added to the front of the viewpath.
:JAR: target that is
up to date down the viewpath when the class directory does not exist
in the current node.
$(S) has been removed from the
:JAR: rules. It had inadvertently been left in the
rules and could cause an error if S was set and exported
in the environment.
:JAR:
assertions in the same makefile, and the first jar contains a subset
of files from the second, the second jar file is no longer re-built
unnecessarily.
:JAR: in the same makefile and share class files.
.res files specified on the RHS of the
:: operator are now used when linking the target.
:JAVA: determines the version of
the JDK being used and calls javadeps with the proper arguments for
JDK 5 support.
-m), prevents
nmake from automatically triggering a probe of the $(CC)
compiler. When the option is in effect, nmake will not trigger a probe
under any condition.
probe_hints file. This has been fixed. The following
variables can now be set by probe_hints:
CC.INSTRUMENT, CC.LINK.OPTION,
CC.REPOSITORY, CC.SHARED.ALL,
CC.SHARED.UNDEF, CC.SUFFIX.DYNAMIC,
CC.SUFFIX.DLL, and CC.SUFFIX.LINKHEADER.
nmakelog command, used for
output serialization,
now exits with the nmake exit code when the platform supports
named pipes. Previously when using nmakelog the
nmake exit code was always ignored.
test -L.
java.exe and jar.exe commands
are supported on SFU/Interix without specifying the .exe
suffix in order to maintain compatibility with
UNIX® makefiles.
nmake_license command has been added to collect
information to request evaluation licenses. Running the command
generates the file ./request.txt which the user can
edit and email to
software@alcatel-lucent.com.
ccase_audit -
see 030011.
ccase_message -
see 030011.
disable_probe_message -
see 990055.
quoteinclude usage changed -
see 040037.
disableautomaticprobe /
-m -
see 040037.
disableumaskchange /
-u -
see 040049.
The changes in release lu3.7 are largely backward compatible with lu3.6. Every effort has been made to insure code changes do not unexpectedly change the documented behavior of nmake features.
The following may impact builds and require changes.
assert
and enum. Using these keywords improperly,
for example as variable names, will result in errors from
JavaDeps.
:JAVA: operator. JavaDeps lu2.2 has a
new requirement that the Java package hierarchy mirrors the source
directory hierarchy. This is consistent with the recommendation on
the JDK 1.5 javac manual page. An error will be issued by JavaDeps
if the directory hierarchy is not consistent with the
package declarations in the Java source code.
package declarations,
or who do not correctly define JAVAPACKAGEROOT
and JAVABUILDDIR in the makefile.
$ find . -type f -print
./Makefile
./src/com/lucent/stc/pkg1/A.java
$ cat Makefile
JAVACLASSDEST = classes
JAVAPACKAGEROOT = $(VROOT)/java
:JAVA: src/com
$ cat src/com/lucent/stc/pkg1/A.java
package com.lucent.stc.pkg1;
public class A
{
public static void main ()
{
int i;
}
}
$ nmake
+ /tools/nmake/javadeps-lu2.1.3/jdeps /tools/nmake/javadeps-lu2.1.3/jdeps.j
ar -C .JAVACLASSES. -n --vpath=/home/richb/lu3.7/jdeps040008/java --silent
-s /tools/nmake/javadeps-lu2.1.3/synconfig -o localjavadeps -m globaljavade
ps -d classes --classpath=classes src/com/lucent/stc/pkg1/A.java
+ javac -d classes -classpath classes:. src/com/lucent/stc/pkg1/A.java
Note A.java lives under
src/com/lucent/stc/pkg1, but its package declaration
does not include src. This causes an error with
JavaDeps lu2.2:
$ nmake
+ /tools/nmake/javadeps-lu2.2/jdeps /tools/nmake/javadeps-lu2.2/jdeps.jar -
C .JAVACLASSES. -n --vpath=/home/richb/lu3.7/jdeps040008/java --silent -s /
tools/nmake/javadeps-lu2.2/synconfig -o localjavadeps -m globaljavadeps -d
classes --classpath=classes src/com/lucent/stc/pkg1/A.java
Warning : source file location src/com/lucent/stc/pkg1/A.java does not mat
ch package name com.lucent.stc.pkg1
The real problem here is that JAVAPACKAGEROOT is not
defined correctly, the root is under the src/ node.
To fix the makefile without moving it into the src/ node,
set JAVABUILDDIR and correct JAVAPACKAGEROOT.
$ cat Makefile
JAVACLASSDEST = classes
JAVABUILDDIR = $(VROOT)/java
JAVAPACKAGEROOT = $(VROOT)/java/src
:JAVA: src/com
$ nmake
+ /tools/nmake/javadeps-lu2.2/jdeps /tools/nmake/javadeps-lu2.2/jdeps.jar -
C .JAVACLASSES. -n --vpath=/home/richb/lu3.7/jdeps040008/java --silent -s /
tools/nmake/javadeps-lu2.2/synconfig -o localjavadeps -m globaljavadeps -d
classes --classpath=classes --packageroot=src src/com/lucent/stc/pkg1/A.jav
a
+ javac -d classes -classpath classes:. src/com/lucent/stc/pkg1/A.java
The following is a list of known problems:
CC.REPOSITORY is defined, and ::
is used to trigger the metarule. Note that CC.REPOSITORY
is defined automatically for some C++ compilers in the probe file.
The work-around is to add .IMPLICIT to the ::
assertion, or to not use the :: assertion (such as add
the target to :ALL: instead.)
force_shared=1.
%.c, the first metarule defined will be triggered
instead of the metarule matching the file prerequisite suffix.
nmake again does not regenerate the target
but leads to a jar error. Use clobber to delete the
target and state file to keep the files in sync.
Class-Path, any jar files defined in the manifest
Class-Path should exist or may lead to an error when
generating the index of the target jar. The work-around is to
reference the target jar with a relative path instead of full path.
clean common action my not delete the .o
object files on AIX platforms.