Nokia

Nokia nmake Product Builder

 

Nokia nmake Product Builder
lu3.7 Release Notes

Table of Contents

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


1. Introduction

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.

1.1 Supported Hardware

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.

1.2 Hardware Requirements

1.3 Software Requirements

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.)

1.4 Customer Support

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.


2. New Features and Significant Enhancements

2.1 Support for the Services for Unix (SFU) platform

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.

2.2 Support for JDK 5.0

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.

2.3 Performance improvement in Java dependency analysis

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.

2.4 Option to disable probe

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.

2.5 Support for HP-UX nonstandard shared library names

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:

  1. libname$(CC.SUFFIX.SHARED)
  2. libname$(CC.SUFFIX.ARCHIVE)
  3. name

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

2.6 quoteinclude prefix enhancement

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]

2.7 Support for ISO C99 standard variadic macros

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");

2.8 New lock files

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.

2.9 Option to suppress umask change

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.


3. Bug Fixes and Enhancements

3.1 Baserules

  1. 020052 - support hp-ux nonstandard shared lib names
    Linking against libraries with non-standard names, such as libname.1 on HP-UX, is now supported.
    See also New Features: Support for HP-UX nonstandard shared library names
  2. 020077 - code rebuilds with localprobe=vpath
    Fixed a problem that caused files to be rebuilt unnecessarily when localprobe=vpath was used and the probe file was moved from one node to another between builds.
  3. 030011 - support Rational clearaudit
    When using nmake in a Rational ClearCase environment nmake can produce ClearCase Configuration Records and Derived Objects by running shell actions through clearaudit. To use clearaudit set 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.
  4. 030015 - support java at UWIN
    The :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.
  5. 040031 - support Java on SFU/Interix
    The :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.
  6. 040036 - bind +lname does not give precedence to name.a
    Using +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.
  7. 040037 - quoteinclude prefix enhancement
    The quoteinclude feature is enhanced to optionally warn only for quoted headers within the viewpath that inherit a directory prefix instead of all quoted headers in the viewpath. To limit the warning to headers that inherit a directory prefix add "prefix" to the end of the quoteinclude setting. The usage change is upward compatible. The usage is:
    quoteinclude = 1|2|3 [prefix]
    
    See also New Features: quoteinclude prefix enhancement
  8. 040051 - extra prefix directory added during include scan
    Fixed a problem where the prefixinclude feature would incorrectly add an extra prefix directory to the internal list of include files being scanned. This could arise when an include file was specified as a target in the makefile and also included with a directory prefix by the source code. It could result in the header being unnecessarily re-installed when everything was up to date in the viewpath.
  9. 040067 - prerequisite library not archived
    Fixed a problem where an archive library that is built and linked to an application in the same makefile would not be archived, leading to a link error when linking the application. This was observed when CC.SUFFIX.SHARED=.o was set in the probe file, which is set for some AIX platforms.

3.2 cpp

  1. 030040 - suffixsunwcch refinements for Sol2.8/CC6
    nmake cpp supports a specialized search scheme for system headers used by the Sun C++ WorkShop 6 compilers running under Solaris 2.8 and above.
  2. 030085 - implement C99 __VA_ARGS__ functionality in cpp
    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.
    See also New Features: Support for ISO C99 standard variadic macros
  3. 040054 - cpp hangs in transition and compatibility modes
    nmake cpp will now detect deep macro recursion loops and issue an error instead of hang in a loop.

3.3 Engine

  1. 010050 - nmake can not find a generated target
    Fixed a problem where nmake could not find a generated header file that is also a target in the same Makefile. The problem appeared only in second and subsequent runs of the Makefile.
  2. 020027 - add process id and user id into lock file
    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.
    See also New Features: New lock files
  3. 020062 - archive libraries rebuild when using arclean
    Fixed a problem in which nmake rebuilt archive libraries when the libraries shared at least one .o and the arclean variable was set.
  4. 030001 - bogus warning message for unclosed quotes
    nmake no longer outputs a bogus warning message when an unclosed, escaped double quote occurs in the :C edit operator. For example, the following valid expression is now accepted without complaint:
    $(abc:C/\"//G:N=three)
    
  5. 030036 - nested error 3 core dump
    Fixed a problem where nmake would dump core when an error 3 command was nested within several if and while statements.
  6. 030060 - bound directory changes causing dropped -I flag
    When two source files included the same header file using different path prefixes, the first build would run fine but an incremental build would fail on one of the source files due to a missing -I flag. This is now fixed.
  7. 030092 - DOS format makefile may cause problems with nmake on UWIN
    nmake can now read DOS-format text files on the UWIN platform.
  8. 030098 - wrong $(VPATH) on case insensitive filesystems
    Fixed problem with VPATH initialization on UWIN case-insensitive file systems.
  9. 030099 - :L operator does not support case insensitive filesystems
    The :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
    
  10. 030100 - the problems in using targetcontext
    Fixed a problem that occurred during variable expansion when the targetcontext option was enabled.
  11. 040008 - core dump on Linux®
    Fixed problem that was caused by attempting to write into unwritable memory space.
  12. 040015 - nmake enters infinite loop in Makerules
    Under some rare conditions nmake would get stuck in an infinite loop when processing the :: assertion defined in Makerules.mk. This is now fixed.
  13. 040016 - nmake core dumps from .o files in .ALL
    This problem was due to memory allocation and is now fixed.
  14. 040020 - core dump reading corrupt state file
    Extra checks have been added to guard against unexpected data in state files and prevent a core dump.
  15. 040044 - $(<) points to target down the viewpath
    Fixed problem that would occur when a Makefile target was also used in a metarule action under a different alias.
  16. 040048 - wrong date stamp recorded in state file
    Fixed a problem involving an aliased header file for which the original rule had scanned prerequisites. In this case the remaking of the alias rule led to a different time value for the alias rule. This was fixed by synchronizing the time of the alias rule back to the time of the original rule.
  17. 040049 - nmake changes umask
    nmake normally changes the umask to match the current directory's group and other write permissions. A new option is now available which provides the ability to suppress this behavior.
    See also New Features: Option to suppress umask change
  18. 040050 - LDLIBRARIES=-l core dumps
    Setting LDLIBRARIES to an (invalid) null library name caused a core dump. This is now fixed.
  19. 040052 - core dump using .JOINT
    A problem was found in which a .JOINT rule with a single target would dump core. The problem is now fixed.

3.4 Operators

  1. 010048 - :INSTALL: problems
    Fixed a panic error when attempting to install a file from down the viewpath to the corresponding directory in the current node.
  2. 020075 - :JAVA: does not build with install common action
    Running nmake install will now build :JAVA: java class targets. Previously, jdeps would run but the classes were not made.
  3. 030062 - don't run javadeps when there are no files
    When using the :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.
  4. 030063 - :JAR: cannot disable default install
    When running 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
    
  5. 030067 - Java inside-package local build
    Fixed a problem that caused files outside the current java package to be recompiled during an inside-package java build.
  6. 030070 - dependent java files not rebuilt
    Fixed a problem where dependent java files down the viewpath were not recompiled during an incremental build. The dependent files are now recompiled as expected.
  7. 030071 - java files in current dir rebuild in new node
    When java files are in the current directory and listed on the RHS of :JAVA:, they are no longer rebuilt unnecessarily when a new node is added to the front of the viewpath.
  8. 030074 - JAR.mk gets confused when local class dir does not exist
    nmake no longer tries to update a :JAR: target that is up to date down the viewpath when the class directory does not exist in the current node.
  9. 030077 - JAR.mk .VJARFILES. $(S) variable never defined
    The unused variable $(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.
  10. 030088 - jar rebuilds when sharing class files
    When two jar files are generated using :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.
  11. 030105 - jar errors when jar files share class files
    Eliminated jar errors when two jar files are generated using :JAR: in the same makefile and share class files.
  12. 040021 - :: operator should support .res files on UWIN
    On UWIN, .res files specified on the RHS of the :: operator are now used when linking the target.
  13. 040066 - support java 1.5 class naming format
    The new JDK 5 class naming format is now supported. The JDK 1.4 format is assumed by default. :JAVA: determines the version of the JDK being used and calls javadeps with the proper arguments for JDK 5 support.

3.5 Probe

  1. 990055 - request option to turn off automatic probe feature
    A new option, disableautomaticprobe (-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.
    See also New Features: Option to disable probe
  2. 030108 - probe_hints cannot set CC.REPOSITORY
    Several probe variables could not be overridden by the 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.
  3. 040042 - localprobe gid mismatch on interix
    The localprobe feature is now supported on the SFU/Interix platform.

3.6 Miscellaneous

  1. 030093 - incorrectly built binary warning on red hat 9
    Fixed ksh88i included in the Linux package so it no longer causes "Incorrectly built binary" warnings on Red hat 9.
  2. 030104 - nmakelog does not exit with error code
    The 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.
  3. 040022 - Port to Interix
    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.
    See also New Features: Support for the Services for UNIX (SFU) platform
  4. 040034 - interix ksh wrong return code from test -L
    The ksh88i included in the SFU package now correctly handles test -L.
  5. 040040 - Support win32 commands on Interix which require .exe suffix
    The win32 native java.exe and jar.exe commands are supported on SFU/Interix without specifying the .exe suffix in order to maintain compatibility with UNIX® makefiles.
  6. 040062 - collect info for license request
    The 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.

3.7 Variables

  1. New variable ccase_audit - see 030011.
  2. New variable ccase_message - see 030011.
  3. New variable disable_probe_message - see 990055.
  4. Variable quoteinclude usage changed - see 040037.

3.8 Options

  1. New option disableautomaticprobe / -m - see 040037.
  2. New option disableumaskchange / -u - see 040049.

4. Changes Impacting lu3.6 Makefiles

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.

  1. JDK 1.5 Support
    Description
    JDK 1.5 includes changes for Java keywords assert and enum. Using these keywords improperly, for example as variable names, will result in errors from JavaDeps.
    What to do
    The Java code causing errors will need to be changed to correct the improper use of these keywords.
  2. Java package hierarchy
    Description
    nmake release lu3.7 requires JavaDeps lu2.2 for support of the built-in :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.
    Who is affected
    Projects with Java source files in directories that do not directly correspond to the package declarations, or who do not correctly define JAVAPACKAGEROOT and JAVABUILDDIR in the makefile.
    What to do
    It may be necessary to create new source directories for the Java code. In some cases small makefile changes will be necessary. The following example builds with nmake lu3.6 and JavaDeps lu2.1.3.
    $ 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
        


5. Known Problems and Remarks

5.1 Known Problems

The following is a list of known problems:

  1. 980009 - problem in link=*
    The problem about using link=* to install targets in any adjacent nodes in viewpathing still exists. You may still use link=* to install, but only in alternate nodes.
  2. 030042 - :cc: generated header rebuild
    If a C file is built by using :cc: and this C file shares a generated header file with a C++ file specified in the same makefile, the generated header file may get regenerated during the build causing the source files to keep recompiling. This can be avoided by building the C++ files before the C files, or by generating the header file in a separate makefile at an earlier time during the build.
  3. 990099 - metarules not searched when CC.REPOSITORY is set
    The metarules may not be searched under the following conditions: there is a user defined metarule for a non-compiled file, variable 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.)
  4. 020018 - adding shared lib building in same makefile won't relink
    An executable target will not be relinked when a shared library that is built in the same makefile is added as a prerequisite to the executable. The work-around is to set force_shared=1.
  5. 020051 - first metarule is used by mistake
    When multiple metarules generate the same source file target, such as %.c, the first metarule defined will be triggered instead of the metarule matching the file prerequisite suffix.
  6. 040018 - error updating jar target after target is removed
    If a jar target is deleted or touched and the state file still exists, running 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.
  7. 040065 - jar index option does not work with full path
    When a jar target file includes a manifest file that defines 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.
  8. 040070 - clean does not remove object files on AIX
    The clean common action my not delete the .o object files on AIX platforms.

5.2 Remarks

  1. AIX - The AIX package does not have the global version strings in the binary executables.
  2. :LINK: does not handle archive files that are generated by :: or :LIBRARY: assertion operators. Users should avoid use of :LINK: on archive files.
  3. When the cpp -I-S flag is on, -D-M is disabled. Users should not use these two flags together.
  4. Users should avoid including the same header file with both <...>-style and "..."-style #include statements in source files managed by a single makefile. nmake will assign .STD.INCLUDE and .LCL.INCLUDE attributes to the header file, and this can result in incorrect -I lists in the compiler command lines generated.

Last Update: Friday,12-Aug-2016 12:32:43 EDT