GNUmakefile.in revision ac21a5cb811dad7928c34534cae24427068dd440
1# -*- Makefile -*- 2 3top_builddir := @top_builddir@ 4builddir := @builddir@ 5top_srcdir := @top_srcdir@ 6srcdir := @srcdir@ 7ksourcedir := @ksourcedir@ 8prefix := @prefix@ 9exec_prefix := @exec_prefix@ 10libdir := @libdir@ 11libexecdir := @libexecdir@ 12xtlibdir := @xtlibdir@ 13 14CC := @CC@ 15CCLD := ${CC} 16CFLAGS := @CFLAGS@ 17LDFLAGS := @LDFLAGS@ 18regular_CFLAGS := @regular_CFLAGS@ 19kinclude_CFLAGS := @kinclude_CFLAGS@ 20 21AM_CFLAGS := ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CFLAGS} 22AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@ 23 24ifeq (${V},) 25AM_LIBTOOL_SILENT = --silent 26AM_VERBOSE_CC = @echo " CC " $@; 27AM_VERBOSE_CCLD = @echo " CCLD " $@; 28AM_VERBOSE_CXX = @echo " CXX " $@; 29AM_VERBOSE_CXXLD = @echo " CXXLD " $@; 30AM_VERBOSE_AR = @echo " AR " $@; 31AM_VERBOSE_GEN = @echo " GEN " $@; 32endif 33 34# 35# Wildcard module list 36# 37pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(wildcard ${srcdir}/libxt_*.c)) 38pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(wildcard ${srcdir}/libipt_*.c)) 39pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(wildcard ${srcdir}/libip6t_*.c)) 40pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod}) 41pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod}) 42pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod}) 43pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod}) 44pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod}) 45pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod}) 46 47 48# 49# Building blocks 50# 51targets := libext4.a libext6.a matches4.man matches6.man \ 52 targets4.man targets6.man 53targets_install := 54@ENABLE_STATIC_TRUE@ libext4_objs := ${pfx_objs} ${pf4_objs} 55@ENABLE_STATIC_TRUE@ libext6_objs := ${pfx_objs} ${pf6_objs} 56@ENABLE_SHARED_TRUE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs} 57@ENABLE_SHARED_TRUE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs} 58 59.SECONDARY: 60 61.PHONY: all install clean distclean FORCE 62 63all: ${targets} 64 65install: ${targets_install} 66 @mkdir -p "${DESTDIR}${xtlibdir}"; 67 install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; 68 69clean: 70 rm -f *.o *.oo *.so *.a {matches,targets}[46].man initext4.c initext6.c; 71 72distclean: clean 73 rm -f .*.d .*.dd; 74 75init%.o: ${srcdir}/init%.c 76 ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<; 77 78-include .*.d 79 80 81# 82# Shared libraries 83# 84lib%.so: lib%.oo 85 ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $<; 86 87lib%.oo: ${srcdir}/lib%.c 88 ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<; 89 90 91# 92# Static bits 93# 94# If static building is disabled, libext*.a will still be generated, 95# but will be empty. This is good since we can do with less case 96# handling code in the Makefiles. 97# 98lib%.o: ${srcdir}/lib%.c 99 ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<; 100 101libext4.a: initext4.o ${libext4_objs} 102 ${AM_VERBOSE_AR} ${AR} crs $@ $^; 103 104libext6.a: initext6.o ${libext6_objs} 105 ${AM_VERBOSE_AR} ${AR} crs $@ $^; 106 107initext_func := $(addprefix xt_,${pfx_build_mod}) $(addprefix ipt_,${pf4_build_mod}) 108initext6_func := $(addprefix xt_,${pfx_build_mod}) $(addprefix ip6t_,${pf6_build_mod}) 109 110.initext4.dd: FORCE 111 @echo "${initext_func}" >$@.tmp; \ 112 cmp -s $@ $@.tmp || mv $@.tmp $@; \ 113 rm -f $@.tmp; 114 115.initext6.dd: FORCE 116 @echo "${initext6_func}" >$@.tmp; \ 117 cmp -s $@ $@.tmp || mv $@.tmp $@; \ 118 rm -f $@.tmp; 119 120initext4.c: .initext4.dd 121 ${AM_VERBOSE_GEN} 122 @( \ 123 echo "" >$@; \ 124 for i in ${initext_func}; do \ 125 echo "extern void lib$${i}_init(void);" >>$@; \ 126 done; \ 127 echo -en "void init_extensions(void);\n" >>$@; \ 128 echo -en "void init_extensions(void)\n""{\n" >>$@; \ 129 for i in ${initext_func}; do \ 130 echo -e "\t""lib$${i}_init();" >>$@; \ 131 done; \ 132 echo "}" >>$@; \ 133 ); 134 135initext6.c: .initext6.dd 136 ${AM_VERBOSE_GEN} 137 @( \ 138 echo "" >$@; \ 139 for i in ${initext6_func}; do \ 140 echo "extern void lib$${i}_init(void);" >>$@; \ 141 done; \ 142 echo -en "void init_extensions(void);\n" >>$@; \ 143 echo -en "void init_extensions(void)\n""{\n" >>$@; \ 144 for i in ${initext6_func}; do \ 145 echo -e "\t""lib$${i}_init();" >>$@; \ 146 done; \ 147 echo "}" >>$@; \ 148 ); 149 150# 151# Manual pages 152# 153ex_matches = $(sort $(shell echo $(1) | grep -Eo '\b[a-z0-9]+\b')) 154ex_targets = $(sort $(shell echo $(1) | grep -Eo '\b[A-Z0-9]+\b')) 155man_run = \ 156 ${AM_VERBOSE_GEN} \ 157 for ext in $(1); do \ 158 f="${srcdir}/libxt_$$ext.man"; \ 159 if [ -f "$$f" ]; then \ 160 echo ".SS $$ext"; \ 161 cat "$$f"; \ 162 continue; \ 163 fi; \ 164 f="${srcdir}/libipt_$$ext.man"; \ 165 if [ -f "$$f" ]; then \ 166 echo ".SS $$ext"; \ 167 cat "$$f"; \ 168 continue; \ 169 fi; \ 170 f="${srcdir}/libip6t_$$ext.man"; \ 171 if [ -f "$$f" ]; then \ 172 echo ".SS $$ext"; \ 173 cat "$$f"; \ 174 continue; \ 175 fi; \ 176 done >$@; 177 178matches4.man: .initext4.dd $(wildcard ${srcdir}/lib*.man) 179 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod})) 180 181matches6.man: .initext6.dd $(wildcard ${srcdir}/lib*.man) 182 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf6_build_mod})) 183 184targets4.man: .initext4.dd $(wildcard ${srcdir}/lib*.man) 185 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod})) 186 187targets6.man: .initext6.dd $(wildcard ${srcdir}/lib*.man) 188 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf6_build_mod})) 189