
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@

#
# Rules for building specific targets, starting with 'all' for
# building the entire package.
#
TARGETS = $(TARGET_LIB) 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@
datadir=@datadir@
installbuilddir=@installbuilddir@

# 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: $(TARGETS)
	$(APR_MKDIR) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(installbuilddir) \
		     $(DESTDIR)$(libdir)/pkgconfig $(DESTDIR)$(includedir)
	$(INSTALL_DATA) $(top_blddir)/include/apr.h $(DESTDIR)$(includedir)
	for f in $(top_srcdir)/include/apr_*.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_DATA) $(top_srcdir)/build/apr_common.m4 $(DESTDIR)$(installbuilddir)
	$(INSTALL_DATA) $(top_srcdir)/build/find_apr.m4 $(DESTDIR)$(installbuilddir)
	$(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)
	$(LINK) @lib_target@ $(ALL_LIBS)

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

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 --tag=CC $(COMPILE) $(LT_LDFLAGS) \
	    @LT_NO_INSTALL@ $(ALL_LDFLAGS) -o $@

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