|
|
Release Notes -- Alcatel-Lucent nmake lu3.8
July 2006
[Table of Contents]
[Previous Section]
[Next Section]
3. Bug Fixes and Enhancements
3.1 Baserules
- 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.
- 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.
- 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.
- 040070 - clean does not remove object files on AIX
The clean common action now removes .o
files on AIX platforms.
- 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.
- 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
- 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
- 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.
- 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.
- 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.
- 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
- 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
- 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.
- 040060 - core dump building Java code
Fixed a core dump that come up under complicated, rare conditions.
- 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.
- 040084 - stuck in prefixinclude loop
Fixed a problem where, under certain conditions nmake would hang in
an infinite loop scanning the include files.
- 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.
- 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.
- 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
- 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
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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
- 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
- 050045 - :JAR: incompatible with nmakelog
The :JAR: operator is now compatible with the nmakelog
output serializer.
- 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.
- 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
- 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.
- 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:
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 040086 - cpp defines needed for AIX compiler
_LONG_LONG now is properly defined in the pp probe script
for the AIX C compiler.
- 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
- 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.
- 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
- New variable
CC.SUFFIX.LINKHEADER -
see 040085.
- New variable
jarappend -
see 040007.
- New variable
maxjavawarn -
see 050054.
- New variable
UMASKCHANGE -
see 050063.
3.8 Options
- Deprecated option
-u /
disableumaskchange -
see 050063.
[Table of Contents]
[Previous Section]
[Next Section]
Last Update: Wednesday,20-Dec-06 13:22:12 CST
|