Nokia nmake Product Builder
Customer Support Newsletter

http://www.bell-labs.com/project/nmake/newsletters/

Issue No. 36 - December 2010
Contacts
Articles
  1. Tool Repository
  2. Oracle Studio 12.2
  3. read/print -p Option
  4. Feedback and Suggestions

Tool Repository

We have added a new Tool Repository to the web site to provide a collection of tools for use with Alcatel-Lucent nmake. The tools will be added and updated independently of nmake releases and can be downloaded and used as is or as a starting point for customization.

Currently tools are available for processing XML build logs. The targets and makefiles scripts provide examples for processing XML logs in several different languages including Python, XSLT, Groovy and Scala. The targets scripts list data about each triggered target in the build, including target name, execution exit code, start time, and end time. The makefiles scripts reports information about the build in HTML format. Note that all the Python scripts require Python 2.6 which is available in exptools at /opt/exp/python/python2.6/bin/python.

durations.py reports the length of time each triggered shell action ran sorted longest to shortest. It can be used to identify slow areas of the build which may be candidates for optimization. Here is an example run.

$ durations.py makelog.xml
0:03:32.864556 targ2 src/cmd/t2
0:01:33.858293 targ3 src/cmd/t3
0:01:04.085014 targ4 src/cmd/t4
0:00:33.030622 targ1 src/cmd/t1
0:00:00.695936 ca.o src/cmd/t1
0:00:00.693648 cc.o src/cmd/t3
0:00:00.691520 cb.o src/cmd/t2
0:00:00.675594 b.o src/cmd/t3
0:00:00.660692 a.o src/cmd/t3
0:00:00.615385 a.o src/cmd/t2
0:00:00.612100 a.o src/cmd/t1
0:00:00.608247 b.o src/cmd/t2
0:00:00.121718 /home/richb/bin/targ4 src/cmd/t4
0:00:00.063113 ../../../bin/targ2 src/cmd/t2
0:00:00.061131 ../../../bin/targ3 src/cmd/t3
0:00:00.061090 ../../../bin/targ1 src/cmd/t1
0:00:00.044407 ../../../bin src/cmd/t2
0:00:00.042788 ../../../bin src/cmd/t1
0:00:00.041787 /home/richb/bin src/cmd/t4
0:00:00.041720 ../../../bin src/cmd/t3

errors.py generates a text based report of the errors in a build. The report contains a summary of the overall build along with details on each failed target and makefile, including exit code, target name, directory, shell command and output. The report can be emailed to project members or used as input to other scripts for automation. Here is an example run of a build with several errors:

$ errors.py makelog.xml
Build exit code: 1
Number of failed targets: 3
Number of failed Makefiles: 2
Project name: Example Project
Build name: Integration
Build start time: 2010-12-17 15:06:51.240892 -05:00
Build end time: 2010-12-17 15:07:04.349690 -05:00
Build duration: 0:00:13.108798
Host: jaguar
Directory: /home/richb/newsletter/n36/bld/src
MAKEFILE: Makefile
VPATH: /home/richb/newsletter/n36/bld
MAKE: nmake
Command line arguments:
    arg 1: -k
    arg 2: install
Web log URL: http://my.example.com/mybuild
Web Build Index URL: http://my.example.com

Failed Target 1
===============

Error code: 1
Makefile target: a.o
Execution directory: /home/richb/newsletter/n36/bld/src/cmd/t1
Offset from vpath: src/cmd/t1
Make recursion level (MAKELEVEL): 2
Start time: 2010-12-17 15:06:53.805588 -05:00
End time: 2010-12-17 15:06:54.325555 -05:00
Job duration: 0:00:00.519967
Why triggered: state variable (CCFLAGS) initialized to '-O'
Weblog URL: http://my.example.com/mybuild/makefile_1_1_1.html#t1_1_1_2
Rule action output: 
+ gcc -O -I- -c a.c
a.c: In function `a':
a.c:5: error: syntax error before '}' token

Failed Target 2
===============

Error code: 1
Makefile target: a.o
Execution directory: /home/richb/newsletter/n36/bld/src/cmd/t2
Offset from vpath: src/cmd/t2
Make recursion level (MAKELEVEL): 2
Start time: 2010-12-17 15:06:56.452323 -05:00
End time: 2010-12-17 15:06:56.973269 -05:00
Job duration: 0:00:00.520946
Why triggered: state variable (CCFLAGS) initialized to '-O'
Weblog URL: http://my.example.com/mybuild/makefile_1_1_2.html#t1_1_2_2
Rule action output: 
+ gcc -O -I- -c a.c
a.c: In function `a':
a.c:5: error: syntax error before '}' token

Failed Target 3
===============

Error code: 1
Makefile target: b.o
Execution directory: /home/richb/newsletter/n36/bld/src/cmd/t2
Offset from vpath: src/cmd/t2
Make recursion level (MAKELEVEL): 2
Start time: 2010-12-17 15:06:57.142291 -05:00
End time: 2010-12-17 15:06:57.743916 -05:00
Job duration: 0:00:00.601625
Why triggered: state variable (CCFLAGS) initialized to '-O'
Weblog URL: http://my.example.com/mybuild/makefile_1_1_2.html#t1_1_2_3
Rule action output: 
+ gcc -O -I- -c b.c
b.c: In function `b':
b.c:5: error: syntax error before '}' token

Failed Makefile 1
=================

Error code: 1
Triggering parent rule: t3
Execution directory: /home/richb/newsletter/n36/bld/src/cmd/t3
Offset from vpath: src/cmd/t3
Make recursion level (MAKELEVEL): 2
Start time: 2010-12-17 15:06:58.771637 -05:00
End time: 2010-12-17 15:07:02.967979 -05:00
Makefile run duration: 0:00:04.196342
Weblog URL: http://my.example.com/mybuild/makefile_1_1_3.html

Failed Makefile 2
=================

Error code: 1
Triggering parent rule: t4
End time: 2010-12-17 15:07:03.559060 -05:00
Weblog URL: http://my.example.com/mybuild/makefile_1_1_4.html

More tools will be added to the repository over time. Send us your suggestions to nmake@alcatel-lucent.com.

index

Oracle Studio 12.2

The Oracle Studio 12.2 compilers have been certified with nmake 12 with no issues. However we found that as of Studio 12.1 the C++ compiler no longer searches the RogueWave (rw7) headers and libraries by default! This means they are also not included in the default nmake search by the CC.STDINCLUDE and CC.STDLIB probe variables. The Studio 12.1 and 12.2 manuals indicate the RogueWave libraries are obsolete and deprecated (from http://download.oracle.com/docs/cd/E18659_01/html/821-1383/bkaje.html#scrolltoc [updated 07/07/2011 for new URL]):

librwtool (Tools.h++): Tools.h++ is a C++ foundation class library from RogueWave. Version 7 is provided. This library is obsolete and use of the library is deprecated in new code. It is provided to accommodate programs written for C++ 4.2 that used RW Tools.h++.

The RogueWave libraries can be accessed using the -library=rwtools7_std option to the C++ compiler. It is best to add this option to the nmake CC variable so the additional search directories will be picked up by probe. For example:

CC = /opt/SUNWspro/bin/CC -library=rwtools7_std

index

read/print -p Option

The nmake read and print commands can be used to read input from a file and print to standard output or a file. With the undocumented -p option you can also read the output from an external process (command) and print to an external process. The option will be properly documented in the next release. Usage of the -p option is as follows.

read -p command VAR
Read stdout from command to variable VAR.
print -p command string
Send string as standard input to command. Note, stdout is lost but may be redirected to a file.

The following example shows both the read and print -p options.

$ ls -l
total 4
-rw-r--r-- 1 richb richb 145 Dec 17 16:17 Makefile
-rw-r--r-- 1 richb richb  55 Dec 17 16:16 planets.list

$ cat Makefile 
targ: .MAKE
        read -p "uname -sr" SYSTEM
        print system info: $(SYSTEM)
        read -i planets.list PLANETS
        print -p "sort -o planets.sort" $(PLANETS)

$ cat planets.list 
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune

$ nmake
system info: SunOS 5.6

$ cat planets.sort 
Earth
Jupiter
Mars
Mercury
Neptune
Saturn
Uranus
Venus

index

Feedback and Suggestions

We are interested in any feedback you might have about nmake. Please send comments / suggestions to nmake@alcatel-lucent.com.

We're also open to suggestions for future articles. If there is anything you would like to see in the newsletter please send us a note to nmake@alcatel-lucent.com. Thanks for your support!

index

<<home / newsletters