Nokia

Nokia nmake Product Builder

 

Nokia nmake Product Builder
nmake 14 Release Notes

Table of Contents

Released: July 2012

1. Introduction
1.1 Supported Platforms
1.2 Software Requirements
1.3 Customer Support

2. Summary of Changes
2.1 64-bit Linux package
2.2 Fixes for XML build logs
2.3 Probe fixes for gcc/g++
2.4 Engine stabilization
2.5 Java 7 Support

3. Detailed List of Changes
3.1 Baserules
3.2 cpp
3.3 Engine
3.4 Operators
3.5 Probe
3.6 Build Log
3.7 Miscellaneous
3.8 Variables
3.9 Options

4. Changes Impacting nmake 13 Makefiles

5. Known Problems and Remarks
5.1 Known Problems
5.2 Remarks


1. Introduction

This document announces the new release of nmake version 14. nmake is fully supported and is in wide production use throughout Alcatel-Lucent, AT&T, and elsewhere.

These nmake 14 Release Notes discuss in detail the new features, and highlight bug fixes, additional enhancements, and known problems.

1.1 Supported Platforms

The nmake 14 release has been ported to many UNIX-based and UNIX-like systems and is available for HP-UX, Linux, Solaris, and Windows (under SFU/Interix). For a current list of platforms and available distribution packages see the nmake 14 release page on the nmake web site, http://www.bell-labs.com/project/nmake/. nmake is generally upward compatible with later OS releases in a series (for example, the series Solaris 2.5 through 2.10). Contact the Customer Support helpdesk (see below) with any compatibility questions or requests for porting to other systems.

1.2 Software Requirements

nmake 14 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 14 requires JavaDeps release lu2.2.4 or greater. The latest 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.4 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.)

The buildlog2html command requires Java runtime 1.5 or above. It will also use Graphviz dot and neato commands, if available, to generate diagrams showing build log structure. Graphviz versions 2.16 or above are known to work. buildlog2html generates an HTML log from a structured build log.

The Windows-based version of nmake is based on the Windows Services for UNIX (SFU/Interix) porting/development environment from Microsoft and requires installation of the SFU package in order to run. The SFU package must be obtained from Microsoft and installed following their installation procedure. For more information see the Support for Windows page.

1.3 Customer Support

We provide patch support, where code changes are required, for the latest 2 point releases of nmake (currently releases nmake 14 and 13). 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. Summary of Changes

The nmake 14 release focuses largely on bug fixes and stability with over 25 fixes and enhancements.

2.1 64-bit Linux package

The nmake 14 release adds a new native 64-bit Linux package to take advantage of 64-bit systems. The 32-bit ilinux package is still certified and available for both 32-bit and 64-bit Linux systems as in past releases. The new x64linux package is a native 64-bit package certified only for 64-bit systems.

2.2 Fixes for XML build logs

There have been several fixes for generating and processing XML build logs with xmakelog and buildlog2html respectively. These include fixes for corrupt or missing XML tags, missing top level build information and handling of default icons for HTML logs. For details see section 3.6: Build Log.

2.3 Probe fixes for gcc/g++

The probe tool includes fixes targeting the popular gcc and g++ compilers. Included are fixes for picking up the C++ standard include directories and probing compilers installed outside of /bin and /usr/bin. For details see section 3.5: Probe.

2.4 Engine stabilization

Several panic errors, core dumps, memory faults and unexpected rebuilds have been fixed in the engine resulting in a more stable and robust product. Other engine enhancements include improved error messages and debug trace output. For details see section 3.3: Engine.

2.5 Java 7 Support

Javadeps alu2.3 now supports the new Java 7 language features. Javadeps is used by the :JAVA: operator to scan java code for dependencies. The Javadeps alu2.3 release coincides with, and is compatible with nmake 14. The following new language features are supported:

Note, earlier Javadeps releases can already parse the new Strings in switch Statements feature. See the Javadeps page for more information and downloads.


3. Detailed List of Changes

3.1 Baserules

  1. 060003 - false positive on quoteinclude, prefix
    The quoteinclude feature with the prefix option identifies include files that inherit a directory prefix (eg. dir/file.h) from their parent when the include directive uses quotes. When using this feature a bogus warning would be issued when a header was included twice, once from a prefixed header outside the viewpath and once from a non-prefixed header inside the viewpath. No warning should be issued since the parent header inside the viewpath was not included with a directory prefix and warnings are limited to files in the viewpath. This issue has been fixed.
  2. 110002 - prefixinclude breaks ../ includes
    Under certain conditions when using the quoteinclude feature, which is generally on by default, nmake would fail to properly locate an include file that is included with a "../" directory prefix (eg. ../dir/file.h). This issue has been fixed.

3.2 cpp

  1. No changes to cpp in this release.

3.3 Engine

  1. 040041 - ../ in .SOURCE causes panic with :cc:
    Fixed a panic error that could occur in an incremental build when a directory with a trailing slash (eg. dir/) was used as a search directory in a .SOURCE search atom and with the :cc: operator in the same makefile.
  2. 050044 - core dump from corrupted rule - engine
    A core dump was fixed where in rare cases the automatic variable $(&) used in an assertion operator was expanded out of context when the operator was parsed. The variable now expands to null in this case and a level 10 debug message was added.
  3. 090005 - unnecessary rebuilds from LDFLAGS repeating
    The debug trace was enhanced to indicate when an action is triggered during makefile compile time. Since variables in such actions are expanded and compiled into the .mo file (aka frozen) this makes it easier to identify such variables when debugging a makefile for unexpected results.
  4. 090006 - :LINK: always re-links once
    Targets with the .ACCEPT attribute no longer rebuild when their file's time stamp does not change or changes backward. The behavior is now consistent with when the time stamp is changed forward. This fixes the :LINK: operator so targets are not relinked unconditionally on the second build.
  5. 090023 - nmake panic error
    Fixed a panic error caused under certain conditions when a directory is identified as a prerequisite to a target and the directory is removed and created again by some rule.
  6. 100022 - panic error making directory targets using concurrency
    Fixed a panic error caused under certain conditions when a directory (eg. dir1) and its sub-directory (eg. dir1/dir2) are both targets in a makefile and made using concurrency.
  7. 110000 - makefile rebuilds once
    An unnecessary rebuild was sometimes triggered under certain conditions when the same header was included by two source files in the same makefile, with the first source file using #include <file.h> and the second source file using the full path #include "/full/path/file.h". This has been fixed and the unnecessary rebuild is no longer triggered.
  8. 110017 - memory fault
    Fixed a memory fault that could occur when building under a symbolic link and the linked path was shorter than the physical path.
  9. 110020 - panic from dir/:L with :INSTALLDIR: and :cc:
    Fixed a panic error that could occur in an incremental build when a directory is specified with a trailing slash (eg. dir/) and the directory is used in such a way that it is scanned while the makefile is still being parsed.
  10. 110034 - prerequisite missing on second build
    In some rare cases when a file was bound before the makefile is compiled, such as for an included makefile, and the same file is also a target in the makefile with one or more prerequisites, the prerequisites could be saved in the compiled makefile (.mo file) in the wrong order causing the prerequisite lists for some targets in subsequent builds to be incorrect. This problem has been fixed.
  11. 110035 - cyclic metarule error message
    Fixed the error message for cyclic meta-rules where the meta-rule cycle could be identified incorrectly when long meta-rule patterns were used or on 64-bit platforms.
  12. 120002 - improve error handling of large file prereqs
    An appropriate warning message is now issued when a file cannot be opened due to the EFBIG or EOVERFLOW system errors.

3.4 Operators

  1. 120000 - JAVA.mk not setting --javaversion
    The --javaversion option is now passed to Javadeps when using Java 1.5 or later. Previously the option was not specified for releases later than Java 1.5 causing Javadeps to default to using Java 1.4 style class names for the dependencies.

3.5 Probe

  1. 110012 - nmake does not find #include <new> for g++ 4.4.6+
    Improved detection of C++ standard include directories. This fixes an issue on some Linux systems where the C++ include directories were not being searched.
  2. 110030 - bad probe results for 32-bit gcc on 64-bit linux
    The probe scripts were adding /bin and /usr/bin to the front of the PATH. When probing compilers in non-standard locations this caused some compiler tools to be picked up in these directories, effectively overriding corresponding tools in the compiler's installation area, which could lead to incorrect probe results. This is fixed and the probe scripts no longer modify the PATH.

3.6 Build Log

  1. 110022 - default icon and css files not updated
    Fixed a problem where the icon.gif and buildlog.css files in the build log directory failed to update when the default files changed. Added the new -i option to buildlog2html to be used to suppress any attempt to update the icon and css files.
  2. 110023 - missing makelog end-tag for oldmake builds
    When using xmakelog to generate an XML build log, the closing </makelog> tag is now included in the log when nmake launches /bin/make (or OLDMAKE if defined) to process a makefile. When using gnu style recurse messages the closing recurse message is now also issued for such makefiles.
  3. 110024 - missing newline may cause incomplete tg tag
    Fixed a problem that caused a corrupt XML build log from xmakelog when the output from a shell action did not end with a newline.
  4. 110025 - output from .MAKE target rule does not get taglines
    Output from .MAKE target rules are now handled properly when using nmakelog and xmakelog. A new engine variable named .JOB.INFO. has been introduced which returns information about the current triggered job when called during shell action block expansion. Currently it will contain .READ and/or .FUNCTIONAL for .READ and .FUNCTIONAL jobs respectively. The variable can be used to test for this information on the current job in cases where the current target cannot be tested.
  5. 110026 - top level info missing from makelog.xml
    Fixed a problem when using xmakelog to generate an XML log, where the top level information was missing from the log when MAKELEVEL was set greater than 0. The top level information is now always included in the log regardless of the initial value of MAKELEVEL. The top level information includes <make>, <makelib>, <makeversion>, <makelog_format>, <path>, <vpath>, <host>, <version_os> and <id>.
  6. 110032 - output of immediate rule in functional context not captured in tg element
    When using xmakelog to generate an XML build log, all output from a .MAKE immediate rule within a .FUNCTIONAL action is now properly wrapped in a <tg> target element.
  7. 110033 - stderr of .FUNCTIONAL/.READ shell actions not captured in tg element
    When using xmakelog to generate an XML build log, stderror output from .FUNCTIONAL and .READ shell actions are now properly wrapped in a <tg> target element.
  8. 120007 - corrupt explain string in makelog.xml
    When using xmakelog to generate an XML build log, "\n" appearing in an explain string no longer corrupts the XML log. Backslashes are now mapped to the string "0x5c" in the XML log.

3.7 Miscellaneous

  1. 110027 - nmake.1/makerules.1 man page fixes and updates
    Fixed several formatting issues with the man pages, especially support for groff based systems, improving compatibility across platforms as well as Postscript and HTML output.

3.8 Variables

  1. New engine variable .JOB.INFO. - see 110025

3.9 Options

  1. New buildlog2html option -i - see 110022

4. Changes Impacting nmake 13 Makefiles

The changes in nmake 14 are largely backward compatible with nmake 13. Every effort has been made to insure code changes do not unexpectedly change the documented behavior of nmake features. For makefiles that conform to nmake's documentation there will be no makefile updates necessary to migrate from nmake 13 based release to nmake 14.


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 linking (specified using the link variable) to install targets in any adjacent nodes in viewpathing still exists. You may still use linking to install, but only in alternate nodes -- installation using copying must alternate with installation using linking. The problem occurs with both symbolic and hard linking.

5.2 Remarks

  1. :LINK: does not handle archive files that are generated by :: or :LIBRARY: assertion operators. Users should avoid use of :LINK: on archive files.
  2. When the cpp -I-S flag is on, -D-M is disabled. Users should not use these two flags together.
  3. 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.
  4. When the SHELL environment variable points to ksh93 you may get the following warnings when building your shell scripts: warning: line 1: `...` obsolete, use $(...). The warning is generated running your script with ksh -n. To eliminate the warning either update your shell scripts as indicated by the message or set SHELL to another version of ksh that does not generate the warning, such as ksh88.
  5. nmake does not have large file support and cannot reference files over 2 GiB in size on 32-bit systems.

Last Update: Friday,12-Aug-2016 12:26:19 EDT