Nokia Networks Home

Nokia nmake Product Builder

Quick Links

Related Products

Release Notes -- Nokia nmake 3.1.1

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

2. Bug Fixes and Enhancements

2.1 Editor Operators

2.1.1 :I

A mistake in the implementation of the :I edit operator that occasionally resulted in incorrect output, has been fixed. You can easily check your version - just hand the following makefile

    VAR1 = a b
    VAR2 = b c

    t : .MAKE
	    print Intersection: $(VAR1:I=$(VAR2))

    x : b c

to nmake and if you don't get

    Intersection: b

you need to upgrade.

2.1.2 :P=D

The :P=D edit operator could, under unusual circumstances, incorrectly decide that a pathname listed in a .SOURCE rule represented a simple file rather than a directory. Once that mistake was made :P=D removed the trailing component from the pathname and returned the resulting directory as the answer. The problem exists in all recent versions of nmake and has now been fixed.

2.1.3 :G

A mistake in code added to the :G edit operator in 3.1 that occasionally resulted in an incomplete list of generated files, has been fixed. The bug is illustrated by the following example,

    SRC = tst.idm

    %b.c : %.idm .TERMINAL
	    touch $(<)

    t : .MAKE
	    print Generated files: $(SRC:G=%.o)

which prints

    Generated files: tstb.o

if your version of nmake is working properly.

2.1.4 :L

Listings of large directories using the :L edit operator could cause a core dump. The problem happened when an internal buffer was automatically expanded and moved by realloc(), but a local pointer into that buffer was not updated. The mistake is an old one that's now fixed.

2.1.5 :P=U

The following makefile

	    print $(...:P=U)

illustrates a problem with the :P=U edit operator that usually ends with a core dump. This is another very old bug that's fixed in 3.1.1.

2.2 File Scanning

Several file scanning problems were found and fixed in this release.

2.3 Directory Binding

nmake occasionally lost track of information that it might need later on to calculate a file's bound directory. A typical example is a source file with an include directive

    #include "../../x/sys/hdr/header.h"

and a .SOURCE.h rule

    .SOURCE.h : ../../hdr

used to locate header files. After binding the include file to


nmake correctly simplified the bound path to


in a process called path canonicalization, and then associated the simplified path with the unbound name. In our example the bound directory is,


but there's no longer a record of it in the canonicalized path. nmake usually anticipated problems and took steps to record the bound directory elsewhere, but a few cases slipped by. The omissions have now been fixed.

2.4 Metarules

A long-standing mistake in nmake metarule code made assertions like

    ../%.t : $(DIR)/%.p

difficult to use, because nmake usually started from the target's directory when it went looking for the prerequisite. The mistake, which was caused by a missing test in an if statement, has now been fixed. (Users who recognized the behavior and managed to work around it may have some incompatibilities to deal with when they upgrade to 3.1.1. There's a magic incantation that restores the old behavior, but it's a last resort that we're not giving out here.)

2.5 Base Rules

2.6 cpp

2.7 probe

2.8 ppcc

ppcc has been modified for Sun's C++ 4.x.

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

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