
srcdir=@srcdir@
VPATH=@srcdir@
top_srcdir=@apr_srcdir@
top_blddir=@apr_builddir@

#
# APR (Apache Portable Runtime) library Makefile.
#
CPP = @CPP@

# get substituted into some targets
APR_MAJOR_VERSION=@APR_MAJOR_VERSION@

#
# Macros for supporting directories
#
INCDIR=./include
OSDIR=$(top_srcdir)/include/arch/@OSDIR@
DEFOSDIR=$(INCDIR)/arch/@DEFAULT_OSDIR@
INCLUDES=-I$(INCDIR) -I$(OSDIR) -I$(DEFOSDIR) -I$(top_srcdir)/include/arch/@DEFAULT_OSDIR@ -I$(top_srcdir)/include -I$(top_srcdir)/include/private -I$(top_blddir)/include/private

#
# Macros for target determination
#
CLEAN_SUBDIRS= test
INSTALL_SUBDIRS=@INSTALL_SUBDIRS@

TARGET_LIB = lib@APR_LIBNAME@.la
APR_PCFILE = apr-$(APR_MAJOR_VERSION).pc
APR_CONFIG = apr-$(APR_MAJOR_VERSION)-config
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

EXTRA_OBJECTS = @EXTRA_OBJECTS@
APR_DSO_MODULES = @APR_DSO_MODULES@
LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(APRUTIL_LDFLAGS) -release $(APR_MAJOR_VERSION) -module -rpath $(APR_DSO_LIBDIR)
APR_DSO_LIBDIR = @APR_DSO_LIBDIR@
APRUTIL_EXPORT_LIBS = @APRUTIL_EXPORT_LIBS@

#
# Rules for building specific targets, starting with 'all' for
# building the entire package.
#
TARGETS = $(TARGET_LIB) $(APR_DSO_MODULES) \
	include/private/apr_escape_test_char.h apr.exp apr-config.out build/apr_rules.out

LT_VERSION = @LT_VERSION@

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

CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs \
	build/apr_rules.out tools/gen_test_char@EXEEXT@ \
	tools/gen_test_char.o tools/gen_test_char.lo \
	include/private/apr_escape_test_char.h
DISTCLEAN_TARGETS = config.cache config.log config.status \
	include/apr.h include/arch/unix/apr_private.h \
	libtool $(APR_CONFIG) build/apr_rules.mk apr.pc \
	build/pkg/pkginfo
EXTRACLEAN_TARGETS = configure aclocal.m4 include/arch/unix/apr_private.h.in \
	build-outputs.mk build/ltcf-c.sh build/aclocal.m4 \
	build/ltconfig build/ltmain.sh \
	build/argz.m4 build/libtool.m4 build/ltoptions.m4 \
	build/ltsugar.m4 build/ltversion.m4 build/lt~obsolete.m4

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
libdir=@libdir@
includedir=@includedir@
installbuilddir=@installbuilddir@

LDADD_dbd_pgsql = @LDADD_dbd_pgsql@
LDADD_dbd_oracle = @LDADD_dbd_oracle@
LDADD_dbd_sqlite2 = @LDADD_dbd_sqlite2@
LDADD_dbd_sqlite3 = @LDADD_dbd_sqlite3@
LDADD_dbd_mysql = @LDADD_dbd_mysql@
LDADD_dbd_odbc = @LDADD_dbd_odbc@
LDADD_dbm_db = @LDADD_dbm_db@
LDADD_dbm_gdbm = @LDADD_dbm_gdbm@
LDADD_dbm_ndbm = @LDADD_dbm_ndbm@
LDADD_crypto_openssl = @LDADD_crypto_openssl@
LDADD_crypto_nss = @LDADD_crypto_nss@
LDADD_crypto_commoncrypto = @LDADD_crypto_commoncrypto@

# Create apr-config script suitable for the install tree
apr-config.out: $(APR_CONFIG)
	sed 's,^\(location=\).*$$,\1installed,' < $(APR_CONFIG) > $@

# Create apr_rules.mk suitable for the install tree
build/apr_rules.out: build/apr_rules.mk
	sed -e 's,^\(apr_build.*=\).*$$,\1$(installbuilddir),' -e 's,^\(top_build.*=\).*$$,\1$(installbuilddir),' < build/apr_rules.mk > $@

install: install-modules $(TARGETS)
	$(APR_MKDIR) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(installbuilddir) \
		     $(DESTDIR)$(libdir)/pkgconfig $(DESTDIR)$(includedir)
	$(INSTALL_DATA) $(top_blddir)/include/apr.h $(DESTDIR)$(includedir)
	$(INSTALL_DATA) $(top_srcdir)/include/apu.h $(DESTDIR)$(includedir)
	for f in $(top_srcdir)/include/apr_*.h $(top_srcdir)/include/apu_*.h; do \
	    $(INSTALL_DATA) $${f} $(DESTDIR)$(includedir); \
	done
	for f in $(top_blddir)/include/apu_*.h; do \
	    $(INSTALL_DATA) $${f} $(DESTDIR)$(includedir); \
	done
	$(LIBTOOL) --mode=install $(INSTALL) -m 755 $(TARGET_LIB) $(DESTDIR)$(libdir)
	$(INSTALL_DATA) apr.exp $(DESTDIR)$(libdir)/apr.exp
	$(INSTALL_DATA) apr.pc $(DESTDIR)$(libdir)/pkgconfig/$(APR_PCFILE)
	for f in libtool shlibtool; do \
	    if test -f $${f}; then $(INSTALL) -m 755 $${f} $(DESTDIR)$(installbuilddir); fi; \
	done
	$(INSTALL) -m 755 $(top_srcdir)/build/mkdir.sh $(DESTDIR)$(installbuilddir)
	for f in make_exports.awk make_var_export.awk; do \
	    $(INSTALL_DATA) $(top_srcdir)/build/$${f} $(DESTDIR)$(installbuilddir); \
	done
	$(INSTALL_DATA) build/apr_rules.out $(DESTDIR)$(installbuilddir)/apr_rules.mk
	$(INSTALL) -m 755 apr-config.out $(DESTDIR)$(bindir)/$(APR_CONFIG)
	@if [ $(INSTALL_SUBDIRS) != "none" ]; then \
            for i in $(INSTALL_SUBDIRS); do \
	        ( cd $$i ; $(MAKE) DESTDIR=$(DESTDIR) install ); \
	    done \
	fi

$(TARGET_LIB): $(OBJECTS) $(EXTRA_OBJECTS)
	$(LINK) @lib_target@ $(EXTRA_OBJECTS) $(ALL_LIBS) $(APRUTIL_EXPORT_LIBS)

encoding/apr_escape.lo: include/private/apr_escape_test_char.h 

install-modules: install-modules-@APR_HAVE_MODULES@

install-modules-no:

install-modules-yes: $(APR_DSO_MODULES)
	$(APR_MKDIR) $(DESTDIR)$(APR_DSO_LIBDIR)
	@for m in $(APR_DSO_MODULES); do $(LIBTOOL) $(LT_LTFLAGS) $(LTFLAGS) --mode=install $(INSTALL) -m 755 $$m $(DESTDIR)$(APR_DSO_LIBDIR); done

exports.c: $(HEADERS)
	$(APR_MKEXPORT) $(HEADERS) > $@

export_vars.c: $(HEADERS)
	$(APR_MKVAREXPORT) $(HEADERS) > $@

apr.exp: exports.c export_vars.c
	@echo "#! lib@APR_LIBNAME@.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.c | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@

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

gcov: 
	@build/run-gcov.sh

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

etags:
	etags `find . -name '*.[ch]'`

OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
tools/gen_test_char.lo: tools/gen_test_char.c
	$(APR_MKDIR) tools
	$(LT_COMPILE)

tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
	$(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)

include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@
	$(APR_MKDIR) include/private
	tools/gen_test_char@EXEEXT@ > $@

LINK_PROG = $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) $(LT_LDFLAGS) \
	    @LT_NO_INSTALL@ $(ALL_LDFLAGS) -o $@

# DO NOT REMOVE
docs: $(INCDIR)/*.h
