1# uncomment this to get a fully statically linked version
2# NO_SHARED_LIBS = 1
3
4######################################################################
5# YOU SHOULD NOT NEED TO TOUCH ANYTHING BELOW THIS LINE
6######################################################################
7
8# Standard part of Makefile for topdir.
9TOPLEVEL_INCLUDED=YES
10
11ifndef KERNEL_DIR
12KERNEL_DIR=/usr/src/linux
13endif
14IPTABLES_VERSION:=1.2.7a
15OLD_IPTABLES_VERSION:=1.2.6a
16
17PREFIX:=/usr/local
18LIBDIR:=$(PREFIX)/lib
19BINDIR:=$(PREFIX)/sbin
20MANDIR:=$(PREFIX)/man
21INCDIR:=$(PREFIX)/include
22
23# directory for new iptables releases
24RELEASE_DIR:=/tmp
25
26# Need libc6 for this.  FIXME: Should covert to autoconf.
27# ifeq ($(shell [ -f /usr/include/netinet/ip6.h ] && echo YES), YES)
28# DO_IPV6=1
29# endif
30
31COPT_FLAGS:=-O2
32CFLAGS:=$(COPT_FLAGS) -Wall -Wunused -I$(KERNEL_DIR)/include -Iinclude/ -DIPTABLES_VERSION=\"$(IPTABLES_VERSION)\" #-g -DDEBUG #-pg # -DIPTC_DEBUG
33
34ifdef NO_SHARED_LIBS
35CFLAGS += -DNO_SHARED_LIBS=1
36endif
37
38ifndef NO_SHARED_LIBS
39DEPFILES = $(SHARED_LIBS:%.so=%.d)
40SH_CFLAGS:=$(CFLAGS) -fPIC
41STATIC_LIBS  =
42STATIC6_LIBS =
43LDFLAGS      = -rdynamic
44LDLIBS       = -ldl
45else
46DEPFILES = $(EXT_OBJS:%.o=%.d)
47STATIC_LIBS  = extensions/libext.a
48STATIC6_LIBS = extensions/libext6.a
49LDFLAGS      = -static
50LDLIBS       =
51endif
52
53EXTRAS+=iptables iptables.o
54EXTRA_INSTALLS+=$(DESTDIR)$(BINDIR)/iptables $(DESTDIR)$(MANDIR)/man8/iptables.8
55
56# No longer experimental.
57EXTRAS+=iptables-save iptables-restore
58EXTRA_INSTALLS+=$(DESTDIR)$(BINDIR)/iptables-save $(DESTDIR)$(BINDIR)/iptables-restore $(DESTDIR)$(MANDIR)/man8/iptables-restore.8 $(DESTDIR)$(MANDIR)/man8/iptables-save.8
59
60ifdef DO_IPV6
61EXTRAS+=ip6tables ip6tables.o
62EXTRA_INSTALLS+=$(DESTDIR)$(BINDIR)/ip6tables $(DESTDIR)$(MANDIR)/man8/ip6tables.8
63EXTRAS_EXP+=ip6tables-save ip6tables-restore
64EXTRA_INSTALLS_EXP+=$(DESTDIR)$(BINDIR)/ip6tables-save $(DESTDIR)$(BINDIR)/ip6tables-restore # $(DESTDIR)$(MANDIR)/man8/iptables-restore.8 $(DESTDIR)$(MANDIR)/man8/iptables-save.8 $(DESTDIR)$(MANDIR)/man8/ip6tables-save.8 $(DESTDIR)$(MANDIR)/man8/ip6tables-restore.8
65endif
66
67# Sparc64 hack
68ifeq ($(shell uname -m),sparc64)
69# The kernel is 64-bit, even though userspace is 32.
70CFLAGS+=-DIPT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32
71endif
72
73# HPPA hack
74ifeq ($(shell uname -m),parisc64)
75# The kernel is 64-bit, even though userspace is 32.
76CFLAGS+=-DIPT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32
77endif
78
79ifndef IPT_LIBDIR
80IPT_LIBDIR:=$(LIBDIR)/iptables
81endif
82
83.PHONY: default
84default: print-extensions all
85
86.PHONY: print-extensions
87print-extensions:
88ifneq ($(OPTIONALS),)
89	echo Extensions found: $(OPTIONALS)
90endif
91
92iptables.o: iptables.c
93	$(CC) $(CFLAGS) -DIPT_LIB_DIR=\"$(IPT_LIBDIR)\" -c -o $@ $<
94
95iptables: iptables-standalone.c iptables.o $(STATIC_LIBS) libiptc/libiptc.a
96	$(CC) $(CFLAGS) -DIPT_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
97
98$(DESTDIR)$(BINDIR)/iptables: iptables
99	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
100	cp $< $@
101
102iptables-save: iptables-save.c iptables.o $(STATIC_LIBS) libiptc/libiptc.a
103	$(CC) $(CFLAGS) -DIPT_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
104
105$(DESTDIR)$(BINDIR)/iptables-save: iptables-save
106	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
107	cp $< $@
108
109iptables-restore: iptables-restore.c iptables.o $(STATIC_LIBS) libiptc/libiptc.a
110	$(CC) $(CFLAGS) -DIPT_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
111
112$(DESTDIR)$(BINDIR)/iptables-restore: iptables-restore
113	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
114	cp $< $@
115
116ip6tables.o: ip6tables.c
117	$(CC) $(CFLAGS) -DIP6T_LIB_DIR=\"$(IPT_LIBDIR)\" -c -o $@ $<
118
119ip6tables: ip6tables-standalone.c ip6tables.o $(STATIC6_LIBS) libiptc/libiptc.a
120	$(CC) $(CFLAGS) -DIP6T_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
121
122$(DESTDIR)$(BINDIR)/ip6tables: ip6tables
123	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
124	cp $< $@
125
126ip6tables-save: ip6tables-save.c ip6tables.o $(STATIC6_LIBS) libiptc/libiptc.a
127	$(CC) $(CFLAGS) -DIP6T_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
128
129$(DESTDIR)$(BINDIR)/ip6tables-save: ip6tables-save
130	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
131	cp $< $@
132
133ip6tables-restore: ip6tables-restore.c ip6tables.o $(STATIC6_LIBS) libiptc/libiptc.a
134	$(CC) $(CFLAGS) -DIP6T_LIB_DIR=\"$(IPT_LIBDIR)\" $(LDFLAGS) -o $@ $^ $(LDLIBS)
135
136$(DESTDIR)$(BINDIR)/ip6tables-restore: ip6tables-restore
137	@[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
138	cp $< $@
139
140$(DESTDIR)$(MANDIR)/man8/%.8: %.8
141	@[ -d $(DESTDIR)$(MANDIR)/man8 ] || mkdir -p $(DESTDIR)$(MANDIR)/man8
142	cp $< $@
143
144EXTRA_DEPENDS+=iptables-standalone.d iptables.d
145
146iptables-standalone.d iptables.d: %.d: %.c
147	@-$(CC) -M -MG $(CFLAGS) $< | sed -e 's@^.*\.o:@$*.d $*.o:@' > $@
148
149
150# Development Targets
151.PHONY: install-devel-man3
152install-devel-man3: $(DEVEL_MAN3)
153	@[ -d $(DESTDIR)$(MANDIR)/man3 ] || mkdir -p $(DESTDIR)$(MANDIR)/man3
154	@cp -v $(DEVEL_MAN3) $(DESTDIR)$(MANDIR)/man3
155
156.PHONY: install-devel-headers
157install-devel-headers: $(DEVEL_HEADERS)
158	@[ -d $(DESTDIR)$(INCDIR) ] || mkdir -p $(DESTDIR)$(INCDIR)
159	@cp -v $(DEVEL_HEADERS) $(DESTDIR)$(INCDIR)
160
161.PHONY: install-devel-libs
162install-devel-libs: $(DEVEL_LIBS)
163	@[ -d $(DESTDIR)$(LIBDIR) ] || mkdir -p $(DESTDIR)$(LIBDIR)
164	@cp -v $(DEVEL_LIBS) $(DESTDIR)$(LIBDIR)
165
166.PHONY: install-devel
167install-devel: all install-devel-man3 install-devel-headers install-devel-libs
168
169.PHONY: distclean
170distclean: clean
171	@rm -f TAGS `find . -name '*~' -o -name '.*~'` `find . -name '*.rej'` `find . -name '*.d'` .makefirst
172
173# Rusty's distro magic.
174.PHONY: distrib
175distrib: check distclean delrelease $(RELEASE_DIR)/iptables-$(IPTABLES_VERSION).tar.bz2 diff md5sums # nowhitespace
176
177# Makefile must not define:
178# -g -pg -DIPTC_DEBUG
179.PHONY: check
180check:
181	@if echo $(CFLAGS) | egrep -e '-g|-pg|IPTC_DEBUG' >/dev/null; then echo Remove debugging flags; exit 1; else exit 0; fi
182
183.PHONY: nowhitespace
184nowhitespace:
185	@if grep -n '[ 	]$$' `find . -name 'Makefile' -o -name '*.[ch]'`; then exit 1; else exit 0; fi
186
187.PHONY: delrelease
188delrelease:
189	rm -f $(RELEASE_DIR)/iptables-$(IPTABLES_VERSION).tar.bz2
190
191$(RELEASE_DIR)/iptables-$(IPTABLES_VERSION).tar.bz2:
192	cd .. && ln -sf userspace iptables-$(IPTABLES_VERSION) && tar cvf - --exclude CVS iptables-$(IPTABLES_VERSION)/. | bzip2 -9 > $@ && rm iptables-$(IPTABLES_VERSION)
193
194.PHONY: diff
195diff: $(RELEASE_DIR)/iptables-$(IPTABLES_VERSION).tar.bz2
196	@mkdir /tmp/diffdir
197	@cd /tmp/diffdir && tar -x --bzip2 -f $(RELEASE_DIR)/iptables-$(IPTABLES_VERSION).tar.bz2
198	@set -e; cd /tmp/diffdir; tar -x --bzip2 -f $(RELEASE_DIR)/iptables-$(OLD_IPTABLES_VERSION).tar.bz2; echo Creating patch-iptables-$(OLD_IPTABLES_VERSION)-$(IPTABLES_VERSION).bz2; diff -urN iptables-$(OLD_IPTABLES_VERSION) iptables-$(IPTABLES_VERSION) | bzip2 -9 > $(RELEASE_DIR)/patch-iptables-$(OLD_IPTABLES_VERSION)-$(IPTABLES_VERSION).bz2
199	@rm -rf /tmp/diffdir
200
201.PHONY: md5sums
202md5sums:
203	cd $(RELEASE_DIR)/ && md5sum patch-iptables-*-$(IPTABLES_VERSION).bz2 iptables-$(IPTABLES_VERSION).tar.bz2
204
205# $(wildcard) fails wierdly with make v.3.78.1.
206include $(shell echo */Makefile)
207include Rules.make
208