Nokia

Nokia nmake Product Builder

 

Nokia nmake Product Builder
3.1.2 Release Notes

Table of Contents

Released: 1997

1. Introduction
1.1 Supported Hardware

2. Bug Fixes
2.1 Unending recursion causes core dump
2.2 Lost prerequisites when expanding $(!)
2.3 :T=G in .PREFIX.INCLUDE. can force early bindfile()
2.4 The T scan rule can't access matched pattern
2.5 Incomplete -I list
2.6 A scan strategy enhancement
2.7 Makerules.mk
2.8 cpp
2.9 ppcc
2.10 probe

3. Known Bugs and Remarks
3.1 Bugs
3.2 Remarks


1. Introduction

nmake 3.1.2 is another a bug fix release.

1.1 Supported Hardware

The 3.1.2 release has been ported to many UNIX-based systems. For a current list, contact the nmake Customer Support hotline at 908-582-5880, or send email to nmake@alcatel-lucent.com. Our standard platforms include SunOS, Solaris Sparc, HP, Amdahl, NCR, SGI, and unixware.


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,
main.c:

    #include <stdio.h>
    main(){}

Makefile:

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

and leave directory n2 empty. Build main with

    nmake

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:

Makefile:

    SOURCE.h : hdr
    a :: a.c

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,

    hdr/
    hdr/first.h
    hc/
    hc/second.h
    hc/src/
    hc/src/fails.c
    hc/src/works.c

and the following source files:
works.c:

    #include "first.h"
    main(){}

fails.c:

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

first.h:

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

Makefile:

    .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 Scanrules.mk 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 Scanrules.mk doesn't currently use the enhancement, but the required code is in the nmake engine, so the technique is available as a work-around.

2.7 Makerules.mk

The following fixes were made in Makerules.mk:

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:


3. Known Bugs and Remarks

3.1 Bugs

The following is a list of known bugs:

3.2 Remarks


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