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

SUBDIRS = \
	xml \
	$(EOLIST) 

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

include $(APR_WORK)\build\NWGNUhead.inc

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

#
# These directories will be at the beginning of the include list, followed by
# INCDIRS
#
XINCDIRS	+= \
			$(APR)/include \
			$(APR)/include/arch/NetWare \
			$(APRUTIL)/include \
			$(APRUTIL)/uri \
			$(APRUTIL)/dbm/sdbm \
			$(APRUTIL)/include/private \
			$(APRUTIL)/xml/expat/lib \
			$(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		= 

#
# This is used by the link '-desc ' directive. 
# If left blank, NLM_NAME will be used.
#
NLM_DESCRIPTION	= 

#
# 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	= 

#
# 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 = \
	$(EOLIST)

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

#
# These are the OBJ files needed to create the NLM target above.
# Paths must all use the '/' character
#
FILES_nlm_objs = \
	$(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 = \
	$(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 = \
	$(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 $(NWOS)\copyright.txt.
#
FILE_nlm_copyright =

#
# Any additional imports go here
#
FILES_nlm_Ximports = \
	$(EOLIST)
 
#   
# 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 = \
	$(OBJDIR)/apr_base64.o \
	$(OBJDIR)/apr_brigade.o \
	$(OBJDIR)/apr_buckets.o \
	$(OBJDIR)/apr_buckets_alloc.o \
	$(OBJDIR)/apr_buckets_eos.o \
	$(OBJDIR)/apr_buckets_file.o \
	$(OBJDIR)/apr_buckets_flush.o \
	$(OBJDIR)/apr_buckets_heap.o \
	$(OBJDIR)/apr_buckets_mmap.o \
	$(OBJDIR)/apr_buckets_pipe.o \
	$(OBJDIR)/apr_buckets_pool.o \
	$(OBJDIR)/apr_buckets_refcount.o \
	$(OBJDIR)/apr_buckets_simple.o \
	$(OBJDIR)/apr_buckets_socket.o \
	$(OBJDIR)/apr_date.o \
	$(OBJDIR)/apr_dbm.o \
	$(OBJDIR)/apr_dbm_sdbm.o \
	$(OBJDIR)/apr_hooks.o \
	$(OBJDIR)/apr_md4.o \
	$(OBJDIR)/apr_md5.o \
	$(OBJDIR)/apr_queue.o \
	$(OBJDIR)/apr_reslist.o \
	$(OBJDIR)/apr_rmm.o \
	$(OBJDIR)/apr_sha1.o \
	$(OBJDIR)/apu_version.o \
	$(OBJDIR)/getuuid.o \
	$(OBJDIR)/uuid.o \
	$(OBJDIR)/apr_strmatch.o \
	$(OBJDIR)/apr_uri.o \
	$(OBJDIR)/sdbm.o \
	$(OBJDIR)/sdbm_hash.o \
	$(OBJDIR)/sdbm_lock.o \
	$(OBJDIR)/sdbm_pair.o \
	$(OBJDIR)/xlate.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 FORCE

#
# Any specialized rules here
#

$(OBJDIR)/%.o: buckets/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) buckets\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
	
$(OBJDIR)/%.o: crypto/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) crypto\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: dbm/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) dbm\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt	

$(OBJDIR)/%.o: dbm/sdbm/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) dbm\sdbm\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: encoding/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) encoding\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: hooks/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) hooks\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: misc/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) misc\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: strmatch/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) strmatch\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: uri/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) uri\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt

$(OBJDIR)/%.o: xlate/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) xlate\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
	
$(OBJDIR)/%.o: xml/%.c $(OBJDIR)\cc.opt
	@echo Compiling $<
	$(CC) xml\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt


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

include $(APR_WORK)\build\NWGNUtail.inc


