1# $Id: Makefile.linux,v 1.86 2014/04/09 07:22:28 nanard Exp $ 2# MiniUPnP project 3# (c) 2006-2015 Thomas Bernard 4# http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ 5# Author : Thomas Bernard 6# for use with GNU Make 7# 8# options can be passed to genconfig.sh through CONFIG_OPTIONS : 9# $ CONFIG_OPTIONS="--ipv6 --igd2" make -f Makefile.linux 10# 11# To install use : 12# $ DESTDIR=/dummyinstalldir make -f Makefile.linux install 13# or : 14# $ INSTALLPREFIX=/usr/local make -f Makefile.linux install 15# or : 16# $ make -f Makefile.linux install 17# (default INSTALLPREFIX is /usr) 18# 19# if your system hasn't iptables libiptc headers and binary correctly 20# installed, you need to get iptables sources from http://netfilter.org/ 21# ./configure them and build them then miniupnpd will build using : 22# $ IPTABLESPATH=/path/to/iptables-1.4.1 make -f Makefile.linux 23# 24#CFLAGS = -O -g -DDEBUG 25CFLAGS ?= -Os 26CFLAGS += -fno-strict-aliasing 27CFLAGS += -fno-common 28CPPFLAGS += -D_GNU_SOURCE 29CFLAGS += -Wall 30CFLAGS += $(EXTRACFLAGS) 31#CFLAGS += -Wextra -Wstrict-prototypes -Wdeclaration-after-statement 32#CFLAGS += -Wno-missing-field-initializers 33#CFLAGS += -ansi # iptables headers does use typeof which is a gcc extension 34CC ?= gcc 35RM = rm -f 36INSTALL = install 37STRIP ?= strip 38PKG_CONFIG ?= pkg-config 39CP = cp 40 41 42INSTALLPREFIX ?= $(PREFIX)/usr 43SBININSTALLDIR = $(INSTALLPREFIX)/sbin 44ETCINSTALLDIR = $(PREFIX)/etc/miniupnpd 45MANINSTALLDIR = $(INSTALLPREFIX)/share/man/man8 46 47BASEOBJS = miniupnpd.o upnphttp.o upnpdescgen.o upnpsoap.o \ 48 upnpreplyparse.o minixml.o portinuse.o \ 49 upnpredirect.o getifaddr.o daemonize.o upnpglobalvars.o \ 50 options.o upnppermissions.o minissdp.o natpmp.o pcpserver.o \ 51 upnpevents.o upnputils.o getconnstatus.o \ 52 upnppinhole.o pcplearndscp.o asyncsendto.o 53 54LNXOBJS = linux/getifstats.o linux/ifacewatcher.o linux/getroute.o 55NETFILTEROBJS = netfilter/iptcrdr.o netfilter/iptpinhole.o netfilter/nfct_get.o 56 57ALLOBJS = $(BASEOBJS) $(LNXOBJS) $(NETFILTEROBJS) 58 59PCFILE_FOUND := $(shell $(PKG_CONFIG) --exists libiptc; echo $$?) 60 61ifeq (${PCFILE_FOUND},0) 62 63IPTABLESVERSION := $(shell $(PKG_CONFIG) --modversion libiptc) 64IPTABLESVERSION1 := $(shell echo $(IPTABLESVERSION) | cut -d. -f1 ) 65IPTABLESVERSION2 := $(shell echo $(IPTABLESVERSION) | cut -d. -f2 ) 66IPTABLESVERSION3 := $(shell echo $(IPTABLESVERSION) | cut -d. -f3 ) 67# test if iptables version >= 1.4.3 68TEST := $(shell [ \( \( $(IPTABLESVERSION1) -ge 1 \) -a \( $(IPTABLESVERSION2) -ge 4 \) \) -a \( $(IPTABLESVERSION3) -ge 3 \) ] && echo 1 ) 69ifeq ($(TEST), 1) 70CPPFLAGS += -DIPTABLES_143 71endif 72 73CFLAGS += $(shell $(PKG_CONFIG) --cflags libiptc) 74LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libiptc) 75LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L libiptc) 76LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-other libiptc) 77else 78 79#TARGET_GENTOO := $(wildcard /etc/gentoo-release ) 80ifeq ($(TARGET_GENTOO),) 81LDLIBS ?= -liptc 82else # gentoo 83# the following is better, at least on gentoo with iptables 1.4.6 84# see http://miniupnp.tuxfamily.org/forum/viewtopic.php?p=1618 85# and http://miniupnp.tuxfamily.org/forum/viewtopic.php?p=2183 86LDLIBS ?= -lip4tc 87CPPFLAGS := -DIPTABLES_143 $(CPPFLAGS) 88endif 89 90ARCH ?= $(shell uname -m | grep -q "x86_64" && echo 64) 91ifdef IPTABLESPATH 92CPPFLAGS := $(CPPFLAGS) -I$(IPTABLESPATH)/include/ 93LDFLAGS := $(LDFLAFGS) -L$(IPTABLESPATH)/libiptc/ 94# get iptables version and set IPTABLES_143 macro if needed 95ifeq ($(TARGET_OPENWRT),) 96IPTABLESVERSION := $(shell grep "\#define VERSION" $(IPTABLESPATH)/config.h | tr -d \" |cut -d" " -f3 ) 97IPTABLESVERSION1 := $(shell echo $(IPTABLESVERSION) | cut -d. -f1 ) 98IPTABLESVERSION2 := $(shell echo $(IPTABLESVERSION) | cut -d. -f2 ) 99IPTABLESVERSION3 := $(shell echo $(IPTABLESVERSION) | cut -d. -f3 ) 100# test if iptables version >= 1.4.3 101TEST := $(shell [ \( \( $(IPTABLESVERSION1) -ge 1 \) -a \( $(IPTABLESVERSION2) -ge 4 \) \) -a \( $(IPTABLESVERSION3) -ge 3 \) ] && echo 1 ) 102ifeq ($(TEST), 1) 103CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 104# the following sucks, but works 105LDLIBS = $(IPTABLESPATH)/libiptc/.libs/libip4tc.o 106#LDLIBS = $(IPTABLESPATH)/libiptc/.libs/libiptc.a 107else # ifeq ($(TEST), 1) 108LDLIBS = $(IPTABLESPATH)/libiptc/libiptc.a 109endif # ifeq ($(TEST), 1) 110else # ($(TARGET_OPENWRT),) 111# openWRT : 112# check for system-wide iptables files. Test if iptables version >= 1.4.3 113# the following test has to be verified : 114TEST := $(shell test -f /usr/include/iptables/internal.h && grep -q "\#define IPTABLES_VERSION" /usr/include/iptables/internal.h && echo 1) 115ifeq ($(TEST), 1) 116CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 117LDLIBS = -liptc 118endif # ($(TEST), 1) 119TEST_LIB := $(shell test -f /usr/lib$(ARCH)/libiptc.a && echo 1) 120ifeq ($(TEST_LIB), 1) 121LDLIBS = -liptc /usr/lib$(ARCH)/libiptc.a 122endif # ($(TEST_LIB), 1) 123endif # ($(TARGET_OPENWRT),) 124else # ifdef IPTABLESPATH 125# IPTABLESPATH not defined 126# the following test has to be verified : 127TEST := $(shell test -f /usr/include/xtables.h && grep -q "XTABLES_VERSION_CODE" /usr/include/xtables.h && echo 1) 128ifeq ($(TEST), 1) 129CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 130LDLIBS = -liptc 131TESTIP4TC := $(shell test -f /lib/libip4tc.so && echo 1) 132ifeq ($(TESTIP4TC), 1) 133LDLIBS := $(LDLIBS) -lip4tc 134endif # ($(TESTIP4TC), 1) 135TESTIP6TC := $(shell test -f /lib/libip6tc.so && echo 1) 136ifeq ($(TESTIP6TC), 1) 137LDLIBS := $(LDLIBS) -lip6tc 138endif # ($(TESTIP6TC), 1) 139endif # ($(TEST), 1) 140endif # ifdef IPTABLESPATH 141endif # ifdef PCFILE_FOUND 142 143#LDLIBS += -lnfnetlink 144 145TEST := $(shell $(PKG_CONFIG) --atleast-version=1.0.2 libnetfilter_conntrack && $(PKG_CONFIG) --atleast-version=1.0.3 libmnl && echo 1) 146ifeq ($(TEST),1) 147CPPFLAGS += -DUSE_NFCT 148LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libmnl) 149LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libnetfilter_conntrack) 150endif # ($(TEST),1) 151 152LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libssl) 153 154TESTUPNPDESCGENOBJS = testupnpdescgen.o upnpdescgen.o 155 156EXECUTABLES = miniupnpd testupnpdescgen testgetifstats \ 157 testupnppermissions miniupnpdctl testgetifaddr \ 158 testgetroute testasyncsendto testportinuse 159 160.PHONY: all clean install depend genuuid 161 162all: $(EXECUTABLES) 163 164clean: 165 $(RM) $(ALLOBJS) 166 $(RM) $(EXECUTABLES) 167 $(RM) testupnpdescgen.o testgetifstats.o 168 $(RM) testupnppermissions.o testgetifaddr.o 169 $(RM) testgetroute.o testasyncsendto.o 170 $(RM) testportinuse.o 171 $(RM) miniupnpdctl.o 172 173install: miniupnpd miniupnpd.8 miniupnpd.conf genuuid \ 174 netfilter/iptables_init.sh netfilter/iptables_removeall.sh \ 175 netfilter/ip6tables_init.sh netfilter/ip6tables_removeall.sh \ 176 linux/miniupnpd.init.d.script 177 $(STRIP) miniupnpd 178 $(INSTALL) -d $(DESTDIR)$(SBININSTALLDIR) 179 $(INSTALL) miniupnpd $(DESTDIR)$(SBININSTALLDIR) 180 $(INSTALL) -d $(DESTDIR)$(ETCINSTALLDIR) 181 $(INSTALL) netfilter/iptables_init.sh $(DESTDIR)$(ETCINSTALLDIR) 182 $(INSTALL) netfilter/iptables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR) 183 $(INSTALL) netfilter/ip6tables_init.sh $(DESTDIR)$(ETCINSTALLDIR) 184 $(INSTALL) netfilter/ip6tables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR) 185 $(INSTALL) --mode=0644 -b miniupnpd.conf $(DESTDIR)$(ETCINSTALLDIR) 186 $(INSTALL) -d $(DESTDIR)$(PREFIX)/etc/init.d 187 $(INSTALL) linux/miniupnpd.init.d.script $(DESTDIR)$(PREFIX)/etc/init.d/miniupnpd 188 $(INSTALL) -d $(DESTDIR)$(MANINSTALLDIR) 189 $(INSTALL) --mode=0644 miniupnpd.8 $(DESTDIR)$(MANINSTALLDIR) 190 gzip -f $(DESTDIR)$(MANINSTALLDIR)/miniupnpd.8 191 192# genuuid is using the uuidgen CLI tool which is part of libuuid 193# from the e2fsprogs 194# 'cat /proc/sys/kernel/random/uuid' could be also used 195genuuid: 196ifeq ($(TARGET_OPENWRT),) 197 sed -i -e "s/^uuid=[-0-9a-f]*/uuid=`(genuuid||uuidgen||uuid) 2>/dev/null`/" miniupnpd.conf 198else 199 sed -i -e "s/^uuid=[-0-9a-f]*/uuid=`($(STAGING_DIR_HOST)/bin/genuuid||$(STAGING_DIR_HOST)/bin/uuidgen||$(STAGING_DIR_HOST)/bin/uuid) 2>/dev/null`/" miniupnpd.conf 200endif 201 202miniupnpd: $(BASEOBJS) $(LNXOBJS) $(NETFILTEROBJS) 203 204testupnpdescgen: $(TESTUPNPDESCGENOBJS) 205 206testgetifstats: testgetifstats.o linux/getifstats.o 207 208testupnppermissions: testupnppermissions.o upnppermissions.o 209 210testgetifaddr: testgetifaddr.o getifaddr.o 211 212testgetroute: testgetroute.o linux/getroute.o upnputils.o 213 214testasyncsendto: testasyncsendto.o asyncsendto.o upnputils.o \ 215 linux/getroute.o 216 217testportinuse: testportinuse.o portinuse.o getifaddr.o \ 218 netfilter/iptcrdr.o 219 220miniupnpdctl: miniupnpdctl.o 221 222config.h: genconfig.sh VERSION 223 ./genconfig.sh $(CONFIG_OPTIONS) 224 225depend: config.h 226 makedepend -f$(MAKEFILE_LIST) -Y \ 227 $(ALLOBJS:.o=.c) $(TESTUPNPDESCGENOBJS:.o=.c) \ 228 testgetifstats.c testupnppermissions.c testgetifaddr.c \ 229 testgetroute.c testasyncsendto.c testportinuse.c \ 230 miniupnpdctl.c 2>/dev/null 231 232# DO NOT DELETE 233 234miniupnpd.o: config.h macros.h upnpglobalvars.h upnppermissions.h 235miniupnpd.o: miniupnpdtypes.h upnphttp.h upnpdescgen.h miniupnpdpath.h 236miniupnpd.o: getifaddr.h upnpsoap.h options.h minissdp.h upnpredirect.h 237miniupnpd.o: upnppinhole.h daemonize.h upnpevents.h asyncsendto.h natpmp.h 238miniupnpd.o: pcpserver.h commonrdr.h upnputils.h ifacewatcher.h 239upnphttp.o: config.h upnphttp.h upnpdescgen.h miniupnpdpath.h upnpsoap.h 240upnphttp.o: upnpevents.h upnputils.h 241upnpdescgen.o: config.h getifaddr.h upnpredirect.h upnpdescgen.h 242upnpdescgen.o: miniupnpdpath.h upnpglobalvars.h upnppermissions.h 243upnpdescgen.o: miniupnpdtypes.h upnpdescstrings.h upnpurns.h getconnstatus.h 244upnpsoap.o: macros.h config.h upnpglobalvars.h upnppermissions.h 245upnpsoap.o: miniupnpdtypes.h upnphttp.h upnpsoap.h upnpreplyparse.h 246upnpsoap.o: upnpredirect.h upnppinhole.h getifaddr.h getifstats.h 247upnpsoap.o: getconnstatus.h upnpurns.h 248upnpreplyparse.o: upnpreplyparse.h minixml.h 249minixml.o: minixml.h 250portinuse.o: macros.h config.h upnpglobalvars.h upnppermissions.h 251portinuse.o: miniupnpdtypes.h getifaddr.h portinuse.h netfilter/iptcrdr.h 252portinuse.o: commonrdr.h 253upnpredirect.o: macros.h config.h upnpredirect.h upnpglobalvars.h 254upnpredirect.o: upnppermissions.h miniupnpdtypes.h upnpevents.h portinuse.h 255upnpredirect.o: netfilter/iptcrdr.h commonrdr.h 256getifaddr.o: config.h getifaddr.h 257daemonize.o: daemonize.h config.h 258upnpglobalvars.o: config.h upnpglobalvars.h upnppermissions.h 259upnpglobalvars.o: miniupnpdtypes.h upnpdescstrings.h 260options.o: config.h options.h upnppermissions.h upnpglobalvars.h 261options.o: miniupnpdtypes.h 262upnppermissions.o: config.h upnppermissions.h 263minissdp.o: config.h upnpdescstrings.h miniupnpdpath.h upnphttp.h 264minissdp.o: upnpglobalvars.h upnppermissions.h miniupnpdtypes.h minissdp.h 265minissdp.o: upnputils.h getroute.h asyncsendto.h codelength.h 266natpmp.o: macros.h config.h natpmp.h upnpglobalvars.h upnppermissions.h 267natpmp.o: miniupnpdtypes.h getifaddr.h upnpredirect.h commonrdr.h upnputils.h 268natpmp.o: portinuse.h asyncsendto.h 269pcpserver.o: config.h pcpserver.h macros.h upnpglobalvars.h upnppermissions.h 270pcpserver.o: miniupnpdtypes.h pcplearndscp.h upnpredirect.h commonrdr.h 271pcpserver.o: getifaddr.h asyncsendto.h pcp_msg_struct.h netfilter/iptcrdr.h 272pcpserver.o: commonrdr.h 273upnpevents.o: config.h upnpevents.h miniupnpdpath.h upnpglobalvars.h 274upnpevents.o: upnppermissions.h miniupnpdtypes.h upnpdescgen.h upnputils.h 275upnputils.o: config.h upnputils.h upnpglobalvars.h upnppermissions.h 276upnputils.o: miniupnpdtypes.h getroute.h 277getconnstatus.o: getconnstatus.h getifaddr.h 278upnppinhole.o: macros.h config.h upnpredirect.h upnpglobalvars.h 279upnppinhole.o: upnppermissions.h miniupnpdtypes.h upnpevents.h 280upnppinhole.o: netfilter/iptpinhole.h 281pcplearndscp.o: config.h upnpglobalvars.h upnppermissions.h miniupnpdtypes.h 282pcplearndscp.o: pcplearndscp.h 283asyncsendto.o: asyncsendto.h 284linux/getifstats.o: config.h getifstats.h 285linux/ifacewatcher.o: config.h ifacewatcher.h config.h minissdp.h 286linux/ifacewatcher.o: miniupnpdtypes.h getifaddr.h upnpglobalvars.h 287linux/ifacewatcher.o: upnppermissions.h natpmp.h 288linux/getroute.o: getroute.h upnputils.h 289netfilter/iptcrdr.o: macros.h config.h netfilter/iptcrdr.h commonrdr.h 290netfilter/iptcrdr.o: config.h upnpglobalvars.h upnppermissions.h 291netfilter/iptcrdr.o: miniupnpdtypes.h 292netfilter/iptpinhole.o: config.h netfilter/iptpinhole.h upnpglobalvars.h 293netfilter/iptpinhole.o: upnppermissions.h config.h miniupnpdtypes.h 294testupnpdescgen.o: macros.h config.h upnpdescgen.h upnpdescstrings.h 295testupnpdescgen.o: getifaddr.h 296upnpdescgen.o: config.h getifaddr.h upnpredirect.h upnpdescgen.h 297upnpdescgen.o: miniupnpdpath.h upnpglobalvars.h upnppermissions.h 298upnpdescgen.o: miniupnpdtypes.h upnpdescstrings.h upnpurns.h getconnstatus.h 299testgetifstats.o: getifstats.h 300testupnppermissions.o: upnppermissions.h config.h 301testgetifaddr.o: config.h getifaddr.h 302testgetroute.o: getroute.h upnputils.h upnpglobalvars.h upnppermissions.h 303testgetroute.o: config.h miniupnpdtypes.h 304testasyncsendto.o: miniupnpdtypes.h config.h upnputils.h asyncsendto.h 305testportinuse.o: macros.h config.h portinuse.h 306miniupnpdctl.o: macros.h 307