#
# Make sure all needed macro's are defined
#

#
# Get the 'head' of the build environment if necessary.  This includes default
# targets and paths to tools
#

ifndef EnvironmentDefined
include $(APR_WORK)/build/NWGNUhead.inc
endif

#
# These directories will be at the beginning of the include list, followed by
# INCDIRS
#
XINCDIRS	+= \
			$(APR)/include \
			$(APR)/include/arch/netware \
			$(EOLIST)

#
# These flags will come after CFLAGS
#
XCFLAGS		+= \
			$(EOLIST)

#
# These defines will come after DEFINES
#
XDEFINES	+= \
			$(EOLIST)

#
# These flags will be added to the link.opt file
#
XLFLAGS		+= \
			$(EOLIST)

#
# These values will be appended to the correct variables based on the value of
# RELEASE
#
ifeq "$(RELEASE)" "debug"
XINCDIRS	+= \
			$(EOLIST)

XCFLAGS		+= \
			$(EOLIST)

XDEFINES	+= \
			$(EOLIST)

XLFLAGS		+= \
			$(EOLIST)
endif

ifeq "$(RELEASE)" "noopt"
XINCDIRS	+= \
			$(EOLIST)

XCFLAGS		+= \
			$(EOLIST)

XDEFINES	+= \
			$(EOLIST)

XLFLAGS		+= \
			$(EOLIST)
endif

ifeq "$(RELEASE)" "release"
XINCDIRS	+= \
			$(EOLIST)

XCFLAGS		+= \
			$(EOLIST)

XDEFINES	+= \
			$(EOLIST)

XLFLAGS		+= \
			$(EOLIST)
endif

#
# These are used by the link target if an NLM is being generated
# This is used by the link 'name' directive to name the nlm.  If left blank
# TARGET_nlm (see below) will be used.
#
NLM_NAME	= aprtest
#
# This is used by the link '-desc ' directive. 
# If left blank, NLM_NAME will be used.
#
NLM_DESCRIPTION	= NLM is to test the apr layer

#
# This is used by the '-threadname' directive.  If left blank,
# NLM_NAME Thread will be used.
#
NLM_THREAD_NAME	= $(NLM_NAME)

#
# This is used by the '-screenname' directive.  If left blank,
# 'Apache for NetWare' Thread will be used.
#
NLM_SCREEN_NAME	= $(NLM_NAME)

#
# If this is specified, it will override VERSION value in 
# $(APR_WORK)/build/NWGNUenvironment.inc
#
NLM_VERSION	=

#
# If this is specified, it will override the default of 64K
#
NLM_STACK_SIZE	= 524288

#
# If this is specified it will be used by the link '-entry' directive
#
NLM_ENTRY_SYM	=

#
# If this is specified it will be used by the link '-exit' directive
#
NLM_EXIT_SYM	=

#
# If this is specified it will be used by the link '-check' directive
#
NLM_CHECK_SYM	=

#
# If this is specified it will be used by the link '-flags' directive
#
NLM_FLAGS	=
 
#
# If this is specified it will be linked in with the XDCData option in the def 
# file instead of the default of $(APR)/misc/netware/apache.xdc.  XDCData can 
# be disabled by setting APACHE_UNIPROC in the environment
#
XDCDATA		= 

#
# Declare all target files (you must add your files here)
#

#
# If there is an NLM target, put it here
#
TARGET_nlm = \
	$(OBJDIR)/$(NLM_NAME).nlm \
	$(EOLIST)

#
# If there is an LIB target, put it here
#
TARGET_lib = \
	$(EOLIST)

#
# These are the OBJ files needed to create the NLM target above.
# Paths must all use the '/' character
#

FILES_nlm_objs = \
	$(OBJDIR)/abts.o \
	$(OBJDIR)/testargs.o \
	$(OBJDIR)/testatomic.o \
	$(OBJDIR)/testbase64.o \
	$(OBJDIR)/testbuckets.o \
	$(OBJDIR)/testcond.o \
	$(OBJDIR)/testcrypto.o \
	$(OBJDIR)/testdate.o \
	$(OBJDIR)/testdbd.o \
	$(OBJDIR)/testdbm.o \
	$(OBJDIR)/testdir.o \
	$(OBJDIR)/testdup.o \
	$(OBJDIR)/testdso.o \
	$(OBJDIR)/testenv.o \
	$(OBJDIR)/testescape.o \
	$(OBJDIR)/testfilecopy.o \
	$(OBJDIR)/testfileinfo.o \
	$(OBJDIR)/testfile.o \
	$(OBJDIR)/testflock.o \
	$(OBJDIR)/testfmt.o \
	$(OBJDIR)/testfnmatch.o \
	$(OBJDIR)/testglobalmutex.o \
	$(OBJDIR)/testhash.o \
	$(OBJDIR)/testhooks.o \
	$(OBJDIR)/testipsub.o \
	$(OBJDIR)/testlfs.o \
	$(OBJDIR)/testlfsabi.o \
	$(OBJDIR)/testlfsabi32.o \
	$(OBJDIR)/testlfsabi64.o \
	$(OBJDIR)/testlock.o \
	$(OBJDIR)/testmd4.o \
	$(OBJDIR)/testmd5.o \
	$(OBJDIR)/testmmap.o \
	$(OBJDIR)/testmemcache.o \
	$(OBJDIR)/testnames.o \
	$(OBJDIR)/testoc.o \
	$(OBJDIR)/testpass.o \
	$(OBJDIR)/testpath.o \
	$(OBJDIR)/testpipe.o \
	$(OBJDIR)/testpoll.o \
	$(OBJDIR)/testpools.o \
	$(OBJDIR)/testproc.o \
	$(OBJDIR)/testprocmutex.o \
	$(OBJDIR)/testqueue.o \
	$(OBJDIR)/testreslist.o \
	$(OBJDIR)/testrand.o \
	$(OBJDIR)/testrmm.o \
	$(OBJDIR)/testshm.o \
	$(OBJDIR)/testskiplist.o \
	$(OBJDIR)/testsleep.o \
	$(OBJDIR)/testsock.o \
	$(OBJDIR)/testsockets.o \
	$(OBJDIR)/testsockopt.o \
	$(OBJDIR)/teststr.o \
	$(OBJDIR)/teststrmatch.o \
	$(OBJDIR)/teststrnatcmp.o \
	$(OBJDIR)/testtable.o \
	$(OBJDIR)/testtemp.o \
	$(OBJDIR)/testthread.o \
	$(OBJDIR)/testtime.o \
	$(OBJDIR)/testud.o \
	$(OBJDIR)/testuri.o \
	$(OBJDIR)/testuser.o \
	$(OBJDIR)/testutil.o \
	$(OBJDIR)/testuuid.o \
	$(OBJDIR)/testvsn.o \
	$(OBJDIR)/testxml.o \
	$(OBJDIR)/testxlate.o \
	$(OBJDIR)/nw_misc.o \
	$(EOLIST) 

# Pending tests

#
# These are the LIB files needed to create the NLM target above.
# These will be added as a library command in the link.opt file.
#
FILES_nlm_libs = \
	$(PRELUDE) \
	$(EOLIST)

#
# These are the modules that the above NLM target depends on to load.
# These will be added as a module command in the link.opt file.
#
FILES_nlm_modules = \
	Libc \
	APRLIB \
	$(EOLIST)

#
# If the nlm has a msg file, put it's path here
#
FILE_nlm_msg =
 
#
# If the nlm has a hlp file put it's path here
#
FILE_nlm_hlp =

#
# If this is specified, it will override the default copyright.
#
FILE_nlm_copyright =

#
# Any additional imports go here
#
FILES_nlm_Ximports = \
	@$(APR)/aprlib.imp \
	@$(NOVI)/libc.imp \
	$(EOLIST)
 
# Include the Winsock imports if Winsock is being used
ifndef USE_STDSOCKETS
FILES_nlm_Ximports +=  \
	@$(NOVI)/ws2nlm.imp \
	$(EOLIST)
FILES_nlm_imports +=  \
	WSAStartupRTags \
	WSACleanupRTag \
	$(EOLIST)
endif

#   
# Any symbols exported to here
#
FILES_nlm_exports = \
	$(EOLIST)

#   
# These are the OBJ files needed to create the LIB target above.
# Paths must all use the '/' character
#
FILES_lib_objs = \
	$(EOLIST)

#
# implement targets and dependancies (leave this section alone)
#

libs :: $(OBJDIR) $(TARGET_lib)

nlms :: libs $(TARGET_nlm)

#
# Updated this target to create necessary directories and copy files to the 
# correct place.  (See $(APR_WORK)/build/NWGNUhead.inc for examples)
#
install :: nlms FORCE

#
# Any specialized rules here
#


#
# Include the 'tail' makefile that has targets that depend on variables defined
# in this makefile
#

include $(APRBUILD)/NWGNUtail.inc

