Nokia Networks Home

Nokia nmake Product Builder

Quick Links

Related Products

Release Notes -- Nokia nmake 3.1.2

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

2. Bug Fixes

2.1 Unending recursion causes core dump

A core dump caused by unending recursion during automatic variable expansion has been fixed. The following makefile demonstrates the problem:

    %.x gen_%.C : %.C 
	    touch $(<)

    main : .MAKE
	    print $("main.x":G=%.o)

2.2 Lost prerequisites when expanding $(!)

The value stored in an internal global buffer was occasionally clobbered during the expansion of $(!). The behavior is illustrated by the next example, which involves viewpathing and $(!):

    mkdir n1 n2 
    export VPATH=$PWD/n1:$PWD/n2

Put the following files in directory n1,

    #include <stdio.h>


    main :: main.c
    test : .MAKE
	    print First try: $(!main)
	    print Second try: $(!main)

and leave directory n2 empty. Build main with


and type,

    nmake test

and you only get the right answer from the second print statement:

    First try:	
    Second try: main.o main.c /usr/5include/stdio.h

The problem has been fixed in this release.

2.3 :T=G in .PREFIX.INCLUDE. can force early bindfile()

.SCAN.c generates a .PREFIX.INCLUDE. call when a local include file is found, but the call always happens before the.LCL.INCLUDE attribute is assigned to the included file. Things can break when the included file name doesn't end in .h, because the :T=G used by .PREFIX.INCLUDE. triggers a bindfile() call that won't use .SOURCE.%.LCL.INCLUDE when looking for the file.

The symptom is a build that fails the first time, but succeed after that because .LCL.INCLUDE is assigned to the included file and saved in the statefile. Here's a simple example that illustrates the behavior:


    SOURCE.h : hdr
    a :: a.c


    #include "test"
    main() {}

Create an empty hdr/test file, run nmake when there's no statefile, and you get,

    make: don't know how to make a : a.o : a.c : test

but after that the build works. The problem has been fixed in release 3.1.2 by explicitly assigning .LCL.INCLUDE to the included file in .PREFIX.INCLUDE. before the :T=G edit operator is used.

2.4 The T scan rule can't access matched pattern

The token rule of scan strategies is for matching literal patterns, but a simple omission in the nmake engine meant the action associated with the rule couldn't reference the matched pattern. The mistake has been fixed in this release.

2.5 Incomplete -I list

A header file included by files at different levels in a source tree can, under unusual circumstances, result in an incomplete -I list in the compiler command line generated. You can duplicate the problem using the directory structure,


and the following source files:

    #include "first.h"


    #include "../../hc/second.h"


    #include "../hc/second.h"


    .SOURCE.h : ../../hdr
    xxx :: works.c fails.c

Run nmake and fails.c won't compile because the -I list is incomplete. The problem happens because second.h is included by source files (first.h and fails.c) that are at different levels in the directory tree. The mistake has been fixed in release 3.1.2.

2.6 A scan strategy enhancement

The enhancement allows attribute removal directly from scan rules (e.g., .SCAN.c). The syntax looks something like,

    I| \# include <%>|A-.LCL.INCLUDE|A.STD.INCLUDE|

which eliminates .LCL.INCLUDE using the new attribute removal technique before assigning .STD.INCLUDE. The default version of .SCAN.c in doesn't currently use the enhancement, but the required code is in the nmake engine, so the technique is available as a work-around.


The following fixes were made in

2.8 cpp

The following fixes were made in cpp:

2.9 ppcc

The following fixes were made in ppcc:

2.10 probe

The following fixes were made in make probe:

The following fixes made in pp probe:

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

Last Update: Friday,12-Aug-2016 12:29:40 EDT