Nokia Networks Home

Nokia nmake Product Builder

Quick Links

Related Products

Release Notes -- Nokia nmake lu3.8

July 2006
[Table of Contents] [Previous Section] [Next Section]

3. Bug Fixes and Enhancements

3.1 Baserules

  1. 020009 - library rebuilt when node added to vpath
    Under certain conditions when a library was made and linked with an application in the same makefile, the library would be recompiled and the application re-linked when an empty node was added to the viewpath. This has been fixed so the library does not rebuild unless necessary.
  2. 030109 - missing ppcc -l flag causes compile errors
    Some C++ compilers were not getting the -l flag for ppcc which causes ppcc to drop the -I flags when calling the compiler when linking. This caused errors when the -I flags were needed for template instantiation. This has been fixed by passing the ppcc -l flag when the probe variable CC.DIALECT contains PTRIMPLICIT.
  3. 040002 - executable not re-linked when sharedlibvers=0
    A target executable was not re-linked with an updated shared library under the following conditions: the prerequisite library is built by the same makefile as the executable; the library is made using the double colon (::) operator; the variable sharedlibvers=0 is set. This is fixed so the executable is now re-linked as expected when force_shared=1.
  4. 040070 - clean does not remove object files on AIX
    The clean common action now removes .o files on AIX platforms.
  5. 040075 - non-prefixed header gets .PREFIXED attribute
    When using the quoteinclude prefix feature there were some false positives for headers that did not inherit a directory prefix. This is fixed by insuring only headers that actually inherit a prefix are given the .PREFIXED attribute.
  6. 040085 - scan engine support for SUNWCCh include file
    Improved support for Sun's SUNWCCh header rewriting rule when using Sun's C++ compiler so proper dependencies are tracked for the .SUNWCCh suffix header files. The new probe variable CC.SUFFIX.LINKHEADER has been added to support this, which contains the system headers with versions ending with SUNWCCh.
    See also - New Features and Enhancements: Improved support for Sun C++ 7.x and 8.x compilers
  7. 040099 - enable VC++ to build and link with shared library
    On Interix platforms linking with shared libraries is now supported when using the MS VC++ compiler via the Interix /bin/cc compiler wrapper. The compiler wrapper calls GNU ld automatically to do the linking since VC++ does not support it. GNU ld must be in the PATH.
    See also - New Features and Enhancements: MS Visual C++ compiler supported on Windows/SFU
  8. 050033 - profiled library bound down vpath instead of local node
    An executable was linked with an old archive library down the viewpath instead of the new version in the local node under the following conditions: :LIBRARY: was used to make the library; the executable was made from the same makefile as the library; and CCFLAGS contained -g. This has been fixed so the executable now links with the updated library in the local node.
  9. 050044 - core dump from corrupted rule
    Under rare conditions nmake would core dump when expanding an automatic variable that isn't associated with a target. The Makerules have been changed to guard against the problem.
  10. 050067 - SUNWCCh support looking for wrong file
    When building on Solaris 2.8 and the Sun Studio 8 C++ compiler, code including <new.h> would build fine the first time but give an error about not finding new.h.SUNWCCh in the second build. This was caused by new.h.SUNWCCh losing the .SUFFIX.INCLUDE attribute after the initial run. This has been fixed by retaining the .SUFFIX.INCLUDE in the state file so it can be used when binding the include files in subsequent builds.
  11. 060007 - +l Required Libraries
    The .REQUIRE.+l% function now returns +lname only for the parent required library. Previously all the required libraries were transformed from -l to +l which may not be appropriate and is error prone since additional archive libraries may be picked up that were not intended, including system libraries.
    See also - Changes Impacting lu3.7 Makefiles: Required-libraries

3.2 cpp

  1. 040087 - cpp recursion too deep error with no recursion
    Over 1000 instances of a macro would trigger the 'recursion too deep' error from nmake cpp even when no recursion was present. This has been fixed by incrementing the recursion counter only when it happens on the same line. The counter limit was also raised to LINE_MAX which is usually 2048 but may vary by platform.

3.3 Engine

  1. 040010 - :P=L=x resolves path to wrong level - :JAR: error
    The :P=L=x edit operator was resolving some files to the wrong viewpath node which resulted in an error from :JAR: complaining that files didn't begin with JARROOT. The problem occurred when a file down the viewpath, but not in the last node, was added to .SOURCE.pattern and then .SOURCE.pattern was cleared. Then :P=L=x returned the file when x was one level deeper in the viewpath than where the file really exists. This problem has been fixed.
  2. 040060 - core dump building Java code
    Fixed a core dump that come up under complicated, rare conditions.
  3. 040074 - install action triggered before target is built
    When using concurrency and when installing files using hard links, the install action for a target could be triggered before the target was updated during incremental builds. This has been fixed.
  4. 040084 - stuck in prefixinclude loop
    Fixed a problem where, under certain conditions nmake would hang in an infinite loop scanning the include files.
  5. 040095 - bad -I list on second run
    Under certain conditions a C/C++ source file would be needlessly recompiled with a different -I list, which could lead to an unexpected compile error during incremental builds. This has been fixed.
  6. 050006 - extraneous installs
    A problem was fixed where, under some rare conditions, a file would be re-installed in a new, clean viewpath node when everything was already up to date.
  7. 050063 - nmake runs vpath command during shell jobs
    Under certain conditions a command called "vpath" would be executed any time a shell job was run. This was a result of the -u/disableumaskchange option added in release lu3.7 (the option did not need to be set to see the problem). The disableumaskchange option has been deprecated and replaced with the UMASKCHANGE environment variable.
    See also - New Features and Enhancements: New environment variable UMASKCHANGE to disable umask change
    See also - Changes Impacting lu3.7 Makefiles: disableumaskchange Option Deprecated

3.4 Operators

  1. 030072 - globaljavadeps not regenerated when deleted
    The globaljavadeps file created by the :JAVA: operator is now regenerated if it is deleted outside of nmake. Additionally, both the localjavadeps and globaljavadeps files are now maintained by the state file and regenerated when necessary.
    See also - New Features and Enhancements: globaljavadeps and localjavadeps are synchronized via the state file
  2. 040007 - jar file gets out of sync with makefile
    Using the :JAR: operator an existing jar target file would be updated if it had no state information. For example, if an old jar was lying around, building it would append to it rather than regenerate it and could result in old, unwanted archive members in the jar. Now by default such jar files will be regenerated from scratch so the old contents are lost and only the members from the current build are archived. The old behavior can be restored by setting jarappend=1 which also allows multiple makefiles to maintain a single jar file.
    See also - New Features and Enhancements: Multiple :JAR: makefiles can update the same target jar file
    See also - Changes Impacting lu3.7 Makefiles: :JAR: Appending to an Existing Jar File
  3. 040009 - user JARFLAGS is ignored
    The :JAR: rules were initializing JARFLAGS to null thus erasing any user settings. JARFLAGS is no longer initialized and if set by the user :JAR: will add the flags to the jar operations.
  4. 040018 - error updating jar target after target is removed
    When using :JAR:, removing the jar target file without doing a clobber or removing the state file no longer causes an error on the next build.
  5. 040065 - jar index option does not work with full path
    The :JAR: operator indexed the jar file after generating it by running jar i /full-path/file.jar. This index operation would fail for some jar files that contain a manifest which defines Class-Path. This has been fixed by not generating the index with the full path to the jar but instead changing directory to the jar file and specifying the file name with no path information on the command line.
  6. 040081 - Java makefile does not clobber when no source files
    The clobber common action can now be run on :JAVA: makefiles that have no associated Java source files.
  7. 040092 - correct --vpath for jdeps
    The --vpath flag passed to JavaDeps by the :JAVA: operator has been changed to accommodate Javadeps release lu2.2.2. The path specified now is each viewpath root node (like the VPATH environment variable) instead of the current directory expanded through the viewpath.
  8. 040098 - VC++ generates wrong .req file
    The required libraries file generated by the :LIBRARY: operator is now correct when using the MS VC++ compiler on Interix.
    See also - New Features and Enhancements: MS Visual C++ compiler supported on Windows/SFU
  9. 050030 - provide filter for Java/Jar rules
    The :JAVA: and :JAR: operators now filter Java source files containing "#empty" out of the build. This can be used to mask old, unwanted Java files that still exist in the viewpath but should no longer be built.
    See also - New Features and Enhancements: Java builds filter out #empty files
  10. 050034 - support jdeps040018 Java builds in different directory
    Under certain conditions when using the :JAVA operator to build Java code located under a different directory from the makefile and using .SOURCE.java to locate the package root, each Java source file would be passed to JavaDeps multiple times, expanded once for each node in the viewpath. This has been fixed.
    See also - New Features and Enhancements: Support for Java builds from a directory other than the source package directory
  11. 050045 - :JAR: incompatible with nmakelog
    The :JAR: operator is now compatible with the nmakelog output serializer.
  12. 050053 - JAVA.mk error when touching generated class files
    When building Java code using the :JAVA: operator, Java packages with certain inner classes could result in an error from the touch command while the package was being prepared to be compiled. This was caused by some of the class directories not being created before touch was called and has been fixed.
  13. 050054 - JAVA.mk bottleneck
    Optimizations have been made to the :JAVA: operator which result in significant speed up for very large Java packages. The new maxjavawarn variable can be used to control part of the optimization.
    For details see - New Features and Enhancements: :JAVA: performance enhancements
  14. 050057 - :JAR: recurses when not necessary
    The :JAR: operator no longer recurses the directory tree for explicit files specified on the right hand side with no shell pattern. Since the file is explicitly identified the recursion is not necessary to locate the file. Previously this would cause large delays when specifying files at the top of a tree since all the sub-directories were needlessly searched. Now a recursion is triggered only when a shell pattern is specified somewhere in the path.
  15. 050061 - :JAR: enhancements
    • Under certain conditions the :JAR: operator would attempt to re-index the jar file when everything was already up to date. An error would occur if the jar was down the viewpath and not in the current node. This has been fixed.
    • Error messages have been updated to convey meaningful information and identify the current jar target for makefiles that build more than one jar.
    • The "-- Making file.jar --" message has been removed.
    • If multiple manifest prerequisites are specified the first one is used and others are ignored with a warning message.
    • A prerequisite manifest file is now properly maintained and triggers an update if the file is touched or the prerequisite is changed to another file.
      See also - New Features and Enhancements: Enhanced manifest file support for :JAR:
  16. 050062 - .JAVA.JDK error
    The :JAVA: operator no longer generates an unexpected error when JAVAC is defined with some command line flags (e.g., JAVAC = javac -g).
  17. 050066 - JARROOT error when JARROOT not in current vpath node
    An error no longer occurs when the JARROOT directory exists down the viewpath and not in the local build node.
  18. 060018 - jdeps called with no Java files
    Under certain conditions the :JAVA: operator would re-run JavaDeps without specifying any Java files when everything was up to date. This has been fixed so JavaDeps is not re-run.
  19. 060023 - .AFTERDONE not triggered
    Under certain conditions when using :JAVA: to build a large Java package with multiple batch compiles the last batch was not triggered resulting in an incomplete set of class files. This has been fixed.
  20. 060030 - JAR.mk JARROOT and clobber errors
    Some :JAR: fixes found in beta test. When two jar files are built in one makefile, the second jar includes the first jar and the jar targets are not in the current directory a JARROOT error occurred when updating the jars in a new viewpath node. Under the same conditions using the clobber common action would result in an unexpected error. Both issues have been fixed.

3.5 Probe

  1. 040038 - probe LD_LIBRARY_PATH test
    The probe script did not properly detect the compiler's use of LD_LIBRARY_PATH to include in the CC.STDLIB probe variable. This has been fixed.
  2. 040072 - probe scripts - /bin/cut not on all Linux platforms
    The probe scripts now call cut from the PATH instead of /bin/cut which may not exist on all platforms.
  3. 040086 - cpp defines needed for AIX compiler
    _LONG_LONG now is properly defined in the pp probe script for the AIX C compiler.
  4. 040091 - update probe scripts to support VC++ on Interix
    The probe scripts now support the MS VC++ compiler on Interix via the /bin/cc wrapper.
    See also - New Features and Enhancements: MS Visual C++ compiler supported on Windows/SFU

3.6 Miscellaneous

  1. 040089 - resolve lu3.7 gcc library dependencies
    The taglines and logfilter commands on Solaris no longer depend on the libstdc++.so and libgcc_s.so shared libraries.
  2. 050048 - bad iffe results with gcc -O optimize flag
    An iffe test related to static linking that was giving bad results when using the -O optimize flag with gcc and some other newer compilers has been fixed.

3.7 Variables

  1. New variable CC.SUFFIX.LINKHEADER - see 040085.
  2. New variable jarappend - see 040007.
  3. New variable maxjavawarn - see 050054.
  4. New variable UMASKCHANGE - see 050063.

3.8 Options

  1. Deprecated option -u / disableumaskchange - see 050063.

[Table of Contents] [Previous Section] [Next Section]

Last Update: Friday,12-Aug-2016 12:33:28 EDT