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

# gets substituted into some targets
APRUTIL_MAJOR_VERSION=@APRUTIL_MAJOR_VERSION@
APRUTIL_DOTTED_VERSION=@APRUTIL_DOTTED_VERSION@

srcdir = @srcdir@
VPATH = @srcdir@

INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@
APRUTIL_LDFLAGS = @APRUTIL_LDFLAGS@
APRUTIL_LIBS = @APRUTIL_LIBS@

TARGET_LIB = lib@APRUTIL_LIBNAME@.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 strmatch xlate
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/apr_ldap.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=@abs_srcdir@
top_blddir=@abs_builddir@

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 $(DESTDIR)$(includedir) ]; then \
	    @APR_SOURCE_DIR@/build/mkdir.sh $(DESTDIR)$(includedir); \
	fi;
	cp -p $(top_srcdir)/include/*.h $(DESTDIR)$(includedir)

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

$(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 && touch $@

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' >> $@

dox:
	doxygen $(top_srcdir)/docs/doxygen.conf

check: $(TARGET_LIB)
	(cd test && $(MAKE) check)


.PHONY: delete-lib delete-exports
.NOTPARALLEL: delete-lib delete-exports
