Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 1 | # -*- Makefile -*- |
| 2 | |
Jan Engelhardt | ac21a5c | 2008-05-12 10:28:34 +0200 | [diff] [blame] | 3 | top_builddir := @top_builddir@ |
| 4 | builddir := @builddir@ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 5 | top_srcdir := @top_srcdir@ |
| 6 | srcdir := @srcdir@ |
| 7 | ksourcedir := @ksourcedir@ |
| 8 | prefix := @prefix@ |
| 9 | exec_prefix := @exec_prefix@ |
| 10 | libdir := @libdir@ |
| 11 | libexecdir := @libexecdir@ |
Jan Engelhardt | 21b41ee | 2008-02-11 01:02:00 +0100 | [diff] [blame] | 12 | xtlibdir := @xtlibdir@ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 13 | |
| 14 | CC := @CC@ |
| 15 | CCLD := ${CC} |
| 16 | CFLAGS := @CFLAGS@ |
Jan Engelhardt | 8e33625 | 2011-06-01 02:16:05 +0200 | [diff] [blame] | 17 | CPPFLAGS := @CPPFLAGS@ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 18 | LDFLAGS := @LDFLAGS@ |
| 19 | regular_CFLAGS := @regular_CFLAGS@ |
Jan Engelhardt | 8e33625 | 2011-06-01 02:16:05 +0200 | [diff] [blame] | 20 | regular_CPPFLAGS := @regular_CPPFLAGS@ |
Jan Engelhardt | 5085c3a | 2011-06-01 02:20:40 +0200 | [diff] [blame] | 21 | kinclude_CPPFLAGS := @kinclude_CPPFLAGS@ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 22 | |
Mike Frysinger | 6918795 | 2011-04-02 22:13:23 -0400 | [diff] [blame] | 23 | AM_CFLAGS := ${regular_CFLAGS} |
| 24 | AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CPPFLAGS} |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 25 | AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@ |
| 26 | |
| 27 | ifeq (${V},) |
| 28 | AM_LIBTOOL_SILENT = --silent |
| 29 | AM_VERBOSE_CC = @echo " CC " $@; |
| 30 | AM_VERBOSE_CCLD = @echo " CCLD " $@; |
| 31 | AM_VERBOSE_CXX = @echo " CXX " $@; |
| 32 | AM_VERBOSE_CXXLD = @echo " CXXLD " $@; |
| 33 | AM_VERBOSE_AR = @echo " AR " $@; |
| 34 | AM_VERBOSE_GEN = @echo " GEN " $@; |
| 35 | endif |
| 36 | |
| 37 | # |
| 38 | # Wildcard module list |
| 39 | # |
Jan Engelhardt | ed342ed | 2008-02-13 21:35:59 +0100 | [diff] [blame] | 40 | pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(wildcard ${srcdir}/libxt_*.c)) |
Jan Engelhardt | a094eb0 | 2009-04-03 22:37:49 +0200 | [diff] [blame] | 41 | @ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(wildcard ${srcdir}/libipt_*.c)) |
Jan Engelhardt | 8e58613 | 2009-04-03 22:28:34 +0200 | [diff] [blame] | 42 | @ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(wildcard ${srcdir}/libip6t_*.c)) |
Jan Engelhardt | 2c570e7 | 2008-06-05 19:54:48 +0200 | [diff] [blame] | 43 | pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod}) |
| 44 | pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod}) |
| 45 | pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod}) |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 46 | pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod}) |
| 47 | pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod}) |
| 48 | pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod}) |
| 49 | pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod}) |
| 50 | pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod}) |
| 51 | pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod}) |
| 52 | |
| 53 | |
| 54 | # |
| 55 | # Building blocks |
| 56 | # |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 57 | targets := libext.a libext4.a libext6.a \ |
| 58 | matches4.man matches6.man \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 59 | targets4.man targets6.man |
| 60 | targets_install := |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 61 | @ENABLE_STATIC_TRUE@ libext_objs := ${pfx_objs} |
| 62 | @ENABLE_STATIC_TRUE@ libext4_objs := ${pf4_objs} |
| 63 | @ENABLE_STATIC_TRUE@ libext6_objs := ${pf6_objs} |
Jan Engelhardt | b79ec69 | 2009-07-23 17:41:21 +0200 | [diff] [blame] | 64 | @ENABLE_STATIC_FALSE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs} |
| 65 | @ENABLE_STATIC_FALSE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs} |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 66 | |
| 67 | .SECONDARY: |
| 68 | |
| 69 | .PHONY: all install clean distclean FORCE |
| 70 | |
| 71 | all: ${targets} |
| 72 | |
| 73 | install: ${targets_install} |
Jan Engelhardt | 21b41ee | 2008-02-11 01:02:00 +0100 | [diff] [blame] | 74 | @mkdir -p "${DESTDIR}${xtlibdir}"; |
Jan Engelhardt | e145621 | 2008-06-12 12:10:47 +0200 | [diff] [blame] | 75 | if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 76 | |
| 77 | clean: |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 78 | rm -f *.o *.oo *.so *.a {matches,targets}[46].man initext.c initext4.c initext6.c; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 79 | |
| 80 | distclean: clean |
Jan Engelhardt | fb6209a | 2008-01-29 13:32:07 +0000 | [diff] [blame] | 81 | rm -f .*.d .*.dd; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 82 | |
Jan Engelhardt | 7963845 | 2008-08-13 14:43:56 +0200 | [diff] [blame] | 83 | init%.o: init%.c |
Jan Engelhardt | 8e33625 | 2011-06-01 02:16:05 +0200 | [diff] [blame] | 84 | ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 85 | |
| 86 | -include .*.d |
| 87 | |
| 88 | |
| 89 | # |
| 90 | # Shared libraries |
| 91 | # |
| 92 | lib%.so: lib%.oo |
| 93 | ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $<; |
| 94 | |
| 95 | lib%.oo: ${srcdir}/lib%.c |
Jan Engelhardt | 8e33625 | 2011-06-01 02:16:05 +0200 | [diff] [blame] | 96 | ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 97 | |
| 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 | # |
| 106 | lib%.o: ${srcdir}/lib%.c |
Jan Engelhardt | 8e33625 | 2011-06-01 02:16:05 +0200 | [diff] [blame] | 107 | ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<; |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 108 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 109 | libext.a: initext.o ${libext_objs} |
| 110 | ${AM_VERBOSE_AR} ${AR} crs $@ $^; |
| 111 | |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 112 | libext4.a: initext4.o ${libext4_objs} |
| 113 | ${AM_VERBOSE_AR} ${AR} crs $@ $^; |
| 114 | |
| 115 | libext6.a: initext6.o ${libext6_objs} |
| 116 | ${AM_VERBOSE_AR} ${AR} crs $@ $^; |
| 117 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 118 | initext_func := $(addprefix xt_,${pfx_build_mod}) |
| 119 | initext4_func := $(addprefix ipt_,${pf4_build_mod}) |
| 120 | initext6_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 Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 126 | |
| 127 | .initext4.dd: FORCE |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 128 | @echo "${initext4_func}" >$@.tmp; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 129 | 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 Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 137 | initext.c: .initext.dd |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 138 | ${AM_VERBOSE_GEN} |
| 139 | @( \ |
| 140 | echo "" >$@; \ |
| 141 | for i in ${initext_func}; do \ |
| 142 | echo "extern void lib$${i}_init(void);" >>$@; \ |
| 143 | done; \ |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 144 | 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 | |
| 153 | initext4.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 Zenczykowski | 5e8f947 | 2011-04-04 15:32:39 +0200 | [diff] [blame] | 160 | echo "void init_extensions4(void);" >>$@; \ |
| 161 | echo "void init_extensions4(void)" >>$@; \ |
Thomas Jacob | f858d37 | 2008-05-20 17:17:02 +0200 | [diff] [blame] | 162 | echo "{" >>$@; \ |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 163 | for i in ${initext4_func}; do \ |
Thomas Jacob | f858d37 | 2008-05-20 17:17:02 +0200 | [diff] [blame] | 164 | echo " ""lib$${i}_init();" >>$@; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 165 | done; \ |
| 166 | echo "}" >>$@; \ |
| 167 | ); |
| 168 | |
| 169 | initext6.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 Zenczykowski | 49d8c5d | 2011-04-04 15:33:25 +0200 | [diff] [blame] | 176 | echo "void init_extensions6(void);" >>$@; \ |
| 177 | echo "void init_extensions6(void)" >>$@; \ |
Thomas Jacob | f858d37 | 2008-05-20 17:17:02 +0200 | [diff] [blame] | 178 | echo "{" >>$@; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 179 | for i in ${initext6_func}; do \ |
Thomas Jacob | f858d37 | 2008-05-20 17:17:02 +0200 | [diff] [blame] | 180 | echo " ""lib$${i}_init();" >>$@; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 181 | done; \ |
| 182 | echo "}" >>$@; \ |
| 183 | ); |
| 184 | |
| 185 | # |
| 186 | # Manual pages |
| 187 | # |
Jan Engelhardt | c043152 | 2011-04-06 13:21:54 +0200 | [diff] [blame] | 188 | ex_matches = $(sort $(shell echo $(1) | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b')) |
| 189 | ex_targets = $(sort $(shell echo $(1) | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b')) |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 190 | man_run = \ |
| 191 | ${AM_VERBOSE_GEN} \ |
| 192 | for ext in $(1); do \ |
| 193 | f="${srcdir}/libxt_$$ext.man"; \ |
Jan Engelhardt | cdcfd88 | 2009-06-01 11:52:07 +0200 | [diff] [blame] | 194 | cf="${srcdir}/libxt_$$ext.c"; \ |
| 195 | if [ -f "$$f" ] && grep -Eq "$(3)|NFPROTO_UNSPEC" "$$cf"; then \ |
| 196 | echo -e "\t+ $$f" >&2; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 197 | echo ".SS $$ext"; \ |
Jan Engelhardt | a3f1013 | 2010-12-11 03:35:48 +0100 | [diff] [blame] | 198 | cat "$$f" || exit $$?; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 199 | continue; \ |
| 200 | fi; \ |
Jan Engelhardt | 0ff6b46 | 2009-02-17 15:05:29 +0100 | [diff] [blame] | 201 | f="${srcdir}/lib$(2)t_$$ext.man"; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 202 | if [ -f "$$f" ]; then \ |
Jan Engelhardt | cdcfd88 | 2009-06-01 11:52:07 +0200 | [diff] [blame] | 203 | echo -e "\t+ $$f" >&2; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 204 | echo ".SS $$ext"; \ |
Jan Engelhardt | a3f1013 | 2010-12-11 03:35:48 +0100 | [diff] [blame] | 205 | cat "$$f" || exit $$?; \ |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 206 | continue; \ |
| 207 | fi; \ |
| 208 | done >$@; |
| 209 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 210 | matches4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man) |
Jan Engelhardt | c304d77 | 2009-05-26 13:21:55 +0200 | [diff] [blame] | 211 | $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4) |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 212 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 213 | matches6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man) |
Jan Engelhardt | c304d77 | 2009-05-26 13:21:55 +0200 | [diff] [blame] | 214 | $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6) |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 215 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 216 | targets4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man) |
Jan Engelhardt | c304d77 | 2009-05-26 13:21:55 +0200 | [diff] [blame] | 217 | $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4) |
Jan Engelhardt | f82070f | 2008-01-20 13:14:00 +0000 | [diff] [blame] | 218 | |
Maciej Żenczykowski | 9a9694f | 2011-04-06 13:35:11 -0700 | [diff] [blame] | 219 | targets6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man) |
Jan Engelhardt | c304d77 | 2009-05-26 13:21:55 +0200 | [diff] [blame] | 220 | $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6) |