# MiniUPnP project # (c) 2018-2024 Thomas Bernard # (c) 2015 Tomofumi Hayashi # http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ # Author : Tomofumi Hayashi # for use with GNU Make # # options can be passed to configure through CONFIG_OPTIONS : # $ CONFIG_OPTIONS="--ipv6 --igd2" make # # To install use : # $ DESTDIR=/dummyinstalldir make install # or : # $ INSTALLPREFIX=/usr/local make install # or : # $ make install # (default INSTALLPREFIX is /usr) # # CONFIG_OPTIONS ?= $(shell cat .configure.cache) ifeq ($(filter --firewall=nftables,$(CONFIG_OPTIONS)),) CONFIG_OPTIONS += --firewall=nftables endif # Make sucks, prove me wrong , := , ifeq ($(filter -D_FORTIFY_SOURCE=% -Wp$(,)-D_FORTIFY_SOURCE=%,$(CPPFLAGS) $(CFLAGS)),) CPPFLAGS += -D_FORTIFY_SOURCE=2 endif CPPFLAGS += -D_GNU_SOURCE #CFLAGS = -O -g #-DDEBUG CFLAGS ?= -Os CFLAGS += -fno-strict-aliasing CFLAGS += -fno-common CFLAGS += -fstack-protector -fPIE CFLAGS += -Wall CFLAGS += -Wextra -Wstrict-prototypes -Wdeclaration-after-statement #CFLAGS += -Wno-missing-field-initializers LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie CC ?= gcc RM = rm -f INSTALL = install STRIP ?= strip CP = cp DOXYGEN ?= doxygen DEPDIR := .depend DEPFLAGS = -MMD -MP -MF $(@:%.o=$(DEPDIR)/%.d) -MT $@ # -M : with system headers, -MM : without INSTALLPREFIX ?= $(PREFIX)/usr ETCDIR ?= $(PREFIX)/etc SBINDIR ?= $(INSTALLPREFIX)/sbin MANDIR ?= $(INSTALLPREFIX)/share/man LIBDIR ?= $(INSTALLPREFIX)/lib CONFIGDIR = $(ETCDIR)/miniupnpd INITDIR = $(ETCDIR)/init.d SYSTEMDUNITDIR = $(LIBDIR)/systemd/system include config.mk include $(SRCDIR)/gitrev.mk include $(SRCDIR)/objects.mk # sources in the netfilter_nft/ directory NETFILTEROBJS = nftnlrdr.o nftpinhole.o nfct_get.o nftnlrdr_misc.o ALLOBJS = $(BASEOBJS) $(LNXOBJS) $(NETFILTEROBJS) $(OTHEROBJS) NFT_SCRIPTS = $(addprefix $(SRCDIR)/netfilter_nft/scripts/, \ nft_init.sh nft_removeall.sh nft_flush.sh nft_delete_chain.sh) #LDLIBS += -lnfnetlink EXECUTABLES = miniupnpd miniupnpdctl ifeq ($(TESTS), 1) EXECUTABLES += testupnpdescgen testgetifstats \ testupnppermissions testgetifaddr \ testgetroute testasyncsendto testportinuse \ testssdppktgen testminissdp endif .PHONY: all clean install dox all: $(EXECUTABLES) clean: $(RM) $(ALLOBJS) $(RM) -r $(DEPDIR) $(RM) $(EXECUTABLES) $(RM) validateupnppermissions validategetifaddr validatessdppktgen $(RM) validateversion $(RM) -r dox/ install: miniupnpd $(SRCDIR)/miniupnpd.8 $(SRCDIR)/miniupnpd.conf \ $(NFT_SCRIPTS) \ $(SRCDIR)/linux/miniupnpd.init.d.script \ $(SRCDIR)/linux/miniupnpd.iptables.service $(STRIP) miniupnpd $(INSTALL) -D -m 0755 miniupnpd -t $(DESTDIR)$(SBINDIR) $(INSTALL) -D -m 0755 $(NFT_SCRIPTS) -t $(DESTDIR)$(CONFIGDIR) $(INSTALL) -D -m 0644 -b $(SRCDIR)/miniupnpd.conf -t $(DESTDIR)$(CONFIGDIR) sed -i -e "s/^uuid=[-0-9a-f]*/uuid=$(shell $(UUIDBIN))/" $(DESTDIR)$(CONFIGDIR)/miniupnpd.conf ifneq ($(USE_SYSTEMD),) $(INSTALL) -D -m 0644 $(SRCDIR)/linux/miniupnpd.nft.service $(DESTDIR)$(SYSTEMDUNITDIR)/miniupnpd.service sed -r \ -e "s|%BINDIR%|$(SBINDIR)|" \ -e "s|%CONFIGDIR%|$(CONFIGDIR)|" \ -i $(DESTDIR)/$(SYSTEMDUNITDIR)/miniupnpd.service sed -r \ -e "s|(#lease_file)=.*|\1=/var/lib/miniupnpd/upnp.leases|" \ -i $(DESTDIR)/$(CONFIGDIR)/miniupnpd.conf else $(INSTALL) -D -m 0755 $(SRCDIR)/linux/miniupnpd.init.d.script $(DESTDIR)$(INITDIR)/miniupnpd endif $(INSTALL) -D -m 0644 $(SRCDIR)/miniupnpd.8 -t $(DESTDIR)$(MANDIR)/man8 gzip -f $(DESTDIR)$(MANDIR)/man8/miniupnpd.8 include $(SRCDIR)/check.mk include $(SRCDIR)/common.mk testportinuse: testportinuse.o portinuse.o getifaddr.o \ nftnlrdr.o nftnlrdr_misc.o config.mk config.h: $(SRCDIR)/configure $(SRCDIR)/VERSION $(SHELL) $< $(CONFIG_OPTIONS) %.o: $(SRCDIR)/%.c $(DEPDIR)/%.d | $(DEPDIR) $(CC) -c $(DEPFLAGS) $(CFLAGS) $(CPPFLAGS) $< -o $@ %.o: $(SRCDIR)/linux/%.c $(DEPDIR)/%.d | $(DEPDIR) $(CC) -c $(DEPFLAGS) $(CFLAGS) $(CPPFLAGS) $< -o $@ %.o: $(SRCDIR)/netfilter_nft/%.c $(DEPDIR)/%.d | $(DEPDIR) $(CC) -c $(DEPFLAGS) $(CFLAGS) $(CPPFLAGS) $< -o $@ DEPFILES := $(ALLOBJS:%.o=$(DEPDIR)/%.d) $(DEPDIR): ; @mkdir -p $@ $(DEPFILES): -include $(wildcard $(DEPFILES))