Nokia nmake Product Builder
Customer Support Newsletter

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

Issue No. 15 - August 2003
Contacts
Highlights
  1. Release lu3.6
  2. STC Services
  3. New Look for Technical Web Site
Technical Notes
  1. Windows NT/2000 Beta Testers
  2. File Types
  3. Distinct probe files
Tidbits
  1. Using the :MAKE: operator

Highlights

Alcatel-Lucent nmake lu3.6 Released

Version lu3.6 was released on June 20, 2003 for all Tier 1 and Tier 2 platforms and includes over 35 fixes and enhancements. For a full list of changes see the release notes. The significant new features include the following:

Jar file support
The new :JAR: assertion builds and maintains jar files, with support for viewpathing, index files, and manifest files. The rules are different and have enhanced features over what we previously published in the newsletters. For details see the release notes and :JAR: man page.
Batched Concurrent Java Builds
Previously batched java compiles could not be run concurrently. Batched, concurrent java builds are now supported for additional performance boost. For details see the release notes.

index

STC Services

Give your existing system a tune-up, or Jumpstart your new nmake system: The Software Technology Center (STC) offers a number of services that can help you maximize the benefits of using nmake. For projects new to using nmake, we offer a service to help define your build process and establish nmake based build environment. Projects that have been using nmake for a while can benefit from our Build Process Assessment, Build Improvement Service, and on demand consultation. If you are interested in receiving more information about these services, please contact Anna Bieszczad at 732-332-6837 or annab@lucent.com.

index

New Look for the Technical Web Site

The nmake technical web site has a new look. We hope the new layout and organization makes it easier to use and navigate. Cascading style sheets are being used for much of the layout, however the site is designed to degrade gracefully for browsers without full style sheet support (eg. Netscape 4.x) and should still function properly, but look different, in such browsers. If you have any troubles or suggestions please drop us a note.

index


Technical Notes

Windows NT/2000 Beta Testers

We are still looking for beta testers for our Windows® NT/2000 port (using the UWIN environment). Our current projection for beta is by the end of this year. If you are interested please contact us at nmake@alcatel-lucent.com.

index

File Types

Results from our last customer survey suggested that we provide built-in support for more file types (eg 4GL, Java types, etc). We are interested in more feedback and would like to hear any suggestions or needs you have in this area. Please send us comments to nmake@alcatel-lucent.com.

index

Distinct Probe Files

The nmake probe facility stores probe configuration files based on the path to the compiler, which allows different configuration files for different compilers. However it is sometimes desirable to store more discrete configuration files based on additional criteria. This can be accomplished using the VERSION_ENVIRONMENT environment variable.

The VERSION_ENVIRONMENT environment variable is a colon separated list of environment variables for probe to consider when generating the configuration filename hash. This can be used for probe to keep different configuration files based on OS version, project, user, etc.

Here is an example showing how to keep different probe configuration files for different OS versions. This is useful if you install nmake on a file server and, for example, run it on different versions of Solaris. The following will cause nmake generate and access different probe configuration files for different values of $OS_VERSION.

$ export VERSION_ENVIRONMENT=OS_VERSION
$ export OS_VERSION=$(uname -sr)

Multiple variables can be specified to further distinguish the probe files.

$ export VERSION_ENVIRONMENT=OS_VERSION:PROJECT:RELEASE

index


Tidbits

Using the :MAKE: operator

The :MAKE: operator is used for recursing a build tree. By using this operator it is unnecessary to write rules to recurse into the sub-directories. Here are some ways :MAKE: can be used.

By default all sub-directories are build:

$ ls -l
total 24
-rw-r--r--    1 richb    richb          16 Jul 31 10:37 Makefile
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 ax
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 bx
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 cx
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 dy
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 ey
-rw-r--r--    1 richb    richb          28 Jul 31 10:34 file.mk
drwxr-xr-x    2 richb    richb        4096 Jul 31 10:35 fy

$ cat Makefile 
:MAKE:

$ nmake
ax:
+ : building /home/richb/n15/src/ax
bx:
+ : building /home/richb/n15/src/bx
cx:
+ : building /home/richb/n15/src/cx
dy:
+ : building /home/richb/n15/src/dy
ey:
+ : building /home/richb/n15/src/ey
fy:
+ : building /home/richb/n15/src/fy

Typical use for :MAKE: is to build a list of sub-directories by specifying the directories to visit on the RHS.

$ cat Makefile
:MAKE: ax bx cx

$ nmake
ax:
+ : building /home/richb/n15/src/ax
bx:
+ : building /home/richb/n15/src/bx
cx:
+ : building /home/richb/n15/src/cx

Shell patterns can be specified:

$ cat Makefile 
:MAKE: *x

$ nmake
ax:
+ : building /home/richb/n15/src/ax
bx:
+ : building /home/richb/n15/src/bx
cx:
+ : building /home/richb/n15/src/cx

You can even use shell patterns to tell it what not to build:

$ cat Makefile 
:MAKE: !([af]*)

$ nmake
bx:
+ : building /home/richb/n15/src/bx
cx:
+ : building /home/richb/n15/src/cx
dy:
+ : building /home/richb/n15/src/dy
ey:
+ : building /home/richb/n15/src/ey

You can recurse directly to another makefile:

$ cat Makefile
:MAKE: *x file.mk *y

$ nmake
ax:
+ : building /home/richb/n15/src/ax
bx:
+ : building /home/richb/n15/src/bx
cx:
+ : building /home/richb/n15/src/cx
file.mk:
+ : building file.mk
dy:
+ : building /home/richb/n15/src/dy
ey:
+ : building /home/richb/n15/src/ey
fy:
+ : building /home/richb/n15/src/fy

By using the recurse engine variable with the -j (parallel jobs) option you can recurse to multiple directories and makefiles at the same time. This example allows up to 4 simultaneous recursions.

$ nmake recurse=4 -j4  
ax:
bx:
file.mk:
cx:
+ : building /home/richb/n15/src/ax
+ : building /home/richb/n15/src/bx
+ : building file.mk
+ : building /home/richb/n15/src/cx
dy:
ey:
fy:
+ : building /home/richb/n15/src/dy
+ : building /home/richb/n15/src/ey
+ : building /home/richb/n15/src/fy

You can enforce more control by using the "-" special atom to synchronize the build. Everything before the "-" will be completed before continuing. In this example file.mk not built until ax, bx and cx are complete, and the remaining directories are not built until file.mk is finished. Notice how the output differs from the previous run.

$ cat Makefile 
:MAKE: *x - file.mk - *y

$ nmake recurse=4 -j4  
ax:
bx:
cx:
+ : building /home/richb/n15/src/ax
+ : building /home/richb/n15/src/bx
+ : building /home/richb/n15/src/cx
file.mk:
+ : building file.mk
dy:
ey:
fy:
+ : building /home/richb/n15/src/dy
+ : building /home/richb/n15/src/fy
+ : building /home/richb/n15/src/ey

You can clobber everything to clean up:

$ nmake recurse clobber
ax:
+ ignore rm -f Makefile.mo Makefile.ms
bx:
+ ignore rm -f Makefile.mo Makefile.ms
cx:
+ ignore rm -f Makefile.mo Makefile.ms
file.mk:
+ ignore rm -f file.mo file.ms
dy:
+ ignore rm -f Makefile.mo Makefile.ms
ey:
+ ignore rm -f Makefile.mo Makefile.ms
fy:
+ ignore rm -f Makefile.mo Makefile.ms
+ ignore rm -f Makefile.mo Makefile.ms

index

<<home / newsletters