summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorBradley Nicholes <bnicholes@apache.org>2002-03-01 23:21:25 +0100
committerBradley Nicholes <bnicholes@apache.org>2002-03-01 23:21:25 +0100
commite6d10bff2dd54aeb6c280aa137fbbf118ffcb1fc (patch)
treeace25cb0561b00968d1b1018f04d6e5c898dd797 /build
parentXML conversions of mod_cgi and mod_cgid. (diff)
downloadapache2-e6d10bff2dd54aeb6c280aa137fbbf118ffcb1fc.tar.xz
apache2-e6d10bff2dd54aeb6c280aa137fbbf118ffcb1fc.zip
Switching from a project build file to GNU make files
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93665 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'build')
-rw-r--r--build/NWGNUenvironment.inc286
-rw-r--r--build/NWGNUhead.inc103
-rw-r--r--build/NWGNUmakefile80
-rw-r--r--build/NWGNUtail.inc287
4 files changed, 756 insertions, 0 deletions
diff --git a/build/NWGNUenvironment.inc b/build/NWGNUenvironment.inc
new file mode 100644
index 0000000000..76149ad0c8
--- /dev/null
+++ b/build/NWGNUenvironment.inc
@@ -0,0 +1,286 @@
+#
+# Setup needed Tools and Libraries
+#
+
+ifeq "$(wildcard $(AP_WORK)\NWGNUcustom.ini)" "$(AP_WORK)\NWGNUcustom.ini"
+include $(AP_WORK)\NWGNUcustom.ini
+CUSTOM_INI = $(AP_WORK)\NWGNUcustom.ini
+endif
+
+ifndef VERBOSE
+.SILENT:
+endif
+
+#
+# Treat like an include
+#
+ifndef EnvironmentDefined
+
+#
+# simple macros for parsing makefiles
+#
+EOLIST:=
+EMPTY :=
+COMMA := ,
+SPACE := $(EMPTY) $(EMPTY)
+
+#
+# Base environment
+#
+
+# Try and handle case issues
+ifndef NOVELLLIBC
+ifdef NovellLibC
+NOVELLLIBC = $(NovellLibC)
+endif
+endif
+
+ifndef NOVELLLIBC
+NOVELLLIBC = C:/novell/ndk/libc
+endif
+
+# This is a placeholder
+# ifndef LDAPSDK
+# LDAPSDK = C:/novell/ndk/cldapsdk
+# endif
+
+ifndef METROWERKS
+METROWERKS = C:\Program Files\Metrowerks\CodeWarrior
+endif
+
+# If LM_LICENSE_FILE isn't defined, define a variable that can be used to
+# restart make with it defined
+ifndef LM_LICENSE_FILE
+NO_LICENSE_FILE = NO_LICENSE_FILE
+endif
+
+#
+# Set the Release type that you want to build, possible values are:
+#
+# debug - full debug switches are set
+# noopt - normal switches are set (default)
+# optimized - optimization switches are set
+
+ifdef reltype
+RELEASE=$(reltype)
+endif
+
+ifdef RELTYPE
+RELEASE=$(RELTYPE)
+endif
+
+ifdef debug
+RELEASE=debug
+endif
+
+ifdef DEBUG
+RELEASE=debug
+endif
+
+ifdef optimized
+RELEASE=optimized
+endif
+
+ifdef OPTIMIZED
+RELEASE=optimized
+endif
+
+ifndef RELEASE
+RELEASE = optimized
+endif
+
+ifeq "$(RELEASE)" "debug"
+OBJDIR = Debug
+endif
+
+ifeq "$(RELEASE)" "noopt"
+OBJDIR = Noopt
+endif
+
+ifeq "$(RELEASE)" "optimized"
+OBJDIR = Release
+endif
+
+#
+# Setup compiler information
+#
+
+# MetroWerks NLM tools
+CC = mwccnlm
+CPP = mwccnlm
+LINK = mwldnlm
+LIB = mwldnlm -type library -w nocmdline
+
+NOVI = $(NOVELLLIBC)\imports
+
+INCDIRS = $(NOVELLLIBC)\include;$(NOVELLLIBC)\include\nks;$(NOVELLLIBC)\include\winsock;
+
+DEFINES = -DNETWARE
+
+#
+# MetroWerks static Libraries
+
+CLIB3S = $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\Runtime\mwcrtl.lib
+MATH3S =
+PLIB3S = $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\MSL C++\MWCPP.lib
+
+# Base compile flags
+# and prefix or precompiled header added here.
+
+# The default flags are as follows:
+#
+# -c compile only, no link
+# -nosyspath treat #include <...> like #include "..."
+# -Cpp_exceptions off disable C++ exceptions
+# -RTTI off disable C++ run-time typing information
+# -align 4 align on 4 byte bounderies
+# -w nocmdline disable command-line driver/parser warnings
+# -proc PII generate code base on Pentium II instruction set
+# -inst mmx use MMX extensions
+
+CFLAGS = -c -nosyspath -Cpp_exceptions off -RTTI off -align 4 -w nocmdline -proc PII -inst mmx
+
+# -g generate debugging information
+# -O1 level 1 optimizations
+
+ifeq "$(RELEASE)" "debug"
+CFLAGS += -g -O1
+endif
+
+# -O4,p level 4 optimizations, optimize for speed
+ifeq "$(RELEASE)" "optimized"
+CFLAGS += -O4,p
+endif
+
+# -prefix pre_nw.h #include pre_nw.h for all files
+
+CFLAGS += -prefix pre_nw.h
+
+
+PATH:=$(PATH);$(METROWERKS)\bin;$(METROWERKS)\Other Metrowerks Tools\Command Line Tools
+
+#
+# Declare major project deliverables output directories here
+#
+
+ifdef DEST
+INSTALL = $(DEST)
+ifeq (\, $(findstring \,$(INSTALL)))
+INSTDIRS = $(DEST)
+endif
+endif
+
+ifdef dest
+INSTALL = $(dest)
+ifeq (\, $(findstring \,$(INSTALL)))
+INSTDIRS = $(dest)
+endif
+endif
+
+ifndef INSTALL
+INSTALL = $(AP_WORK)\..\Dist
+INSTDIRS = $(AP_WORK)\..\Dist
+endif
+
+INSTDEVDIRS := \
+ $(INSTDIRS) \
+ $(INSTALL)\Apache2\include \
+ $(INSTALL)\Apache2\lib \
+
+INSTDIRS += \
+ $(INSTALL)\Apache2 \
+ $(INSTALL)\Apache2\cgi-examples \
+ $(INSTALL)\Apache2\conf \
+ $(INSTALL)\Apache2\error \
+ $(INSTALL)\Apache2\error\include \
+ $(INSTALL)\Apache2\htdocs \
+ $(INSTALL)\Apache2\icons \
+ $(INSTALL)\Apache2\icons\small \
+ $(INSTALL)\Apache2\logs \
+ $(INSTALL)\Apache2\man \
+ $(INSTALL)\Apache2\manual \
+ $(INSTALL)\Apache2\manual\developer \
+ $(INSTALL)\Apache2\manual\faq \
+ $(INSTALL)\Apache2\manual\howto \
+ $(INSTALL)\Apache2\manual\images \
+ $(INSTALL)\Apache2\manual\misc \
+ $(INSTALL)\Apache2\manual\mod \
+ $(INSTALL)\Apache2\manual\platform \
+ $(INSTALL)\Apache2\manual\programs \
+ $(INSTALL)\Apache2\manual\search \
+ $(INSTALL)\Apache2\manual\ssl \
+ $(INSTALL)\Apache2\manual\vhosts \
+ $(INSTALL)\Apache2\modules \
+
+#
+# Declare Command and tool macros here
+#
+
+# Os2LibPath is an extra check to see if we are on NT
+ifdef Os2LibPath
+OS = Windows_NT
+endif
+
+ifeq "$(OS)" "Windows_NT"
+CMD=cmd /C
+CHK=cmd /C if exist
+CHKNOT=cmd /C if not exist
+DEL = del /F
+DELTREE = cmd /C rd /s/q
+WINNT=1
+else
+CMD=command /C
+CHK=command /C if exist
+CHKNOT=command /C if not exist
+DEL = del
+DELTREE = deltree /y
+endif
+
+
+#
+# Setup base C compiler flags
+#
+
+#
+# Common directories
+#
+
+STDMOD = $(AP_WORK)/modules
+NWOS = $(AP_WORK)/os/netware
+SERVER = $(AP_WORK)/server
+SRC = $(AP_WORK)
+APR = $(AP_WORK)/srclib/apr
+APRUTIL = $(AP_WORK)/srclib/apr-util
+SUPMOD = $(AP_WORK)/support
+PCRE = $(AP_WORK)/srclib/pcre
+APRTEST = $(AP_WORK)/srclib/apr/test
+HTTPD = $(AP_WORK)/modules/http
+XML = $(AP_WORK)/srclib/apr-util/xml
+
+#
+# Internal Libraries
+#
+
+APRLIB = $(APR)/$(OBJDIR)/aprlib.lib
+APRUTLIB = $(APRUTIL)/$(OBJDIR)/aprutil.lib
+STMODLIB = $(STDMOD)/$(OBJDIR)/stdmod.lib
+PCRELIB = $(PCRE/$(OBJDIR)/pcre.lib
+NWOSLIB = $(NWOS)/$(OBJDIR)/netware.lib
+SERVLIB = $(SERVER)/$(OBJDIR)/server.lib
+HTTPDLIB = $(HTTPD)/$(OBJDIR)/httpd.lib
+XMLLIB = $(XML)/$(OBJDIR)/xmllib.lib
+
+#
+# Additional general defines
+#
+VERSION = 2,0,0
+
+EnvironmentDefined = 1
+endif # ifndef EnvironmentDefined
+
+# This is always set so that it will show up in lower directories
+
+ifdef Path
+Path = $(PATH)
+endif
+
diff --git a/build/NWGNUhead.inc b/build/NWGNUhead.inc
new file mode 100644
index 0000000000..71855ab3cd
--- /dev/null
+++ b/build/NWGNUhead.inc
@@ -0,0 +1,103 @@
+#
+# Obtain the global build environment
+#
+
+include $(AP_WORK)\build\NWGNUenvironment.inc
+
+#
+# Define base targets and rules
+#
+
+TARGETS = libs nlms install clobber_libs clobber_nlms clean installdev
+
+.PHONY : $(TARGETS) default all help $(NO_LICENSE_FILE)
+
+# Here is where we will use the NO_LICENSE_FILE variable to see if we need to
+# restart the make with it defined
+
+ifdef NO_LICENSE_FILE
+
+default: NO_LICENSE_FILE
+
+all: NO_LICENSE_FILE
+
+install :: NO_LICENSE_FILE
+
+installdev :: NO_LICENSE_FILE
+
+NO_LICENSE_FILE :
+ $(MAKE) $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(METROWERKS)\license.dat"
+
+else # LM_LICENSE_FILE must be defined so use the real targets
+
+default: $(SUBDIRS) libs nlms
+
+all: $(SUBDIRS) libs nlms install
+
+$(TARGETS) :: $(SUBDIRS)
+
+install :: nlms $(INSTDIRS)
+
+installdev :: $(INSTDEVDIRS)
+
+$(INSTDIRS) ::
+ $(CHKNOT) $@\NUL mkdir $@
+
+$(INSTDEVDIRS) ::
+ $(CHKNOT) $@\NUL mkdir $@
+
+endif #NO_LICENSE_FILE check
+
+help :
+ @echo targets for RELEASE=$(RELEASE):
+ @echo (default) . . . . libs nlms
+ @echo all . . . . . . . does everything (libs nlms install)
+ @echo libs. . . . . . . builds all libs
+ @echo nlms. . . . . . . builds all nlms
+ @echo install . . . . . builds libs and nlms and copies install files to
+ @echo "$(INSTALL)"
+ @echo clean . . . . . . deletes $(OBJDIR) dirs, *.err, and *.map
+ @echo clobber_all . . . deletes all possible output from the make
+ @echo clobber_install . deletes all files in $(INSTALL)
+ @$(CMD) echo.
+ @echo Multiple targets can be used on a single nmake command line -
+ @echo (i.e. $(MAKE) clean all)
+ @$(CMD) echo.
+ @echo You can also specify RELEASE=debug, RELEASE=noopt, or RELEASE=optimized
+ @echo The default is RELEASE=optimized
+
+clobber_all :: clean clobber_install
+
+clobber_install ::
+ -$(DELTREE) $(INSTALL) 2>NUL
+
+#
+# build recursive targets
+#
+
+$(SUBDIRS) : FORCE
+ifneq "$(MAKECMDGOALS)" "clean"
+ $(CMD) echo.
+ @echo Building $(CURDIR)/$@
+endif
+ $(MAKE) -C $@ $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(LM_LICENSE_FILE)"
+ $(CMD) echo.
+
+FORCE:
+
+#
+# Standard targets
+#
+
+clean :: $(SUBDIRS)
+ @echo Cleaning up $(CURDIR)
+ -$(DELTREE) $(OBJDIR) 2> NUL
+ $(CHK) *.err $(DEL) *.err
+ $(CHK) *.map $(DEL) *.map
+ $(CHK) *.d $(DEL) *.d
+ $(CHK) *.tmp $(DEL) *.tmp
+ -$(DELTREE) $(OBJDIR) 2> NUL
+
+$(OBJDIR) ::
+ $(CHKNOT) $(OBJDIR)\nul mkdir $(OBJDIR)
+
diff --git a/build/NWGNUmakefile b/build/NWGNUmakefile
new file mode 100644
index 0000000000..deeef84fa2
--- /dev/null
+++ b/build/NWGNUmakefile
@@ -0,0 +1,80 @@
+#
+# Declare the sub-directories to be built here
+#
+
+SUBDIRS = \
+ $(EOLIST)
+
+#
+# Get the 'head' of the build environment. This includes default targets and
+# paths to tools
+#
+
+include $(AP_WORK)\build\NWGNUhead.inc
+
+#
+# build this level's files
+
+FILES_prebuild_headers = \
+ $(APR)/include/apr.h \
+ $(APRUTIL)/include/apu.h \
+ $(APRUTIL)/include/apr_ldap.h \
+ $(PCRE)/config.h \
+ $(PCRE)/pcre.h \
+ $(EOLIST)
+
+nlms :: $(NWOS)/httpd.imp
+
+$(NWOS)/httpd.imp : make_nw_export.awk nw_export.i
+ @echo Generating $(subst /,\,$@)
+ awk -f make_nw_export.awk nw_export.i | sort >$(NWOS)/httpd.imp
+
+nw_export.i : nw_export.inc $(FILES_prebuild_headers) cc.opt
+ @echo Generating $(subst /,\,$@)
+ $(CC) $< @cc.opt
+
+cc.opt : NWGNUmakefile $(AP_WORK)\build\NWGNUenvironment.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUhead.inc
+ $(CHK) $@ $(DEL) $@
+ @echo -P >> $@
+ @echo -EP >> $@
+ @echo -nosyspath >> $@
+ @echo -w nocmdline >> $@
+ @echo -DNETWARE >> $@
+ @echo -DCORE_PRIVATE >> $@
+ @echo -I..\include >> $@
+ @echo -I..\modules\http >> $@
+ @echo -I..\os\netware >> $@
+ @echo -I..\server\mpm\netware >> $@
+ @echo -I..\srclib\apr\include >> $@
+ @echo -I..\srclib\apr-util\include >> $@
+ @echo -ir $(NOVELLLIBC) >> $@
+
+$(APR)/include/%.h: $(subst /,\,$(APR))\include\%.hnw
+ @echo Creating $(subst /,\,$@)
+ copy $< $(subst /,\,$(APR))\include\$(@F)
+
+$(APRUTIL)/include/%.h: $(subst /,\,$(APRUTIL))\include\%.hnw
+ @echo Creating $(subst /,\,$@)
+ copy $< $(subst /,\,$(APRUTIL))\include\$(@F)
+
+$(PCRE)/%.h: $(subst /,\,$(PCRE))\%.hw
+ @echo Creating $(subst /,\,$@)
+ copy $< $(subst /,\,$(PCRE))\$(@F)
+
+#
+# You can use this target if all that is needed is to copy files to the
+# installation area
+#
+install :: nlms FORCE
+
+
+clean ::
+ $(CHK) nw_export.i $(DEL) nw_export.i
+ $(CHK) cc.opt $(DEL) cc.opt
+ $(CHK) $(subst /,\,$(APR))\include\apr.h $(DEL) $(subst /,\,$(APR))\include\apr.h
+ $(CHK) $(subst /,\,$(APRUTIL))\include\apu.h $(DEL) $(subst /,\,$(APRUTIL))\include\apu.h
+ $(CHK) $(subst /,\,$(APRUTIL))\include\apr_ldap.h $(DEL) $(subst /,\,$(APRUTIL))\include\apr_ldap.h
+ $(CHK) $(subst /,\,$(PCRE))\config.h $(DEL) $(subst /,\,$(PCRE))\config.h
+ $(CHK) $(subst /,\,$(PCRE))\pcre.h $(DEL) $(subst /,\,$(PCRE))\pcre.h
+ $(CHK) $(subst /,\,$(NWOS))\httpd.imp $(DEL) $(subst /,\,$(NWOS))\httpd.imp
+
diff --git a/build/NWGNUtail.inc b/build/NWGNUtail.inc
new file mode 100644
index 0000000000..015f197cbc
--- /dev/null
+++ b/build/NWGNUtail.inc
@@ -0,0 +1,287 @@
+#
+# This contains final targets and should be included at the end of any
+# NWGNUmakefile file
+#
+
+#
+# If we are going to create an nlm, make sure we have assigned variables to
+# use during the link.
+#
+echo NLM_NAME=$(NLM_NAME)
+ifndef NLM_NAME
+NLM_NAME = $(TARGET_nlm)
+endif
+
+ifndef NLM_DESCRIPTION
+NLM_DESCRIPTION = $(NLM_NAME)
+endif
+
+ifndef NLM_THREAD_NAME
+NLM_THREAD_NAME = $(NLM_NAME) Thread
+endif
+
+#
+# Create dependency lists based on the files available
+#
+
+CCOPT_DEPENDS = \
+ $(AP_WORK)\build\NWGNUhead.inc \
+ $(AP_WORK)\build\NWGNUenvironment.inc \
+ $(AP_WORK)\build\NWGNUtail.inc \
+ NWGNUmakefile \
+ $(CUSTOM_INI) \
+ $(EOLIST)
+
+CPPOPT_DEPENDS = \
+ $(AP_WORK)\build\NWGNUhead.inc \
+ $(AP_WORK)\build\NWGNUenvironment.inc \
+ $(AP_WORK)\build\NWGNUtail.inc \
+ NWGNUmakefile \
+ $(CUSTOM_INI) \
+ $(EOLIST)
+
+$(NLM_NAME)_LINKOPT_DEPENDS = \
+ $(TARGET_lib) \
+ $(AP_WORK)\build\NWGNUenvironment.inc \
+ NWGNUmakefile \
+ $(AP_WORK)\build\NWGNUtail.inc \
+ $(CUSTOM_INI) \
+ $(EOLIST)
+
+ifeq "$(words $(strip $(TARGET_lib)))" "1"
+LIB_NAME = $(basename $(notdir $(TARGET_lib)))
+$(LIB_NAME)_LIBLST_DEPENDS = \
+ $(FILES_lib_objs) \
+ $(AP_WORK)\build\NWGNUenvironment.inc \
+ NWGNUmakefile \
+ $(AP_WORK)\build\NWGNUtail.inc \
+ $(CUSTOM_INI) \
+ $(EOLIST)
+endif
+
+ifeq "$(wildcard NWGNU$(LIB_NAME))" "NWGNU$(LIB_NAME)"
+$(LIB_NAME)_LIBLST_DEPENDS += NWGNU$(LIB_NAME)
+endif
+
+ifeq "$(wildcard NWGNU$(NLM_NAME))" "NWGNU$(NLM_NAME)"
+$(NLM_NAME)_LINKOPT_DEPENDS += NWGNU$(NLM_NAME)
+CCOPT_DEPENDS += NWGNU$(NLM_NAME)
+CPPOPT_DEPENDS += NWGNU$(NLM_NAME)
+endif
+
+#
+# Generic compiler rules
+#
+
+$(OBJDIR)/%.o: %.c $(OBJDIR)\cc.opt
+ @echo Compiling $<
+ $(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
+
+$(OBJDIR)\cc.opt: $(CCOPT_DEPENDS)
+ $(CHK) $@ $(DEL) $@
+ @echo Generating $@
+ifneq "$(strip $(CFLAGS))" ""
+ @echo $(CFLAGS) >> $@
+endif
+ifneq "$(strip $(XCFLAGS))" ""
+ @echo $(XCFLAGS) >> $@
+endif
+ifneq "$(strip $(XINCDIRS))" ""
+ @echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
+endif
+ifneq "$(strip $(INCDIRS))" ""
+ @echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
+endif
+ifneq "$(strip $(DEFINES))" ""
+ @echo $(DEFINES) >> $@
+endif
+ifneq "$(strip $(XDEFINES))" ""
+ @echo $(XDEFINES) >> $@
+endif
+
+$(OBJDIR)/%.o: %.cpp $(OBJDIR)\cpp.opt
+ @echo Compiling $<
+ $(CPP) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cpp.opt
+
+$(OBJDIR)\cpp.opt: $(CPPOPT_DEPENDS)
+ $(CHK) $@ $(DEL) $@
+ @echo Generating $@
+ifneq "$(strip $(CFLAGS))" ""
+ @echo $(CFLAGS) >> $@
+endif
+ifneq "$(strip $(XCFLAGS))" ""
+ @echo $(XCFLAGS) >> $@
+endif
+ifneq "$(strip $(XINCDIRS))" ""
+ @echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
+endif
+ifneq "$(strip $(INCDIRS))" ""
+ @echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
+endif
+ifneq "$(strip $(DEFINES))" ""
+ @echo $(DEFINES) >> $@
+endif
+ifneq "$(strip $(XDEFINES))" ""
+ @echo $(XDEFINES) >> $@
+endif
+
+#
+# Rules to build libraries
+#
+
+# If we only have one target library then build it
+
+ifeq "$(words $(strip $(TARGET_lib)))" "1"
+
+$(TARGET_lib) : $(OBJDIR)\$(LIB_NAME)_lib.lst
+ @echo Generating $@
+ $(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
+ $(LIB) -o $(OBJDIR)\$(@F) @$?
+
+$(OBJDIR)\$(LIB_NAME)_lib.lst: $($(LIB_NAME)_LIBLST_DEPENDS)
+ $(CHK) $@ $(DEL) $@
+ @echo Generating $@
+ifneq "$(strip $(FILES_lib_objs))" ""
+ @echo $(foreach objfile,$(FILES_lib_objs),$(subst /,\,$(objfile)) ) >> $@
+endif
+
+else # We must have more than one target library so load the individual makefiles
+
+$(OBJDIR)/%.lib: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc FORCE
+ @echo Calling $<
+ $(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
+
+endif
+
+#
+# Rules to build nlms.
+#
+
+vpath libcpre.o $(NOVELLLIBC)\imports
+
+# If we only have one target NLM then build it
+ifeq "$(words $(strip $(TARGET_nlm)))" "1"
+
+$(TARGET_nlm) : $(FILES_nlm_objs) $(FILES_nlm_libs) $(OBJDIR)\$(NLM_NAME)_link.opt
+ @echo Linking $@
+ $(LINK) @$(OBJDIR)\$(NLM_NAME)_link.opt
+
+# This will force the link option file to be rebuilt if we change the
+# corresponding makefile
+
+$(OBJDIR)\$(NLM_NAME)_link.opt : $($(NLM_NAME)_LINKOPT_DEPENDS)
+ $(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
+ $(CHK) $(OBJDIR)\$(NLM_NAME)_link.def $(DEL) $(OBJDIR)\$(NLM_NAME)_link.def
+ @echo Generating $@
+ @echo -warnings off >> $@
+ @echo -zerobss >> $@
+ @echo -desc "$(NLM_DESCRIPTION)" >> $@
+ @echo -o $(TARGET_nlm) >> $@
+ifneq "$(FILE_nlm_copyright)" ""
+ @-type $(FILE_nlm_copyright) >> $@
+endif
+ifeq "$(RELEASE)" "debug"
+ @echo -g >> $@
+ @echo -sym internal >> $@
+ @echo -sym codeview4 >> $@
+ @echo -osym $(OBJDIR)\$(NLM_NAME).sym >> $@
+else
+ @echo -sym internal >> $@
+endif
+ @echo -screenname "Apache for NetWare" >> $@
+ifneq "$(NLM_VERSION)" ""
+ @echo -nlmversion=$(NLM_VERSION) >> $@
+else
+ @echo -nlmversion=$(VERSION) >> $@
+endif
+ @echo -l $(NWOS) >> $@
+ @echo -l $(AP)/$(OBJDIR) >> $@
+ @echo -l $(APR)/$(OBJDIR) >> $@
+ @echo -l $(APRUTIL)/$(OBJDIR) >> $@
+ @echo -l $(PCRE)/$(OBJDIR) >> $@
+ @echo -l $(HTTPD)/$(OBJDIR) >> $@
+ @echo -l $(SERVER)/$(OBJDIR) >> $@
+ @echo -l $(STDMOD)/$(OBJDIR) >> $@
+ @echo -l $(NWOS)/$(OBJDIR) >> $@
+ @echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/Runtime" >> $@
+ @echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/MSL C++" >> $@
+ @echo -l $(NOVELLLIBC)/imports >> $@
+ifneq "$(LDAPSDK)" ""
+ @echo -l $(LDAPSDK)/lib/nlm >> $@
+endif
+ @echo -l $(XML)/$(OBJDIR) >> $@
+ @echo -nodefaults >> $@
+ @echo -map $(OBJDIR)\$(NLM_NAME).map>> $@
+ @echo -threadname "$(NLM_THREAD_NAME)" >> $@
+ifneq "$(NLM_STACK_SIZE)" ""
+ @echo -stacksize $(subst K,000,$(subst k,K,$(strip $(NLM_STACK_SIZE)))) >> $@
+else
+ @echo -stacksize 64000 >> $@
+endif
+ifneq "$(NLM_ENTRY_SYM)" ""
+ @echo -entry $(NLM_ENTRY_SYM) >> $@
+endif
+ifneq "$(NLM_EXIT_SYM)" ""
+ @echo -exit $(NLM_EXIT_SYM) >> $@
+endif
+ifneq "$(NLM_CHECK_SYM)" ""
+ @echo -check $(NLM_CHECK_SYM) >> $@
+endif
+ifneq "$(NLM_FLAGS)" ""
+ @echo -flags $(NLM_FLAGS) >> $@
+endif
+ifneq "$(strip $(FILES_nlm_objs))" ""
+ @echo $(foreach objfile,$(strip $(FILES_nlm_objs)),$(subst /,\,$(objfile))) >> $@
+endif
+ifneq "$(FILES_nlm_libs)" ""
+ @echo $(foreach libfile, $(notdir $(strip $(FILES_nlm_libs))),-l$(subst /,\,$(libfile))) >> $@
+endif
+ @echo -commandfile $(OBJDIR)\$(NLM_NAME)_link.def >> $@
+ifneq "$(FILE_nlm_msg)" ""
+ @echo Messages $(FILE_nlm_msg) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+ifneq "$(FILE_nlm_hlp)" ""
+ @echo Help $(FILE_nlm_hlp) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+ifneq "$(FILES_nlm_modules)" ""
+ @echo module $(foreach module,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_modules))),$(subst /,\,$(module))) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+ifneq "$(FILES_nlm_Ximports)" ""
+ @echo Import $(foreach import,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_Ximports))),$(subst /,\,$(import))) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+ifneq "$(FILES_nlm_exports)" ""
+ @echo Export $(foreach export,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_exports))),$(subst /,\,$(export))) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+ifneq "$(strip $(XLFLAGS))" ""
+ @echo $(XLFLAGS) >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+
+# if APACHE_UNIPROC is defined, don't include XDCData
+ifndef APACHE_UNIPROC
+ifneq "$(string $(XDCDATA))" ""
+ @echo XDCData $(XDCDATA) >> $(OBJDIR)\$(NLM_NAME)_link.def
+else
+ @echo XDCData $(NWOS)\apache.xdc >> $(OBJDIR)\$(NLM_NAME)_link.def
+endif
+endif
+
+else # more than one target so look for individual makefiles.
+
+# Only include these if NO_LICENSE_FILE isn't set to prevent excessive
+# recursion
+
+ifndef NO_LICENSE_FILE
+
+$(OBJDIR)/%.nlm: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc $(CUSTOM_INI) FORCE
+ @echo Calling $<
+ $(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
+ $(CMD) echo.
+
+else
+
+$(TARGET_nlm):
+
+endif # NO_LICENSE_FILE
+
+endif
+