
SUBDIRS = srclib os server modules support
CLEAN_SUBDIRS = test

PROGRAM_NAME         = $(progname)
PROGRAM_SOURCES      = modules.c
PROGRAM_LDADD        = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_LDDEPS) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
PROGRAM_PRELINK      = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
PROGRAM_LDDEPS = \
  $(BUILTIN_LIBS) \
  $(MPM_LIB) \
  $(LIBMAIN_LIB) \
  os/$(OS_DIR)/libos.la
PROGRAM_DEPENDENCIES = \
  $(BUILTIN_LIBS) \
  $(MPM_LIB) \
  server/libmain.la \
  os/$(OS_DIR)/libos.la

sbin_PROGRAMS   = $(PROGRAM_NAME)
TARGETS         = $(sbin_PROGRAMS) $(shared_build) $(other_targets)
INSTALL_TARGETS = install-conf install-htdocs install-error install-icons \
	install-other install-cgi install-include install-suexec install-build \
	install-man

CLEAN_TARGETS  = check/bin/* check/build/config_vars.mk \
	check/conf/$(PROGRAM_NAME).conf check/conf/magic check/conf/mime.types \
	check/conf/extra/* check/include/* $(testcase_OBJECTS) $(testcase_STUBS) \
	test/httpdunit.cases test/unit/*.o
DISTCLEAN_TARGETS  = include/ap_config_auto.h include/ap_config_layout.h \
	include/apache_probes.h \
	modules.c config.cache config.log config.status build/config_vars.mk \
	build/rules.mk docs/conf/httpd.conf docs/conf/extra/*.conf shlibtool \
	build/pkg/pkginfo build/config_vars.sh bsd_converted
EXTRACLEAN_TARGETS = configure include/ap_config_auto.h.in generated_lists \
	httpd.spec
PHONY_TARGETS := check check-conf check-dirs check-include unittest-objdir

TESTS =
TEST_CONFIG =

include $(top_builddir)/build/rules.mk
include $(top_srcdir)/build/program.mk

install-conf:
	@echo Installing configuration files
	@$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(sysconfdir)/extra
	@$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir)/original/extra
	@cd $(top_srcdir)/docs/conf; \
	for i in mime.types magic; do \
	    if test ! -f $(DESTDIR)$(sysconfdir)/$$i; then \
	        $(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \
	    fi; \
	done; \
	for j in $(top_srcdir)/docs/conf $(top_builddir)/docs/conf ; do \
	    cd $$j ; \
	    for i in httpd.conf extra/*.conf; do \
	    	if [ -f $$i ] ; then \
	    	( \
	    		n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
	    		if test $$n_lm -eq 0 -o "x$(MPM_MODULES)$(DSO_MODULES)" = "x"; then \
	    			sed -e 's#@@ServerRoot@@#$(prefix)#g' \
	    				-e 's#@@Port@@#$(PORT)#g' \
	    				-e 's#@@SSLPort@@#$(SSLPORT)#g' \
	    				-e '/@@LoadModule@@/d' \
	    				< $$i; \
	    		else \
	    			sed -n -e '/@@LoadModule@@/q' \
	    				-e 's#@@ServerRoot@@#$(prefix)#g' \
	    				-e 's#@@Port@@#$(PORT)#g' \
	    				-e 's#@@SSLPort@@#$(SSLPORT)#g' \
	    				-e 'p' \
	    				< $$i; \
	    			if echo " $(DSO_MODULES) "|$(EGREP) " cgi " > /dev/null ; then \
	    				have_cgi="1"; \
	    			else \
	    				have_cgi="0"; \
	    			fi; \
	    			if echo " $(DSO_MODULES) "|$(EGREP) " cgid " > /dev/null ; then \
	    				have_cgid="1"; \
	    			else \
	    				have_cgid="0"; \
	    			fi; \
	    			for j in $(MPM_MODULES) "^EOL^"; do \
	    				if test $$j != "^EOL^"; then \
	    					if echo ",$(ENABLED_MPM_MODULE),"|$(EGREP) ",$$j," > /dev/null ; then \
	    						loading_disabled=""; \
	    					else \
	    						loading_disabled="#"; \
	    					fi; \
						echo "$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
					fi; \
	    			done; \
	    			for j in $(DSO_MODULES) "^EOL^"; do \
	    				if test $$j != "^EOL^"; then \
	    					if echo ",$(ENABLED_DSO_MODULES),"|$(EGREP) ",$$j," > /dev/null ; then \
	    						loading_disabled=""; \
	    					else \
	    						loading_disabled="#"; \
		    					if test "$(LOAD_ALL_MODULES)" = "yes"; then \
		    						loading_disabled=""; \
	    						fi; \
	    					fi; \
						if test $$j = "cgid" -a "$$have_cgi" = "1"; then \
							echo "<IfModule !mpm_prefork_module>"; \
							echo "	$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
							echo "</IfModule>"; \
						elif test $$j = "cgi" -a "$$have_cgid" = "1"; then \
							echo "<IfModule mpm_prefork_module>"; \
							echo "	$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
							echo "</IfModule>"; \
						else \
							echo "$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
						fi; \
					fi; \
	    			done; \
	    			sed -e '1,/@@LoadModule@@/d' \
	    				-e '/@@LoadModule@@/d' \
	    				-e 's#@@ServerRoot@@#$(prefix)#g' \
	    				-e 's#@@Port@@#$(PORT)#g' \
	    				-e 's#@@SSLPort@@#$(SSLPORT)#g' \
	    				< $$i; \
	    		fi \
	    	) > $(DESTDIR)$(sysconfdir)/original/$$i; \
	    	chmod 0644 $(DESTDIR)$(sysconfdir)/original/$$i; \
	    	file=$$i; \
	    	if [ "$$i" = "httpd.conf" ]; then \
	    		file=`echo $$i|sed s/.*.conf/$(PROGRAM_NAME).conf/`; \
	    	fi; \
	    	if test ! -f $(DESTDIR)$(sysconfdir)/$$file; then \
	    		$(INSTALL_DATA) $(DESTDIR)$(sysconfdir)/original/$$i $(DESTDIR)$(sysconfdir)/$$file; \
	    	fi; \
	    	fi; \
	    done ; \
	done ; \
	if test -f "$(builddir)/envvars-std"; then \
	    cp -p envvars-std $(DESTDIR)$(sbindir); \
	    if test ! -f $(DESTDIR)$(sbindir)/envvars; then \
	        cp -p envvars-std $(DESTDIR)$(sbindir)/envvars ; \
	    fi ; \
	fi

# Create a sanitized config_vars.mk
build/config_vars.out: build/config_vars.mk build/config_vars.sh
	@$(SHELL) build/config_vars.sh < build/config_vars.mk > build/config_vars.out

install-build: build/config_vars.out
	@echo Installing build system files
	@$(MKINSTALLDIRS) $(DESTDIR)$(installbuilddir)
	@$(INSTALL_DATA) $(top_srcdir)/build/*.mk build/*.mk \
		$(DESTDIR)$(installbuilddir)
	@$(INSTALL_PROGRAM) $(top_builddir)/config.nice \
		$(top_srcdir)/build/mkdir.sh \
		$(top_srcdir)/build/instdso.sh \
		$(DESTDIR)$(installbuilddir)
	@$(INSTALL_DATA) build/config_vars.out $(DESTDIR)$(installbuilddir)/config_vars.mk
	@rm build/config_vars.out

htdocs-srcdir = $(top_srcdir)/docs/docroot

docs:
	@if test -d $(top_srcdir)/docs/manual/build; then \
	    cd $(top_srcdir)/docs/manual/build && ./build.sh all; \
	else \
	    echo 'For details on generating the docs, please read:'; \
	    echo '  http://httpd.apache.org/docs-project/docsformat.html'; \
	fi

update-changes:
	@for i in `find changes-entries -type f`; do \
	    cp CHANGES CHANGES.tmp ; \
	    awk -v fname=$$i 'BEGIN{done = 0} \
	                    done == 0 && /^Changes with Apache /{ active = 1; print; next}; \
	                    /^ *\*/ && active == 1 && done == 0{rec=$$0; while(getline<fname){if (! ($$0 ~ /^ *$$/)){print}}printf "\n";print rec; active = 0; done = 1; next} //;' \
	    CHANGES.tmp > CHANGES ; \
	    rm CHANGES.tmp ; \
	    if [ -n "$(SVN)" ] ; then \
	        if ! $(SVN) rm $$i 2>/dev/null ; then \
	            $(RM) $$i ; \
	        fi ; \
	    else \
	        $(RM) $$i ; \
	    fi ; \
	done ; \
	if [ -n "$(SVN)" ] ; then \
	    $(SVN) diff CHANGES ; \
	fi

validate-xml:
	@if test -d $(top_srcdir)/docs/manual/build; then \
	    cd $(top_srcdir)/docs/manual/build && ./build.sh validate-xml; \
	else \
	    echo 'For details on generating the docs, please read:'; \
	    echo '  http://httpd.apache.org/docs-project/docsformat.html'; \
	fi

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

install-htdocs:
	-@if [ -d $(DESTDIR)$(htdocsdir) ]; then \
           echo "[PRESERVING EXISTING HTDOCS SUBDIR: $(DESTDIR)$(htdocsdir)]"; \
        else \
	    echo Installing HTML documents ; \
	    $(MKINSTALLDIRS) $(DESTDIR)$(htdocsdir) ; \
	    if test -d $(htdocs-srcdir) && test "x$(RSYNC)" != "x" && test -x $(RSYNC) ; then \
		$(RSYNC) --exclude .svn -rlpt --numeric-ids $(htdocs-srcdir)/ $(DESTDIR)$(htdocsdir)/; \
	    else \
		test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp * $(DESTDIR)$(htdocsdir)) ; \
		cd $(DESTDIR)$(htdocsdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
	    fi; \
	fi

install-error:
	-@if [ -d $(DESTDIR)$(errordir) ]; then \
           echo "[PRESERVING EXISTING ERROR SUBDIR: $(DESTDIR)$(errordir)]"; \
        else \
	    echo Installing error documents ; \
	    $(MKINSTALLDIRS) $(DESTDIR)$(errordir) ; \
	    cd $(top_srcdir)/docs/error && cp -rp * $(DESTDIR)$(errordir) ; \
	    test "x$(errordir)" != "x" && cd $(DESTDIR)$(errordir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
	fi

install-icons:
	-@if [ -d $(DESTDIR)$(iconsdir) ]; then \
           echo "[PRESERVING EXISTING ICONS SUBDIR: $(DESTDIR)$(iconsdir)]"; \
        else \
	    echo Installing icons ; \
	    $(MKINSTALLDIRS) $(DESTDIR)$(iconsdir) ; \
	    cd $(top_srcdir)/docs/icons && cp -rp * $(DESTDIR)$(iconsdir) ; \
	    test "x$(iconsdir)" != "x" && cd $(DESTDIR)$(iconsdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
	fi

install-cgi:
	-@if [ -d $(DESTDIR)$(cgidir) ];then \
	    echo "[PRESERVING EXISTING CGI SUBDIR: $(DESTDIR)$(cgidir)]"; \
	else \
	   echo Installing CGIs ; \
	   $(MKINSTALLDIRS) $(DESTDIR)$(cgidir) ; \
	   cd $(top_srcdir)/docs/cgi-examples && cp -rp * $(DESTDIR)$(cgidir) ; \
	   test "x$(cgidir)" != "x" && cd $(DESTDIR)$(cgidir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
	fi

install-other:
	@test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) $(DESTDIR)$(logfiledir)
	@test -d $(DESTDIR)$(runtimedir) || $(MKINSTALLDIRS) $(DESTDIR)$(runtimedir)
	@test -d $(DESTDIR)$(statedir) || $(MKINSTALLDIRS) $(DESTDIR)$(statedir)
	@for ext in dll x; do \
		file=apachecore.$$ext; \
		if test -f $$file; then \
			cp -p $$file $(DESTDIR)$(libdir); \
		fi; \
	done; \
	file=httpd.dll; \
	if test -f $$file; then \
		cp -p $$file $(DESTDIR)$(bindir); \
	fi;

INSTALL_HEADERS = \
	include/*.h \
	$(srcdir)/include/*.h \
	$(srcdir)/os/$(OS_DIR)/os.h \
	$(srcdir)/modules/arch/unix/mod_unixd.h \
	$(srcdir)/modules/core/mod_so.h \
	$(srcdir)/modules/core/mod_watchdog.h \
	$(srcdir)/modules/cache/mod_cache.h \
	$(srcdir)/modules/cache/cache_common.h \
	$(srcdir)/modules/database/mod_dbd.h \
	$(srcdir)/modules/dav/main/mod_dav.h \
	$(srcdir)/modules/http2/mod_http2.h \
	$(srcdir)/modules/filters/mod_include.h \
	$(srcdir)/modules/filters/mod_xml2enc.h \
	$(srcdir)/modules/generators/mod_cgi.h \
	$(srcdir)/modules/generators/mod_status.h \
	$(srcdir)/modules/loggers/mod_log_config.h \
	$(srcdir)/modules/mappers/mod_rewrite.h \
	$(srcdir)/modules/proxy/mod_proxy.h \
	$(srcdir)/modules/proxy/mod_serf.h \
        $(srcdir)/modules/session/mod_session.h \
	$(srcdir)/modules/ssl/mod_ssl.h \
	$(srcdir)/modules/ssl/mod_ssl_openssl.h \
	$(srcdir)/os/$(OS_DIR)/*.h

install-include:
	@echo Installing header files
	@$(MKINSTALLDIRS) $(DESTDIR)$(includedir)
	@$(INSTALL_DATA) $(INSTALL_HEADERS) $(DESTDIR)$(includedir)

install-man:
	@echo Installing man pages and online manual
	@test -d $(DESTDIR)$(mandir)      || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)
	@test -d $(DESTDIR)$(mandir)/man1 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
	@test -d $(DESTDIR)$(mandir)/man8 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man8
	@test -d $(DESTDIR)$(manualdir)   || $(MKINSTALLDIRS) $(DESTDIR)$(manualdir)
	@cp -p $(top_srcdir)/docs/man/*.1 $(DESTDIR)$(mandir)/man1
	@cp -p $(top_srcdir)/docs/man/*.8 $(DESTDIR)$(mandir)/man8
	@if test "x$(RSYNC)" != "x" && test -x $(RSYNC) ; then \
	  $(RSYNC) --exclude .svn -rlpt --numeric-ids $(top_srcdir)/docs/manual/ $(DESTDIR)$(manualdir)/; \
	else \
	  cd $(top_srcdir)/docs/manual && cp -rp * $(DESTDIR)$(manualdir); \
	  cd $(DESTDIR)$(manualdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
	fi

install-suexec: install-suexec-$(INSTALL_SUEXEC)

install-suexec-binary:
	@if test -f $(builddir)/support/suexec; then \
            test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir); \
            $(INSTALL_PROGRAM) $(top_builddir)/support/suexec $(DESTDIR)$(sbindir); \
	fi

install-suexec-setuid: install-suexec-binary
	@if test -f $(builddir)/support/suexec; then \
	    chmod 4755 $(DESTDIR)$(sbindir)/suexec; \
	fi

install-suexec-caps: install-suexec-binary
	@if test -f $(builddir)/support/suexec; then \
            setcap 'cap_setuid,cap_setgid+pe' $(DESTDIR)$(sbindir)/suexec; \
	fi

suexec:
	cd support && $(MAKE) suexec

x-local-distclean:
	@rm -rf autom4te.cache

update-log-tags update-log-msg-tags:
	find server modules os -name \*.c|xargs perl \
		docs/log-message-tags/update-log-msg-tags

# XXX: This looks awfully platform-specific [read: bad form and style]
include $(top_srcdir)/os/os2/core.mk

#
# In-tree Testing
#

# Installs the include/ header files into the ./check/ directory so we can use
# them during `make check`.
check-include: override includedir:=$(top_builddir)/check/include
check-include: install-include

# This is basically the same as install-conf, but we only care about the files
# necessary to run the test suite, and the LoadModule lines point back to the
# build tree. Configuration files will be installed to ./check/conf and pointed
# to by ./check/apxs.
check-conf:
	@mkdir -p check/conf/extra; \
	cd $(top_srcdir)/docs/conf; \
	for i in mime.types magic; do \
	    $(INSTALL_DATA) $$i $(top_builddir)/check/conf; \
	done; \
	for j in $(top_srcdir)/docs/conf $(top_builddir)/docs/conf ; do \
	    cd $$j ; \
	    for i in httpd.conf extra/*.conf; do \
	        if [ -f $$i ] ; then \
	        ( \
	            n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
	            if test $$n_lm -eq 0 -o "x$(MPM_MODULES)$(DSO_MODULES)" = "x"; then \
	                sed -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
	                    -e 's#@@Port@@#$(PORT)#g' \
	                    -e 's#@@SSLPort@@#$(SSLPORT)#g' \
	                    -e 's#$(prefix)#$(top_builddir)/check#g' \
	                    -e 's/^#ServerName /ServerName /' \
	                    -e '/@@LoadModule@@/d' \
	                    < $$i; \
	            else \
	                sed -n -e '/@@LoadModule@@/q' \
	                    -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
	                    -e 's#@@Port@@#$(PORT)#g' \
	                    -e 's#@@SSLPort@@#$(SSLPORT)#g' \
	                    -e 's#$(prefix)#$(top_builddir)/check#g' \
	                    -e 's/^#ServerName /ServerName /' \
	                    -e 'p' \
	                    < $$i; \
	                if echo " $(DSO_MODULES) "|$(EGREP) " cgi " > /dev/null ; then \
	                    have_cgi="1"; \
	                else \
	                    have_cgi="0"; \
	                fi; \
	                if echo " $(DSO_MODULES) "|$(EGREP) " cgid " > /dev/null ; then \
	                    have_cgid="1"; \
	                else \
	                    have_cgid="0"; \
	                fi; \
	                for j in $(MPM_MODULES) "^EOL^"; do \
	                    path=$$(find "$(top_builddir)/server" -name "mod_$$j.so"); \
	                    if test $$j != "^EOL^"; then \
	                        if echo ",$(ENABLED_MPM_MODULE),"|$(EGREP) ",$$j," > /dev/null ; then \
	                            loading_disabled=""; \
	                        else \
	                            loading_disabled="#"; \
	                        fi; \
	                    echo "$${loading_disabled}LoadModule $${j}_module $${path}"; \
	                fi; \
	                done; \
	                for j in $(DSO_MODULES) "^EOL^"; do \
	                    path=$$(find "$(top_builddir)/modules" -name "mod_$$j.so"); \
	                    if test $$j != "^EOL^"; then \
	                        if test $$j = "cgid" -a "$$have_cgi" = "1"; then \
	                            echo "<IfModule !mpm_prefork_module>"; \
	                            echo "	LoadModule $${j}_module $${path}"; \
	                            echo "</IfModule>"; \
	                        elif test $$j = "cgi" -a "$$have_cgid" = "1"; then \
	                            echo "<IfModule mpm_prefork_module>"; \
	                            echo "	LoadModule $${j}_module $${path}"; \
	                            echo "</IfModule>"; \
	                        else \
	                            echo "LoadModule $${j}_module $${path}"; \
	                        fi; \
	                    fi; \
	                done; \
	                sed -e '1,/@@LoadModule@@/d' \
	                    -e '/@@LoadModule@@/d' \
	                    -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
	                    -e 's#@@Port@@#$(PORT)#g' \
	                    -e 's#@@SSLPort@@#$(SSLPORT)#g' \
	                    -e 's#$(prefix)#$(top_builddir)/check#g' \
	                    -e 's/^#ServerName /ServerName /' \
	                    < $$i; \
	            fi \
	        ) > $(top_builddir)/check/conf/$$i; \
	        chmod 0644 $(top_builddir)/check/conf/$$i; \
	        if [ "$$i" = "httpd.conf" ]; then \
	            mv "$(top_builddir)/check/conf/$$i" "$(top_builddir)/check/conf/$(PROGRAM_NAME).conf"; \
	        fi; \
	        fi; \
	    done ; \
	done ;

# Sometimes (e.g. when MPM DSOs are enabled) the test suite runs a full
# configuration check on our in-tree build. To pass, we have to have all of the
# correct directories, even though they won't be used.
check-dirs:
	@mkdir -p check/htdocs check/logs check/bin

check-binaries: check/bin/apxs check/bin/httpd check/bin/ab

check/bin/httpd:
	ln -s $(top_builddir)/httpd check/bin/httpd

check/bin/ab:
	ln -s $(top_builddir)/support/ab check/bin/ab

# A version of apxs with the PREFIX overridden to point inside the install root
check/bin/apxs:
	mkdir -p check
	sed -e 's#$(prefix)#$(top_builddir)/check#g' support/apxs > $@
	chmod +x $@

# A version of config_vars.mk with PREFIX and SBINDIR and BINDIR overridden.
check/build/config_vars.mk: build/config_vars.out
	mkdir -p check/build
	cp $< $@
	echo "prefix = $(top_builddir)/check" >> $@
	echo "sbindir = $(top_builddir)/check/bin" >> $@
	echo "bindir = $(top_builddir)/check/bin" >> $@

# Generate config & modules etc from scratch any time a header file is
# touched, so e.g. we don't get MMN mismatch against the modules built
# in .../c-modules.
$(TEST_SUITE_LOCATION)/Makefile: $(TEST_SUITE_LOCATION)/Makefile.PL $(INSTALL_HEADERS)
	cd "$(TEST_SUITE_LOCATION)" && \
	    perl Makefile.PL -apxs "$(top_builddir)/check/bin/apxs" && \
	    ./t/TEST -clean && \
	    ./t/TEST -config $(TEST_CONFIG)

check-make: $(TEST_SUITE_LOCATION)/Makefile

check-no:
	@echo 'Re-run configure with the --with-test-suite option to enable in-tree tests.'
	@false

check-yes: check-include check-dirs check-conf check/build/config_vars.mk \
	check-binaries $(TEST_SUITE_LOCATION)/Makefile
	cd $(TEST_SUITE_LOCATION) && $(MAKE) && ./t/TEST $(TEST_CONFIG) $(TESTS)

# Run the Apache::Test suite if it has been configured with --with-test-suite.
check: check-$(WITH_TEST_SUITE)

#
# Unit Test Suite
#

# Make sure the object subdirectories we use exist in the build directory during
# VPATH builds.
unittest-objdir:
	@mkdir -p test/unit

# Normally I don't like wildcard sources, but for tests, autodiscovery is the
# way to go.
testcase_SOURCES := $(patsubst $(top_srcdir)/%,%,$(wildcard $(top_srcdir)/test/unit/*.c))
testcase_OBJECTS := $(testcase_SOURCES:%.c=%.lo)
testcase_STUBS   := $(testcase_SOURCES:%.c=%.tests)

# Each testcase depends on the source file as well as the autogenerated .tests
# stub.
$(testcase_OBJECTS): %.lo: %.c %.tests | unittest-objdir

$(testcase_STUBS): %.tests: %.c
	$(top_srcdir)/build/httpdunit_gen_stubs.pl < "$<" > "$@"

test/httpdunit.cases: $(testcase_SOURCES) | unittest-objdir
	cat $^ | $(top_srcdir)/build/httpdunit_gen_cases.pl --declaration > $@
	cat $^ | $(top_srcdir)/build/httpdunit_gen_cases.pl >> $@

test/httpdunit.lo: test/httpdunit.c test/httpdunit.cases | unittest-objdir

# httpdunit is only added to $(other_targets) if configure detects a working
# libcheck on the system.
httpdunit_OBJECTS := test/httpdunit.lo $(testcase_OBJECTS)
$(httpdunit_OBJECTS): override LTCFLAGS += $(UNITTEST_CFLAGS)
test/httpdunit: $(httpdunit_OBJECTS) $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS)
	$(LINK) $(httpdunit_OBJECTS) $(PROGRAM_OBJECTS) $(UNITTEST_LIBS) $(PROGRAM_LDADD)
