#
# 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_berkeleydb.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)\$(NLM_NAME)_cc.opt
	@echo Compiling $<
	$(CC) buckets\$(<F) -o=$(OBJDIR)\$(@F) @$(OBJDIR)\$(NLM_NAME)_cc.opt

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

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

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

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

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

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

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

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

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

$(OBJDIR)/%.o: xml/%.c $(OBJDIR)\$(NLM_NAME)_cc.opt
	@echo Compiling $<
	$(CC) xml\$(<F) -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


