blob: fbaf2eca798dd36e7d0ee185012e14254d438292 [file] [log] [blame]
Jan Engelhardtf82070f2008-01-20 13:14:00 +00001# -*- Makefile -*-
2
Jan Engelhardtac21a5c2008-05-12 10:28:34 +02003top_builddir := @top_builddir@
4builddir := @builddir@
Jan Engelhardtf82070f2008-01-20 13:14:00 +00005top_srcdir := @top_srcdir@
6srcdir := @srcdir@
7ksourcedir := @ksourcedir@
8prefix := @prefix@
9exec_prefix := @exec_prefix@
10libdir := @libdir@
11libexecdir := @libexecdir@
Jan Engelhardt21b41ee2008-02-11 01:02:00 +010012xtlibdir := @xtlibdir@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000013
14CC := @CC@
15CCLD := ${CC}
16CFLAGS := @CFLAGS@
Jan Engelhardt8e336252011-06-01 02:16:05 +020017CPPFLAGS := @CPPFLAGS@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000018LDFLAGS := @LDFLAGS@
19regular_CFLAGS := @regular_CFLAGS@
Jan Engelhardt8e336252011-06-01 02:16:05 +020020regular_CPPFLAGS := @regular_CPPFLAGS@
Jan Engelhardt5085c3a2011-06-01 02:20:40 +020021kinclude_CPPFLAGS := @kinclude_CPPFLAGS@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000022
Mike Frysinger69187952011-04-02 22:13:23 -040023AM_CFLAGS := ${regular_CFLAGS}
24AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CPPFLAGS}
Jan Engelhardtf82070f2008-01-20 13:14:00 +000025AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
26
27ifeq (${V},)
28AM_LIBTOOL_SILENT = --silent
29AM_VERBOSE_CC = @echo " CC " $@;
30AM_VERBOSE_CCLD = @echo " CCLD " $@;
31AM_VERBOSE_CXX = @echo " CXX " $@;
32AM_VERBOSE_CXXLD = @echo " CXXLD " $@;
33AM_VERBOSE_AR = @echo " AR " $@;
34AM_VERBOSE_GEN = @echo " GEN " $@;
35endif
36
37#
38# Wildcard module list
39#
Jan Engelhardted342ed2008-02-13 21:35:59 +010040pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(wildcard ${srcdir}/libxt_*.c))
Jan Engelhardta094eb02009-04-03 22:37:49 +020041@ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(wildcard ${srcdir}/libipt_*.c))
Jan Engelhardt8e586132009-04-03 22:28:34 +020042@ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(wildcard ${srcdir}/libip6t_*.c))
Jan Engelhardt2c570e72008-06-05 19:54:48 +020043pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod})
44pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod})
45pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod})
Jan Engelhardtf82070f2008-01-20 13:14:00 +000046pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod})
47pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod})
48pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod})
49pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod})
50pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod})
51pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod})
52
53
54#
55# Building blocks
56#
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -070057targets := libext.a libext4.a libext6.a \
58 matches4.man matches6.man \
Jan Engelhardtf82070f2008-01-20 13:14:00 +000059 targets4.man targets6.man
60targets_install :=
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -070061@ENABLE_STATIC_TRUE@ libext_objs := ${pfx_objs}
62@ENABLE_STATIC_TRUE@ libext4_objs := ${pf4_objs}
63@ENABLE_STATIC_TRUE@ libext6_objs := ${pf6_objs}
Jan Engelhardtb79ec692009-07-23 17:41:21 +020064@ENABLE_STATIC_FALSE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
65@ENABLE_STATIC_FALSE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
Jan Engelhardtf82070f2008-01-20 13:14:00 +000066
67.SECONDARY:
68
69.PHONY: all install clean distclean FORCE
70
71all: ${targets}
72
73install: ${targets_install}
Jan Engelhardt21b41ee2008-02-11 01:02:00 +010074 @mkdir -p "${DESTDIR}${xtlibdir}";
Jan Engelhardte1456212008-06-12 12:10:47 +020075 if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000076
77clean:
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -070078 rm -f *.o *.oo *.so *.a {matches,targets}[46].man initext.c initext4.c initext6.c;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000079
80distclean: clean
Jan Engelhardtfb6209a2008-01-29 13:32:07 +000081 rm -f .*.d .*.dd;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000082
Jan Engelhardt79638452008-08-13 14:43:56 +020083init%.o: init%.c
Jan Engelhardt8e336252011-06-01 02:16:05 +020084 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000085
86-include .*.d
87
88
89#
90# Shared libraries
91#
92lib%.so: lib%.oo
93 ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $<;
94
95lib%.oo: ${srcdir}/lib%.c
Jan Engelhardt8e336252011-06-01 02:16:05 +020096 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000097
98
99#
100# Static bits
101#
102# If static building is disabled, libext*.a will still be generated,
103# but will be empty. This is good since we can do with less case
104# handling code in the Makefiles.
105#
106lib%.o: ${srcdir}/lib%.c
Jan Engelhardt8e336252011-06-01 02:16:05 +0200107 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000108
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700109libext.a: initext.o ${libext_objs}
110 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
111
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000112libext4.a: initext4.o ${libext4_objs}
113 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
114
115libext6.a: initext6.o ${libext6_objs}
116 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
117
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700118initext_func := $(addprefix xt_,${pfx_build_mod})
119initext4_func := $(addprefix ipt_,${pf4_build_mod})
120initext6_func := $(addprefix ip6t_,${pf6_build_mod})
121
122.initext.dd: FORCE
123 @echo "${initext_func}" >$@.tmp; \
124 cmp -s $@ $@.tmp || mv $@.tmp $@; \
125 rm -f $@.tmp;
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000126
127.initext4.dd: FORCE
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700128 @echo "${initext4_func}" >$@.tmp; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000129 cmp -s $@ $@.tmp || mv $@.tmp $@; \
130 rm -f $@.tmp;
131
132.initext6.dd: FORCE
133 @echo "${initext6_func}" >$@.tmp; \
134 cmp -s $@ $@.tmp || mv $@.tmp $@; \
135 rm -f $@.tmp;
136
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700137initext.c: .initext.dd
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000138 ${AM_VERBOSE_GEN}
139 @( \
140 echo "" >$@; \
141 for i in ${initext_func}; do \
142 echo "extern void lib$${i}_init(void);" >>$@; \
143 done; \
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700144 echo "void init_extensions(void);" >>$@; \
145 echo "void init_extensions(void)" >>$@; \
146 echo "{" >>$@; \
147 for i in ${initext_func}; do \
148 echo " ""lib$${i}_init();" >>$@; \
149 done; \
150 echo "}" >>$@; \
151 );
152
153initext4.c: .initext4.dd
154 ${AM_VERBOSE_GEN}
155 @( \
156 echo "" >$@; \
157 for i in ${initext4_func}; do \
158 echo "extern void lib$${i}_init(void);" >>$@; \
159 done; \
Maciej Zenczykowski5e8f9472011-04-04 15:32:39 +0200160 echo "void init_extensions4(void);" >>$@; \
161 echo "void init_extensions4(void)" >>$@; \
Thomas Jacobf858d372008-05-20 17:17:02 +0200162 echo "{" >>$@; \
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700163 for i in ${initext4_func}; do \
Thomas Jacobf858d372008-05-20 17:17:02 +0200164 echo " ""lib$${i}_init();" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000165 done; \
166 echo "}" >>$@; \
167 );
168
169initext6.c: .initext6.dd
170 ${AM_VERBOSE_GEN}
171 @( \
172 echo "" >$@; \
173 for i in ${initext6_func}; do \
174 echo "extern void lib$${i}_init(void);" >>$@; \
175 done; \
Maciej Zenczykowski49d8c5d2011-04-04 15:33:25 +0200176 echo "void init_extensions6(void);" >>$@; \
177 echo "void init_extensions6(void)" >>$@; \
Thomas Jacobf858d372008-05-20 17:17:02 +0200178 echo "{" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000179 for i in ${initext6_func}; do \
Thomas Jacobf858d372008-05-20 17:17:02 +0200180 echo " ""lib$${i}_init();" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000181 done; \
182 echo "}" >>$@; \
183 );
184
185#
186# Manual pages
187#
Jan Engelhardtc0431522011-04-06 13:21:54 +0200188ex_matches = $(sort $(shell echo $(1) | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b'))
189ex_targets = $(sort $(shell echo $(1) | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b'))
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000190man_run = \
191 ${AM_VERBOSE_GEN} \
192 for ext in $(1); do \
193 f="${srcdir}/libxt_$$ext.man"; \
Jan Engelhardtcdcfd882009-06-01 11:52:07 +0200194 cf="${srcdir}/libxt_$$ext.c"; \
195 if [ -f "$$f" ] && grep -Eq "$(3)|NFPROTO_UNSPEC" "$$cf"; then \
196 echo -e "\t+ $$f" >&2; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000197 echo ".SS $$ext"; \
Jan Engelhardta3f10132010-12-11 03:35:48 +0100198 cat "$$f" || exit $$?; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000199 continue; \
200 fi; \
Jan Engelhardt0ff6b462009-02-17 15:05:29 +0100201 f="${srcdir}/lib$(2)t_$$ext.man"; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000202 if [ -f "$$f" ]; then \
Jan Engelhardtcdcfd882009-06-01 11:52:07 +0200203 echo -e "\t+ $$f" >&2; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000204 echo ".SS $$ext"; \
Jan Engelhardta3f10132010-12-11 03:35:48 +0100205 cat "$$f" || exit $$?; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000206 continue; \
207 fi; \
208 done >$@;
209
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700210matches4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardtc304d772009-05-26 13:21:55 +0200211 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4)
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000212
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700213matches6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardtc304d772009-05-26 13:21:55 +0200214 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6)
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000215
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700216targets4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardtc304d772009-05-26 13:21:55 +0200217 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4)
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000218
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700219targets6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardtc304d772009-05-26 13:21:55 +0200220 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6)