2 SUBDIRS = srclib os server modules support
5 PROGRAM_NAME = $(progname)
6 PROGRAM_SOURCES = modules.c
7 PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
8 PROGRAM_PRELINK = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
9 PROGRAM_DEPENDENCIES = \
15 sbin_PROGRAMS = $(PROGRAM_NAME)
16 TARGETS = $(sbin_PROGRAMS) $(shared_build) $(other_targets)
17 INSTALL_TARGETS = install-conf install-htdocs install-error install-icons \
18 install-other install-cgi install-include install-suexec install-build \
21 CLEAN_TARGETS = check/apxs check/build/config_vars.mk \
22 check/conf/$(PROGRAM_NAME).conf check/conf/magic check/conf/mime.types \
23 check/conf/extra/* check/include/*
24 DISTCLEAN_TARGETS = include/ap_config_auto.h include/ap_config_layout.h \
25 include/apache_probes.h \
26 modules.c config.cache config.log config.status build/config_vars.mk \
27 build/rules.mk docs/conf/httpd.conf docs/conf/extra/*.conf shlibtool \
28 build/pkg/pkginfo build/config_vars.sh bsd_converted
29 EXTRACLEAN_TARGETS = configure include/ap_config_auto.h.in generated_lists \
31 PHONY_TARGETS := check check-conf check-dirs check-include
33 include $(top_builddir)/build/rules.mk
34 include $(top_srcdir)/build/program.mk
37 @echo Installing configuration files
38 @$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(sysconfdir)/extra
39 @$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir)/original/extra
40 @cd $(top_srcdir)/docs/conf; \
41 for i in mime.types magic; do \
42 if test ! -f $(DESTDIR)$(sysconfdir)/$$i; then \
43 $(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \
46 for j in $(top_srcdir)/docs/conf $(top_builddir)/docs/conf ; do \
48 for i in httpd.conf extra/*.conf; do \
49 if [ -f $$i ] ; then \
51 n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
52 if test $$n_lm -eq 0 -o "x$(MPM_MODULE)$(DSO_MODULES)" = "x"; then \
53 sed -e 's#@@ServerRoot@@#$(prefix)#g' \
54 -e 's#@@Port@@#$(PORT)#g' \
55 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
56 -e '/@@LoadModule@@/d' \
59 sed -n -e '/@@LoadModule@@/q' \
60 -e 's#@@ServerRoot@@#$(prefix)#g' \
61 -e 's#@@Port@@#$(PORT)#g' \
62 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
65 if echo " $(DSO_MODULES) "|$(EGREP) " cgi " > /dev/null ; then \
70 if echo " $(DSO_MODULES) "|$(EGREP) " cgid " > /dev/null ; then \
75 for j in $(MPM_MODULES) "^EOL^"; do \
76 if test $$j != "^EOL^"; then \
77 if echo ",$(ENABLED_MPM_MODULE),"|$(EGREP) ",$$j," > /dev/null ; then \
78 loading_disabled=""; \
80 loading_disabled="#"; \
82 echo "$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
85 for j in $(DSO_MODULES) "^EOL^"; do \
86 if test $$j != "^EOL^"; then \
87 if echo ",$(ENABLED_DSO_MODULES),"|$(EGREP) ",$$j," > /dev/null ; then \
88 loading_disabled=""; \
90 loading_disabled="#"; \
91 if test "$(LOAD_ALL_MODULES)" = "yes"; then \
92 loading_disabled=""; \
95 if test $$j = "cgid" -a "$$have_cgi" = "1"; then \
96 echo "<IfModule !mpm_prefork_module>"; \
97 echo " $${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
99 elif test $$j = "cgi" -a "$$have_cgid" = "1"; then \
100 echo "<IfModule mpm_prefork_module>"; \
101 echo " $${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
102 echo "</IfModule>"; \
104 echo "$${loading_disabled}LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
108 sed -e '1,/@@LoadModule@@/d' \
109 -e '/@@LoadModule@@/d' \
110 -e 's#@@ServerRoot@@#$(prefix)#g' \
111 -e 's#@@Port@@#$(PORT)#g' \
112 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
115 ) > $(DESTDIR)$(sysconfdir)/original/$$i; \
116 chmod 0644 $(DESTDIR)$(sysconfdir)/original/$$i; \
118 if [ "$$i" = "httpd.conf" ]; then \
119 file=`echo $$i|sed s/.*.conf/$(PROGRAM_NAME).conf/`; \
121 if test ! -f $(DESTDIR)$(sysconfdir)/$$file; then \
122 $(INSTALL_DATA) $(DESTDIR)$(sysconfdir)/original/$$i $(DESTDIR)$(sysconfdir)/$$file; \
127 if test -f "$(builddir)/envvars-std"; then \
128 cp -p envvars-std $(DESTDIR)$(sbindir); \
129 if test ! -f $(DESTDIR)$(sbindir)/envvars; then \
130 cp -p envvars-std $(DESTDIR)$(sbindir)/envvars ; \
134 # Create a sanitized config_vars.mk
135 build/config_vars.out: build/config_vars.mk
136 @$(SHELL) build/config_vars.sh < build/config_vars.mk > build/config_vars.out
138 install-build: build/config_vars.out
139 @echo Installing build system files
140 @$(MKINSTALLDIRS) $(DESTDIR)$(installbuilddir)
141 @$(INSTALL_DATA) $(top_srcdir)/build/*.mk build/*.mk \
142 $(DESTDIR)$(installbuilddir)
143 @$(INSTALL_PROGRAM) $(top_builddir)/config.nice \
144 $(top_srcdir)/build/mkdir.sh \
145 $(top_srcdir)/build/instdso.sh \
146 $(DESTDIR)$(installbuilddir)
147 @$(INSTALL_DATA) build/config_vars.out $(DESTDIR)$(installbuilddir)/config_vars.mk
148 @rm build/config_vars.out
150 htdocs-srcdir = $(top_srcdir)/docs/docroot
153 @if test -d $(top_srcdir)/docs/manual/build; then \
154 cd $(top_srcdir)/docs/manual/build && ./build.sh all; \
156 echo 'For details on generating the docs, please read:'; \
157 echo ' http://httpd.apache.org/docs-project/docsformat.html'; \
161 @if test -d $(top_srcdir)/docs/manual/build; then \
162 cd $(top_srcdir)/docs/manual/build && ./build.sh validate-xml; \
164 echo 'For details on generating the docs, please read:'; \
165 echo ' http://httpd.apache.org/docs-project/docsformat.html'; \
169 doxygen $(top_srcdir)/docs/doxygen.conf
172 -@if [ -d $(DESTDIR)$(htdocsdir) ]; then \
173 echo "[PRESERVING EXISTING HTDOCS SUBDIR: $(DESTDIR)$(htdocsdir)]"; \
175 echo Installing HTML documents ; \
176 $(MKINSTALLDIRS) $(DESTDIR)$(htdocsdir) ; \
177 if test -d $(htdocs-srcdir) && test "x$(RSYNC)" != "x" && test -x $(RSYNC) ; then \
178 $(RSYNC) --exclude .svn -rlpt --numeric-ids $(htdocs-srcdir)/ $(DESTDIR)$(htdocsdir)/; \
180 test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp * $(DESTDIR)$(htdocsdir)) ; \
181 cd $(DESTDIR)$(htdocsdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
186 -@if [ -d $(DESTDIR)$(errordir) ]; then \
187 echo "[PRESERVING EXISTING ERROR SUBDIR: $(DESTDIR)$(errordir)]"; \
189 echo Installing error documents ; \
190 $(MKINSTALLDIRS) $(DESTDIR)$(errordir) ; \
191 cd $(top_srcdir)/docs/error && cp -rp * $(DESTDIR)$(errordir) ; \
192 test "x$(errordir)" != "x" && cd $(DESTDIR)$(errordir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
196 -@if [ -d $(DESTDIR)$(iconsdir) ]; then \
197 echo "[PRESERVING EXISTING ICONS SUBDIR: $(DESTDIR)$(iconsdir)]"; \
199 echo Installing icons ; \
200 $(MKINSTALLDIRS) $(DESTDIR)$(iconsdir) ; \
201 cd $(top_srcdir)/docs/icons && cp -rp * $(DESTDIR)$(iconsdir) ; \
202 test "x$(iconsdir)" != "x" && cd $(DESTDIR)$(iconsdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
206 -@if [ -d $(DESTDIR)$(cgidir) ];then \
207 echo "[PRESERVING EXISTING CGI SUBDIR: $(DESTDIR)$(cgidir)]"; \
209 echo Installing CGIs ; \
210 $(MKINSTALLDIRS) $(DESTDIR)$(cgidir) ; \
211 cd $(top_srcdir)/docs/cgi-examples && cp -rp * $(DESTDIR)$(cgidir) ; \
212 test "x$(cgidir)" != "x" && cd $(DESTDIR)$(cgidir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
216 @test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) $(DESTDIR)$(logfiledir)
217 @test -d $(DESTDIR)$(runtimedir) || $(MKINSTALLDIRS) $(DESTDIR)$(runtimedir)
218 @for ext in dll x; do \
219 file=apachecore.$$ext; \
220 if test -f $$file; then \
221 cp -p $$file $(DESTDIR)$(libdir); \
225 if test -f $$file; then \
226 cp -p $$file $(DESTDIR)$(bindir); \
231 $(srcdir)/include/*.h \
232 $(srcdir)/os/$(OS_DIR)/os.h \
233 $(srcdir)/modules/arch/unix/mod_unixd.h \
234 $(srcdir)/modules/core/mod_so.h \
235 $(srcdir)/modules/core/mod_watchdog.h \
236 $(srcdir)/modules/cache/mod_cache.h \
237 $(srcdir)/modules/cache/cache_common.h \
238 $(srcdir)/modules/database/mod_dbd.h \
239 $(srcdir)/modules/dav/main/mod_dav.h \
240 $(srcdir)/modules/http2/mod_http2.h \
241 $(srcdir)/modules/filters/mod_include.h \
242 $(srcdir)/modules/filters/mod_xml2enc.h \
243 $(srcdir)/modules/generators/mod_cgi.h \
244 $(srcdir)/modules/generators/mod_status.h \
245 $(srcdir)/modules/loggers/mod_log_config.h \
246 $(srcdir)/modules/mappers/mod_rewrite.h \
247 $(srcdir)/modules/proxy/mod_proxy.h \
248 $(srcdir)/modules/proxy/mod_serf.h \
249 $(srcdir)/modules/session/mod_session.h \
250 $(srcdir)/modules/ssl/mod_ssl.h \
251 $(srcdir)/modules/ssl/mod_ssl_openssl.h \
252 $(srcdir)/os/$(OS_DIR)/*.h
255 @echo Installing header files
256 @$(MKINSTALLDIRS) $(DESTDIR)$(includedir)
257 @$(INSTALL_DATA) $(INSTALL_HEADERS) $(DESTDIR)$(includedir)
260 @echo Installing man pages and online manual
261 @test -d $(DESTDIR)$(mandir) || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)
262 @test -d $(DESTDIR)$(mandir)/man1 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
263 @test -d $(DESTDIR)$(mandir)/man8 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man8
264 @test -d $(DESTDIR)$(manualdir) || $(MKINSTALLDIRS) $(DESTDIR)$(manualdir)
265 @cp -p $(top_srcdir)/docs/man/*.1 $(DESTDIR)$(mandir)/man1
266 @cp -p $(top_srcdir)/docs/man/*.8 $(DESTDIR)$(mandir)/man8
267 @if test "x$(RSYNC)" != "x" && test -x $(RSYNC) ; then \
268 $(RSYNC) --exclude .svn -rlpt --numeric-ids $(top_srcdir)/docs/manual/ $(DESTDIR)$(manualdir)/; \
270 cd $(top_srcdir)/docs/manual && cp -rp * $(DESTDIR)$(manualdir); \
271 cd $(DESTDIR)$(manualdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
274 install-suexec: install-suexec-binary install-suexec-$(INSTALL_SUEXEC)
276 install-suexec-binary:
277 @if test -f $(builddir)/support/suexec; then \
278 test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir); \
279 $(INSTALL_PROGRAM) $(top_builddir)/support/suexec $(DESTDIR)$(sbindir); \
282 install-suexec-setuid:
283 @if test -f $(builddir)/support/suexec; then \
284 chmod 4755 $(DESTDIR)$(sbindir)/suexec; \
288 @if test -f $(builddir)/support/suexec; then \
289 setcap 'cap_setuid,cap_setgid+pe' $(DESTDIR)$(sbindir)/suexec; \
293 cd support && $(MAKE) suexec
296 @rm -rf autom4te.cache
298 update-log-tags update-log-msg-tags:
299 find server modules os -name \*.c|xargs perl \
300 docs/log-message-tags/update-log-msg-tags
302 # XXX: This looks awfully platform-specific [read: bad form and style]
303 include $(top_srcdir)/os/os2/core.mk
309 # Installs the include/ header files into the ./check/ directory so we can use
310 # them during `make check`.
311 check-include: override includedir:=$(top_builddir)/check/include
312 check-include: install-include
314 # This is basically the same as install-conf, but we only care about the files
315 # necessary to run the test suite, and the LoadModule lines point back to the
316 # build tree. Configuration files will be installed to ./check/conf and pointed
317 # to by ./check/apxs.
319 @mkdir -p check/conf/extra; \
320 cd $(top_srcdir)/docs/conf; \
321 for i in mime.types magic; do \
322 $(INSTALL_DATA) $$i $(top_builddir)/check/conf; \
324 for j in $(top_srcdir)/docs/conf $(top_builddir)/docs/conf ; do \
326 for i in httpd.conf extra/*.conf; do \
327 if [ -f $$i ] ; then \
329 n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
330 if test $$n_lm -eq 0 -o "x$(MPM_MODULE)$(DSO_MODULES)" = "x"; then \
331 sed -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
332 -e 's#@@Port@@#$(PORT)#g' \
333 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
334 -e 's#$(prefix)#$(top_builddir)/check#g' \
335 -e 's/^#ServerName /ServerName /' \
336 -e '/@@LoadModule@@/d' \
339 sed -n -e '/@@LoadModule@@/q' \
340 -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
341 -e 's#@@Port@@#$(PORT)#g' \
342 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
343 -e 's#$(prefix)#$(top_builddir)/check#g' \
344 -e 's/^#ServerName /ServerName /' \
347 if echo " $(DSO_MODULES) "|$(EGREP) " cgi " > /dev/null ; then \
352 if echo " $(DSO_MODULES) "|$(EGREP) " cgid " > /dev/null ; then \
357 for j in $(MPM_MODULES) "^EOL^"; do \
358 path=$$(find "$(top_builddir)/server" -name "mod_$$j.so"); \
359 if test $$j != "^EOL^"; then \
360 if echo ",$(ENABLED_MPM_MODULE),"|$(EGREP) ",$$j," > /dev/null ; then \
361 loading_disabled=""; \
363 loading_disabled="#"; \
365 echo "$${loading_disabled}LoadModule $${j}_module $${path}"; \
368 for j in $(DSO_MODULES) "^EOL^"; do \
369 path=$$(find "$(top_builddir)/modules" -name "mod_$$j.so"); \
370 if test $$j != "^EOL^"; then \
371 if test $$j = "cgid" -a "$$have_cgi" = "1"; then \
372 echo "<IfModule !mpm_prefork_module>"; \
373 echo " LoadModule $${j}_module $${path}"; \
374 echo "</IfModule>"; \
375 elif test $$j = "cgi" -a "$$have_cgid" = "1"; then \
376 echo "<IfModule mpm_prefork_module>"; \
377 echo " LoadModule $${j}_module $${path}"; \
378 echo "</IfModule>"; \
380 echo "LoadModule $${j}_module $${path}"; \
384 sed -e '1,/@@LoadModule@@/d' \
385 -e '/@@LoadModule@@/d' \
386 -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
387 -e 's#@@Port@@#$(PORT)#g' \
388 -e 's#@@SSLPort@@#$(SSLPORT)#g' \
389 -e 's#$(prefix)#$(top_builddir)/check#g' \
390 -e 's/^#ServerName /ServerName /' \
393 ) > $(top_builddir)/check/conf/$$i; \
394 chmod 0644 $(top_builddir)/check/conf/$$i; \
395 if [ "$$i" = "httpd.conf" ]; then \
396 mv "$(top_builddir)/check/conf/$$i" "$(top_builddir)/check/conf/$(PROGRAM_NAME).conf"; \
402 # Sometimes (e.g. when MPM DSOs are enabled) the test suite runs a full
403 # configuration check on our in-tree build. To pass, we have to have all of the
404 # correct directories, even though they won't be used.
406 @mkdir -p check/htdocs
409 # A version of apxs with the PREFIX overridden to point inside the build tree.
412 sed -e 's#$(prefix)#$(top_builddir)/check#g' support/apxs > $@
415 # A version of config_vars.mk with the PREFIX and SBINDIR overridden to point
416 # inside the build tree.
417 check/build/config_vars.mk: build/config_vars.out
420 echo "prefix = $(top_builddir)/check" >> $@
421 echo "sbindir = $(top_builddir)" >> $@
423 # Run the Apache::Test suite if it has been configured with --with-test-suite.
424 check: check-include check-dirs check-conf check/build/config_vars.mk check/apxs
425 @if test "x$(TEST_SUITE_LOCATION)" = "xno"; then \
426 echo 'Re-run configure with the --with-test-suite option to enable in-tree tests.'; \
429 cd "$(TEST_SUITE_LOCATION)" && \
430 perl Makefile.PL -apxs "$(top_builddir)/check/apxs" && \
432 ./t/TEST -config && \