#
# Declare the sub-directories to be built here
#

SUBDIRS = \
		build \
		$(APU_WORK) \
		$(EOLIST) 

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

include $(APR_WORK)\build\NWGNUhead.inc

#
# build this level's files

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

#
# These directories will be at the beginning of the include list, followed by
# INCDIRS
#
XINCDIRS	+= \
			$(APR_WORK)/include \
			$(APR_WORK)/include/arch/NetWare \
			$(APR_WORK)/include/arch/unix \
			$(APR_WORK)/memory/unix \
			$(APR_WORK)/random/unix \
			$(APRUTIL)/xml \
			$(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		= aprlib

#
# This is used by the link '-desc ' directive. 
# If left blank, NLM_NAME will be used.
#
NLM_DESCRIPTION	= Apache Portability Runtime Library $(VERSION_STR)

#
# This is used by the '-threadname' directive.  If left blank,
# NLM_NAME Thread will be used.
#
NLM_THREAD_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	= 

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

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

#
# 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		= AUTOUNLOAD, PSEUDOPREEMPTION
 
#
# 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)/aprlib.nlm \
	$(EOLIST)

#
# If there is an LIB target, put it here
#
TARGET_lib = \
	$(OBJDIR)/aprlib.lib \
	$(EOLIST)

#
# These are the OBJ files needed to create the NLM target above.
# Paths must all use the '/' character
#
FILES_nlm_objs = \
	$(OBJDIR)/libprews.o \
	$(EOLIST)

#
# 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 = \
	libcpre.o \
	$(APRLIB) \
	$(APRUTLIB) \
	$(XMLLIB) \
	$(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 \
	ws2_32 \
	$(EOLIST)
	
#If the LDAP support is defined then add the auto-load modules
ifneq "$(LDAPSDK)" ""
FILES_nlm_modules += \
	lldapsdk \
	lldapssl \
	lldapx \
	$(EOLIST)
endif
 

#
# 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 $(NWOS)\copyright.txt.
#
FILE_nlm_copyright =

#
# Any additional imports go here
#
FILES_nlm_Ximports = \
	@libc.imp \
	@ws2nlm.imp \
	@netware.imp \
	WSAStartupRTags \
	WSACleanupRTag \
	$(EOLIST)

#If the LDAP support is defined then add the imports
ifneq "$(LDAPSDK)" ""
FILES_nlm_Ximports += \
	@$(LDAPSDK)/imports/lldapsdk.imp \
	@$(LDAPSDK)/imports/lldapssl.imp \
	$(EOLIST)
endif
 
#   
# Any symbols exported to here
#
FILES_nlm_exports = \
	@aprlib.imp	\
	$(EOLIST)
	
#   
# These are the OBJ files needed to create the LIB target above.
# Paths must all use the '/' character
#
FILES_lib_objs = \
	$(OBJDIR)/apr_atomic.o \
	$(OBJDIR)/apr_cpystrn.o \
	$(OBJDIR)/apr_fnmatch.o \
	$(OBJDIR)/apr_getpass.o \
	$(OBJDIR)/apr_hash.o \
	$(OBJDIR)/apr_pools.o \
	$(OBJDIR)/apr_random.o \
	$(OBJDIR)/apr_snprintf.o \
	$(OBJDIR)/apr_strings.o \
	$(OBJDIR)/apr_strnatcmp.o \
	$(OBJDIR)/apr_strtok.o \
	$(OBJDIR)/apr_tables.o \
	$(OBJDIR)/charset.o \
	$(OBJDIR)/copy.o \
	$(OBJDIR)/common.o \
	$(OBJDIR)/dir.o \
	$(OBJDIR)/dso.o \
	$(OBJDIR)/errorcodes.o \
	$(OBJDIR)/env.o \
	$(OBJDIR)/fileacc.o \
	$(OBJDIR)/filedup.o \
	$(OBJDIR)/filepath.o \
	$(OBJDIR)/filepath_util.o \
	$(OBJDIR)/filestat.o \
	$(OBJDIR)/filesys.o \
	$(OBJDIR)/flock.o \
	$(OBJDIR)/fullrw.o \
	$(OBJDIR)/getopt.o \
	$(OBJDIR)/groupinfo.o \
	$(OBJDIR)/inet_pton.o \
	$(OBJDIR)/inet_ntop.o \
	$(OBJDIR)/libprews.o \
	$(OBJDIR)/mktemp.o \
	$(OBJDIR)/mmap.o \
	$(OBJDIR)/open.o \
	$(OBJDIR)/pipe.o \
	$(OBJDIR)/otherchild.o \
	$(OBJDIR)/poll.o \
	$(OBJDIR)/proc.o \
	$(OBJDIR)/procsup.o \
	$(OBJDIR)/proc_mutex.o \
	$(OBJDIR)/rand.o \
	$(OBJDIR)/readwrite.o \
	$(OBJDIR)/seek.o \
	$(OBJDIR)/sendrecv.o \
	$(OBJDIR)/sha2.o \
	$(OBJDIR)/sha2_glue.o \
	$(OBJDIR)/shm.o \
	$(OBJDIR)/signals.o \
	$(OBJDIR)/sockaddr.o \
	$(OBJDIR)/sockets.o \
	$(OBJDIR)/sockopt.o \
	$(OBJDIR)/start.o \
	$(OBJDIR)/tempdir.o \
	$(OBJDIR)/thread.o \
	$(OBJDIR)/thread_cond.o \
	$(OBJDIR)/thread_mutex.o \
	$(OBJDIR)/thread_rwlock.o \
	$(OBJDIR)/threadpriv.o \
	$(OBJDIR)/time.o \
	$(OBJDIR)/timestr.o \
	$(OBJDIR)/userinfo.o \
	$(OBJDIR)/version.o \
	$(OBJDIR)/waitio.o \
	$(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 $(INSTDIRS) FORCE
	copy $(OBJDIR)\aprlib.nlm                          $(INSTALLBASE)\*.*
ifndef DEST
	-copy $(subst /,\,$(APR))\STATUS                   $(INSTALLBASE)\*.apr
	-copy $(subst /,\,$(APR))\LICENSE                  $(INSTALLBASE)\*
	-copy $(subst /,\,$(APR))\CHANGES                  $(INSTALLBASE)\*.apr
	-copy $(subst /,\,$(APRUTIL))\STATUS               $(INSTALLBASE)\*.apu
	-copy $(subst /,\,$(APRUTIL))\CHANGES              $(INSTALLBASE)\*.apu
	@echo rem copying the docs directories > xc.bat
	@echo xcopy docs $(INSTALLBASE)\docs\*.* $(XCOPYSW) >> xc.bat
	$(CMD) xc.bat
	$(DEL) xc.bat
endif	
	
$(INSTDIRS) ::
	$(CHKNOT) $@\NUL mkdir $@

ifndef DEST
installdev :: $(INSTDEVDIRS) FORCE
	-copy $(subst /,\,$(APR))\include\*.h               $(INSTALLBASE)\include\*.*
	-copy $(subst /,\,$(APRUTIL))\include\*.h           $(INSTALLBASE)\include\*.*
	-copy $(subst /,\,$(APR))\*.imp                     $(INSTALLBASE)\lib\*.*
	-copy $(subst /,\,$(APR))\misc\netware\*.xdc        $(INSTALLBASE)\lib\*.*
	
$(INSTDEVDIRS) ::
	$(CHKNOT) $@\NUL mkdir $@
endif	

#
# Any specialized rules here
#

vpath %.c atomic/netware:strings:tables:passwd:lib:time/unix
vpath %.c file_io/unix:locks/netware:misc/netware:misc/unix:threadproc/netware
vpath %.c dso/netware:memory/unix:mmap/unix:user/netware:network_io/win32
vpath %.c network_io/unix:poll/unix:shmem\unix:support/unix:random/unix

$(OBJDIR)/%.o: file_io/netware/%.c $(OBJDIR)\$(NLM_NAME)_cc.opt
	@echo Compiling $<
	$(CC) file_io\netware\$(<F) -cwd source -o=$(OBJDIR)\$(@F) @$(OBJDIR)\$(NLM_NAME)_cc.opt

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

include $(APR_WORK)\build\NWGNUtail.inc


