Nokia nmake Product Builder
Customer Support Newsletter

Issue No. 11 - March 29, 2002
  1. JavaDeps Update
  2. Beta Sites Wanted
  3. Newsletter Feedback
Technical Notes
  1. Java Feature Plans
  2. Jar Rules
  1. Recurse Time Stamps
email: (tech support)
email: (licenses/orders)


JavaDeps Update lu2.0.2

JavaDeps-lu2.0.2 was released March 12. This update fixes a problem with JavaDeps hanging on Solaris machines when using Java 1.3 or 1.4. It should also fix similar hanging problems on other platforms, but we were only able to verify the problem on Solaris. For details and downloads see the JavaDeps page.


Beta Sites Wanted

We are looking for projects interested in beta testing the next nmake release and/or our enhanced Java support (see Java Feature Plans below). We do hope for some specific Java support beta sites in addition to nmake beta sites. So if you would like to play with the latest Java support, but not the new nmake, that is fine.

Our goal is to make sure the latest changes do no break existing functionality or makefiles. The current plan is to run beta tests towards the end of April. If you are interested in being a beta site please contact us at


Technical Notes

Java Feature Plans

Local Package Builds

We are planning a new feature for Java support to allow local package builds. The current Java support only allows building at the root of the Java package. The local package feature will allow developers to launch builds from within a package. There are several motivations for this feature:

If you are interested testing this feature let us know at

Java Tools

We are also investigating build support for tools involved in Java builds, other than the Java compiler itself. So far, we have identified the following tools that might need support:

Please let us know which tools you would like to see supported or if there are others we have missed.


Jar Rules

We recently made some changes to the jar rules posted in the Creating Jar Files article in issue 5. The update allows multiple targets to share a common base name (but not suffix.) For example, the following is now supported but would not work with older rules:

mypkg.jar :JAR: classes
mypkg.war :JAR: . JARTYPES=*.jar|*.html|*.xml

Notice both targets use the base "mypkg".

We plan to add jar file support to our official Java rules but we have no estimated time of availability. In the mean time if you are interested in the update you can download the new jar rules. Please see Creating Jar Files for details on using the rules.



Recurse Time Stamps

Many projects include a date and time stamp in their build output showing when each makefile starts and finishes building. This is usually done using the .INIT and .DONE special atoms in the project's global makefile. For example:

	silent echo "+++ START $(VOFFSET)/$(MAKEFILE:B:S) - `/bin/date`"

	silent echo "+++ DONE $(VOFFSET)/$(MAKEFILE:B:S) - `/bin/date`"

.INIT is made before any user targets. .DONE is made after all other targets. The above gives us output like this:

+++ START ./Makefile - Thu Mar 28 16:17:39 EST 2002
+++ START orb/Makefile - Thu Mar 28 16:17:40 EST 2002
+++ START orb/abtu/Makefile - Thu Mar 28 16:17:40 EST 2002
+ /opt/exp/gnu/bin/gcc -O -I- -o clouds clouds.c
+++ DONE orb/abtu/Makefile - Thu Mar 28 16:17:42 EST 2002
+++ START orb/c/Makefile - Thu Mar 28 16:17:42 EST 2002
+ /opt/exp/gnu/bin/gcc -O -I- -o plum plum.c
+++ DONE orb/c/Makefile - Thu Mar 28 16:17:43 EST 2002
+++ DONE orb/Makefile - Thu Mar 28 16:17:43 EST 2002
+++ DONE ./Makefile - Thu Mar 28 16:17:43 EST 2002

In this example the .INIT and .DONE actions are sent to the shell for processing.


We can make a couple improvements on the original model.

  1. The time stamps can be generated using .MAKE actions, which can be more efficient since nmake processes the action blocks directly instead of sending them to the shell.
  2. By using prerequisites of .INIT and .DONE instead of these atoms directly, we allow users to use .INIT and .DONE in their makefiles without causing any conflicts with the time stamp rules.

For example:


	print -- +++ START $(VOFFSET)/$(MAKEFILE:B:S) $("":T=R:F=%(%b-%d-%Y %H:%M:%S)T)

	print -- +++ DONE $(VOFFSET)/$(MAKEFILE:B:S) $("":T=R:F=%(%b-%d-%Y %H:%M:%S)T)

The .GLOBALINIT and .GLOBALDONE targets replace .INIT and .DONE for global definitions. They both have prerequisites of .MAKE indicating nmake will process the action blocks. This means we must be sure to use nmake style syntax in the action blocks instead of shell style.

The last variable of the print statement prints the date and time in a user defined format. The :T=R edit operator gives the relative time. The :F formats the time and date. The new output looks very similar to the original but you will notice the date is formatted differently.

+++ START ./Makefile Mar-28-2002 16:18:35
+++ START orb/Makefile Mar-28-2002 16:18:35
+++ START orb/abtu/Makefile Mar-28-2002 16:18:35
+ /opt/exp/gnu/bin/gcc -O -I- -o clouds clouds.c
+++ DONE orb/abtu/Makefile Mar-28-2002 16:18:35
+++ START orb/c/Makefile Mar-28-2002 16:18:36
+ /opt/exp/gnu/bin/gcc -O -I- -o plum plum.c
+++ DONE orb/c/Makefile Mar-28-2002 16:18:36
+++ DONE orb/Makefile Mar-28-2002 16:18:36
+++ DONE ./Makefile Mar-28-2002 16:18:36


Newsletter Feedback

We are always interested in feedback! Let us know what you think of the newsletter, how we may improve, or ideas you have for future issues. Send us a note at All ideas, suggestions, and comments are welcome.


<<home / newsletters