naobe @ ウィキ
apache2.4.2のMakefile
最終更新:
Bot(ページ名リンク)
-
view
Apache2.4.2に戻る
[[Makefile]]
SUBDIRS = srclib os server modules support サブディレクトリィ
PROGRAM_NAME = $(progname)
include $(top_builddir)/build/rules.mk
include $(top_srcdir)/build/program.mk
PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(PCRE_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
-export-dynamic なし confi g_vars.mk参照
以下参照 なし
PROGRAM_SOURCES = modules.c
PROGRAM_PRELINK = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
PROGRAM_DEPENDENCIES = \
server/libmain.la \
$(BUILTIN_LIBS) \
config_vars.mk参照
$(MPM_LIB) \
os/$(OS_DIR)/libos.la
TARGETS = $(sbin_PROGRAMS) $(shared_build) $(other_targets)
httpd shared-build
$(top_builddir)/build/rules.mk
ALL_CFLAGS = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS)
ALL_LDFLAGS = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS)
-Wl,--enable-auto-import,--subsystem,console
BASE_CC = $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
COMPILE = $(BASE_CC)
SH_COMPILE = $(LIBTOOL) -- mode =compile $(BASE_CC) -prefer-pic -c $< && touch $@ 共有ライブラリ用のlibtoolコンパイル
LT_COMPILE = $(LIBTOOL) --mode=compile $(COMPILE) -prefer-non-pic -static -c $< && touch $@ static用のlibtoolコンパイル
include $(top_builddir)/build/config_vars.mk
all: all-recursive ここが最初のターゲット
all-recursive install-recursive depend-recursive:
@otarget=`echo $@|[[sed]] s/-recursive//`; \ ターゲットから'-recursive'を除く
list=' $(BUILD_SUBDIRS) $(SUBDIRS)'; \
for i in $$list; do \
if test -d "$$i"; then \
target="$$otarget"; \
echo "Making $$target in $$i"; \
if test "$$i" = "."; then \
made_local=yes; \
target="local-$$target"; \
fi; \
(cd $$i && $(MAKE) $$target) || exit 1; \ サブディレクトリに移動してmake allを実行
fi; \
done; \
if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
made_local=yes; \
fi; \
if test "$$made_local" != "yes"; then \
$(MAKE) "local-$$otarget" || exit 1; \ ローカルターゲットを作成する
fi
shared-build-recursive:
@if test `pwd` = "$(top_builddir)"; then \
$(PRE_SHARED_CMDS) ; \
fi; \
list='$(SUBDIRS)'; for i in $$list; do \
target="shared-build"; \
if test "$$i" = "."; then \
made_local=yes; \
target="local-shared-build"; \
fi; \
if test "$$i" != "srclib"; then \
(cd $$i && $(MAKE) $$target) || exit 1; \ サブディレクトリに移動してmake shared-buildを実行
fi; \
done; \
if test -f 'modules.mk'; then \
if test -n '$(SHARED_TARGETS)'; then \
echo "Building shared: $(SHARED_TARGETS)"; \
if test "$$made_local" != "yes"; then \
$(MAKE) "local-shared-build" || exit 1; \
fi; \
fi; \
fi; \
if test `pwd` = "$(top_builddir)"; then \
$(POST_SHARED_CMDS) ; \
fi
local-all: $(TARGETS)
shared-build: shared-build-recursive
LINK = $(LIBTOOL) --mode=link $(CC) $(ALL_CFLAGS) $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
-g -O2 -pthread なし
-Wl,--enable-auto-import,--subsyste m,console
SH_LINK = $(SH_LIBTOOL) -- mode=link $(CC) $(ALL_CFLAGS) $(LT_LDFLAGS) $(ALL_LDFLAGS) $(SH_LDFLAGS) $(CORE_IMPLIB) $(SH_LIBS) -o $@
$(LIBTOOL)と同じ なし なし なし
MOD_LINK = $(LIBTOOL) -- mode=link $(CC) $(ALL_CFLAGS) -static $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
.c.lo: server (7)
$(LT_COMPILE) serverの場合はstaticでコンパイルする
$(top_srcdir)/build/program.mk
PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo)
modules.c
$(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS) ライブラリがhttpdより新しければ、リンクを実行する
httpd
$(PROGRAM_PRELINK)
$(LINK) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD) ライブラリをリンクしてターゲット作成
なし module.o rootのMakefile参照
$(top_builddir)/build/config_vars.mk
progname = httpd
LIBTOOL = /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr/libtool $(LTFLAGS)
LIBTOOLは専用のものを使っている。
LTFLAGS = --silent
LDFLAGS =
HTTPD_LDFLAGS = -export-dynamic
PCRE_LIBS = -L/usr/local/lib -lpcre
EXTRA_LIBS =
EXTRA_CFLAGS = -g -O2 -pthread
EXTRA_LDFLAGS = -Wl,--enable-auto-import,--subsystem,console
NOTEST_CFLAGS =
CC = gcc -std=gnu99
CFLAGS =
AP_LIBS = $(MOD_SO_LDADD) $(MOD_[[HTTP]]_LDADD) $(MOD_MPM_EVENT_LDADD) /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr-util/libaprutil-1.la -lexpat /home/suna/download/apache/2.4.2/httpd-2.4.2/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
-lexpat : XMLパーサ
-lrt : 非同期I/Oなどのリアルタイムライブラリ
-luuid: DCE 互換の Universally Unique Idenifier ライブラリ
-ldl: ダイナミックリンクライブラリ
MOD_SO_LDADD =
SSL_LIBS = -L/usr/kerberos/lib -lssl -lcrypto -luuid -lrt -lcrypt -lpthread -ldl
MOD_SSL_LDADD = $(SSL_LIBS) -export-symbols-regex ssl_module
MOD_HTTP_LDADD =
MOD_MPM_EVENT_LDADD =
LIBS =
OS_DIR = unix
BUILTIN_LIBS = modules/core/libmod_so.la modules/http/libmod_http.la
shared_build = shared-build
other_targets =
MPM_LIB = server/mpm/winnt/libwinnt.la
server/Makefile
SUBDIRS = mpm
LTLIBRARY_NAME = libmain.la
LTLIBRARY_DEPENDENCIES = test_char.h
LTLIBRARY_SOURCES = \
config.c log.c main.c vhost.c util.c \
util_script.c util_md5.c util_cfgtree.c util_ebcdic.c util_time.c \
util_filter.c util_pcre.c util_regex.c exports.c \ exports.cがここにある
・・・
TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp
(3) (5)
include $(top_builddir) /build/rules.mk
mpmディレクトリへ移動して、make all (0)
$(MAKE) "local-all" (1)
local-all: $(TARGETS) (2)
include $(top_srcdir) /build/library.mk
LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES) (6)
libmain.laより、オブジェクト(config.lo, log.lo ...)が新しければ、以下の行を実行
$(LINK) -static $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD) オブジェクトをstaticリンクしてlibmain.aを作成
ここにターゲットがある なし
delete-exports: (4)
@if test -f exports.c; then \
if test -f export_files; then \
files=`cat export_files`; \
headers="`find $$files -newer exports.c`"; \ export_filesから、exports.cより新しいファイルを返す
if test -n "$$headers"; then \
echo Found newer headers. Will rebuild exports.c.; \
echo rm -f exports.c export_files; \
rm -f exports.c export_files; \
fi; \
else \
rm -f exports.c; \
fi; \
fi
exports.c: export_files (8) export_filesからexports.cを作成する(ヘッダファイルから、関数を取り出して出力)
$(AWK) -f $(top_srcdir) /build/make_exports.[[awk]] `cat $?` > $@
export_files: (9) export_filesを作成する
( for dir in $(EXPORT_DIRS) ; do \
ls $$ dir /*.h ; \
done; \
for dir in $(EXPORT_DIRS_APR) ; do \
ls $$ dir /ap[ru].h $$dir /ap[ru]_*.h 2>/dev/null; \
done; \
) | sort -u > $@
modules/ssl/Makefile ダイナミックリンクライブラリ
include $(top_srcdir)/build/special.mk
all: all-recursive
include $(builddir) /modules.mk
mod_ssl.la: mod_ssl.slo ssl_engine_config.slo ssl_engine_dh.slo ssl_engine_init.slo ssl_engine_io.slo ssl_engine_kernel.slo ssl_engine _log.slo ssl_engine_mutex.slo ssl_engine_pphrase.slo ssl_engine_rand.slo ssl_engine_vars.slo ssl_scache.slo ssl_util_stapling.slo ssl_util.slo ssl_ut il_ssl.slo ssl_engine_ocsp.slo ssl_util_ocsp.slo
$(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_ssl.lo ssl_engine_config.lo ssl_engine_dh.lo ssl_engine_init.lo ss l_engine_io.lo ssl_engine_kernel.lo ssl_engine_log.lo ssl_engine_mutex.lo ssl_engine_pphrase.lo ssl_engine_rand.lo ssl_engine_vars.lo ssl_scache.lo s sl_util_stapling.lo ssl_util.lo ssl_util_ssl.lo ssl_engine_ocsp.lo ssl_util_ocsp.lo $(MOD_SSL_LDADD)
オブジェクトをリンクしてmod_ssl.laを作成する
DISTCLEAN_TARGETS = modules.mk
static =
shared = mod_ssl.la
