#
# Top-level Makefile for APRUTIL
#
CPP = @CPP@

srcdir = @srcdir@
VPATH = @srcdir@

INCLUDES = @APR_INCLUDES@ @APRUTIL_INCLUDES@ @APRUTIL_PRIV_INCLUDES@

TARGET_LIB = libaprutil.la
INSTALL_SUBDIRS = @APR_XML_DIR@

TARGETS = delete-lib $(TARGET_LIB) delete-exports aprutil.exp export_vars.h

# bring in rules.mk for standard functionality
@INCLUDE_RULES@

SUBDIRS = buckets crypto dbm encoding hooks ldap uri xml misc
CLEAN_SUBDIRS = . test

CLEAN_TARGETS =
DISTCLEAN_TARGETS = config.cache config.log config.status libtool \
	include/private/apu_config.h include/private/apu_private.h \
	include/private/apu_select_dbm.h include/apu.h export_vars.sh \
	aprutil.exp apu-config
EXTRACLEAN_TARGETS = configure aclocal.m4 include/private/apu_config.h.in \
	exports.c export_vars.h

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
libdir=@libdir@
includedir=@includedir@
top_srcdir=@top_srcdir@

EXPORT_FILES = $(top_srcdir)/include/*.h

delete-lib:
	@if test -f $(TARGET_LIB); then \
	    objects="`find $(SUBDIRS) -name expat -prune -o -name '*.@so_ext@' -a -newer $(TARGET_LIB) -print`" ; \
	    if test -n "$$objects"; then \
		echo Found newer objects. Will relink $(TARGET_LIB). ; \
		echo $(RM) -f $(TARGET_LIB) ; \
		$(RM) -f $(TARGET_LIB) ; \
	    fi; \
	fi

install: $(TARGET_LIB)
	if [ ! -d $(includedir) ]; then \
	    @APR_SOURCE_DIR@/build/mkdir.sh $(includedir); \
	fi; \
	cp include/*.h $(includedir); \
	if [ ! -d $(libdir) ]; then \
	    @APR_SOURCE_DIR@/build/mkdir.sh $(libdir); \
	fi; \
	$(LIBTOOL) --mode=install cp $(TARGET_LIB) $(libdir); \
	$(LIBTOOL) --mode=install cp aprutil.exp $(libdir); \
	if [ ! -d $(bindir) ]; then \
		@APR_SOURCE_DIR@/build/mkdir.sh $(bindir); \
	fi; \
	$(LIBTOOL) --mode=install cp apu-config $(bindir); \
	chmod 755 $(bindir)/apu-config; \
	list='$(INSTALL_SUBDIRS)'; for i in $$list; do \
		( cd $$i ; $(MAKE) install ); \
	done

$(TARGET_LIB):
	@objects="`find $(SUBDIRS) -name expat -prune -o -name 'gen_uri_delims.@so_ext@' -prune -o -name '*.@so_ext@' -print`"; \
	    tmpcmd="$(LINK) @lib_target@ @EXTRA_OS_LINK@"; \
	    echo $$tmpcmd; \
	    $$tmpcmd

delete-exports:
	@if test -f aprutil.exp; then \
	    headers="`find include/*.h -newer aprutil.exp -print`" ; \
	    if test -n "$$headers"; then \
		echo Found newer headers. Will rebuild aprutil.exp. ; \
		echo $(RM) -f aprutil.exp ; \
		$(RM) -f aprutil.exp ; \
	    fi \
	fi

exports.c:
	$(AWK) -f @APR_SOURCE_DIR@/build/make_exports.awk $(EXPORT_FILES) > $@

export_vars.h:
	$(AWK) -f @APR_SOURCE_DIR@/build/make_var_export.awk $(EXPORT_FILES) > $@

aprutil.exp: exports.c export_vars.h
	@echo "#! libaprutil.so" > $@
	@echo "* This file was AUTOGENERATED at build time." >> $@
	@echo "* Please do not edit by hand." >> $@
	$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/\1/' >> $@
	$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@

docs:
	mkdir ./docs
	perl @APR_SOURCE_DIR@/build/scandoc.pl -i./build/default.pl -p./docs/ ./include/*.h


.PHONY: delete-lib delete-exports
