The changes in release lu3.8 are largely backward compatible with lu3.7. Every effort has been made to insure code changes do not unexpectedly change the documented behavior of nmake features.
The following may impact builds and require changes.
jarappend=1in your makefile.
disableumaskchangeoption has been removed. The option introduced in release lu3.7 was used to prevent changing the umask to match the current directory permissions. The setup of the umask has to be done very early, before the options are parsed, so the option was replaced with an environment variable.
NOare also accepted). The variable must be set in the shell environment not in the makefile.
.REQUIRE.+l%function may change the way required-libs used from
CC.REQUIRED.name works. Previously when the parent required-lib was referenced as
+lname all the required-libs were transformed to
+linstead of using
+lis used to prefer archive libraries over shared libraries). This is error prone since additional archive libraries may be picked up that were not intended, including version specific system platform libraries which can break portability to later versions of the platform.
libabcwhich depends on the
$ cat lib.mk CCFLAGS += $$(CC.PIC) LIBDIR = lib :ALL: abc :LIBRARY: abc.c -lsocketIf
+labcwas specified as the prerequisite to an executable then its required-libs were also changed to
libsocket.awould be pulled in instead of
$ cat app.mk .SOURCE.a : lib hello :: hello.c +labc $ nmake -f app.mk + cc -O -I- -c hello.c + cc -O -o hello hello.o lib/libabc.a /usr/lib/libsocket.a
libsocketshared library is pulled in:
$ cat app.mk .SOURCE.a : lib hello :: hello.c +labc $ nmake -f app.mk + cc -O -I- -c hello.c + cc -O -o hello hello.o lib/libabc.a -lsocket
+lname with required-libs to intentionally pick up archive libraries for all the required-libs.
+lyou can define
CC.REQUIRE.name when linking with libname to override the default required-libs. Or if you are already using
CC.REQUIRE.name define it with
+llibraries. For example, if you want
libxyzto pull in
+lzthen defining the following when linking with
CC.REQUIRE.xyz = -lxyz +lx +ly +lzSpecifying
-lxyzas a prerequisite will automatically pull in
.REQUIRE.+l%rule in the project's local rules to restore the old behavior. This is discouraged since the project will need to maintain the rule.
.REQUIRE.+l% : .FUNCTION local L L := $(.REQUIRE.-l% $(%:/+l/-l/)) return $(L:/-l/+l/:T=F)
+lwhen the required-libs are originally specified as such on the
:LIBRARY:assertion. This feature is not currently supported but is a candidate for inclusion in a future release.