Patch 1 for nmake release lu3.7 was released in January, 2005. We recommend lu3.7 users upgrade if you haven't already done so. The patch contains the following fixes:
- 040075 - non-prefixed header gets .PREFIXED attribute
- 040084 - stuck in prefixinclude loop
- 040085 - scan engine support for Sun SUNWCCh include rule
- 040087 - cpp 'recursion too deep' error with no recursion
- 040089 - resolve lu3.7 gcc library dependencies
- 040095 - bad -I list on second run
For a more details and downloads see the lu3.7 patch 1 notes.
If you have been using nmake lu3.7 you may have noticed the user manuals were not available at the time of release. We are glad to say the User's Manual and Reference Guide have been updated and are available for download in PDF format. Get them from the lu3.7 release page.
JavaDeps 2.2.1 was also released in January, 2005. JavaDeps is an optional package and only required for projects building Java code using the nmake supplied :JAVA: operator. The update includes the following fixes:
- 040015 - ignore jar files that contain no class files
- 040017 - typo in warning message
- 040018 - support java build in different node other than src node
- 040019 - exception error from empty java file
- 040021 - exception error for unnamed package
- 040022 - error on java file with commented out contents
For a full list of changes and to download JavaDeps see the JavaDeps page.
Patch 4 for nmake release lu3.6 was released in February, 2005. We recommend lu3.6 users upgrade. Patch 4 contains one fix:
- 040084 - stuck in prefixinclude loop
Under certain conditions nmake would enter an infinite loop while scanning include files. The problem was caused by the engine re-processing some rules, which also contributed to other problems such as attempting to install a file in the wrong vpath node. Restrictions have been put on the rule re-processing to eliminate the problems.
For a more details and downloads see the lu3.6 patch 4 notes.
We are considering dropping support for Red Hat 6 and need to know if this would impact anyone. If you responded to our previous Linux® query there is no need to respond again unless your plans have changed (and thank you for responding!) But if we didn't hear from you and you are using, or plan to use, nmake on Linux please send us a quick note at firstname.lastname@example.org and let us know which distributions and releases you are using. If you plan to move to different distributions/platforms in the future let us know your future plans too. Thank you!
If you use custom nmake rules then you have probably used or seen
silent in some shell action blocks.
is used to suppress the shell trace output for the command which
For example, without
silent you see something like this:
abc : echo making target $(<) $ nmake + echo making target abc making target abc
silent the trace output is gone:
abc : silent echo making target $(<) $ nmake making target abc
The use of
silent can get tricky with more complex shell
actions. Take the following sample makefile:
abc : dir=../db if test ! -d $dir then mkdir $dir initdb $dir fi dumpdb -o $(<) $dir $ nmake + dir=../db + test ! -d ../db + mkdir ../db + initdb ../db + dumpdb -o abc ../db
Say we don't want the variable assignment and the test in the output since
it adds clutter and the other commands show us what is happening. We add
silent commands, but it doesn't work as we expect.
abc : silent dir=../db silent if test ! -d $dir then mkdir $dir initdb $dir fi dumpdb -o $(<) $dir $ nmake ksh: syntax error at line 5 : `then' unexpected
silent wants to execute the command that follows it. In this
silent eats the
if statement so the shell
then without the
if. Place the
silent command after
if and before
abc : silent dir=../db if silent test ! -d $dir then mkdir $dir initdb $dir fi dumpdb -o $(<) $dir $ nmake silent: dir=../db: not found make: *** exit code 1 making abc
Oops! Another error! This time the error is from the variable assignment.
silent tries to execute the command following it. So rather
than assigning the variable, the shell tries to run a command called
dir=../db which does not exist. We can fix this by adding
abc : silent eval dir=../db if silent test ! -d $dir then mkdir $dir initdb $dir fi dumpdb -o $(<) $dir $ nmake + mkdir ../db + initdb ../db + dumpdb -o abc ../db
Another option is to turn the shell trace on and off by using
set +x and
cat Makefile abc : set +x ; dir=../db ; set -x if silent test ! -d $dir then mkdir $dir initdb $dir fi dumpdb -o $(<) $dir $ nmake + mkdir ../db + initdb ../db + dumpdb -o abc ../db
set +/-x is useful to turn the trace off for large
blocks of the shell action.
abc : set +x dir=../db if silent test ! -d $dir then mkdir $dir initdb $dir fi set -x dumpdb -o $(<) $dir $ nmake + dumpdb -o abc ../db
But don't get too carried away. It is good to have enough output for an accurate record of what steps the build executed.