# # Configuration # # CC CC=gcc # Path to parent kernel include files directory LIBC_INCLUDE=/usr/include # Libraries ADDLIB= # Linker flags LDFLAG_STATIC=-Wl,-Bstatic LDFLAG_DYNAMIC=-Wl,-Bdynamic LDFLAG_CAP=-lcap LDFLAG_GNUTLS=-lgnutls-openssl LDFLAG_CRYPTO=-lcrypto LDFLAG_IDN=-lidn LDFLAG_RESOLV=-lresolv LDFLAG_SYSFS=-lsysfs # # Options # # Capability support (with libcap) [yes|static|no] USE_CAP=yes # sysfs support (with libsysfs - deprecated) [no|yes|static] USE_SYSFS=no # IDN support (experimental) [no|yes|static] USE_IDN=no # Do not use getifaddrs [no|yes|static] WITHOUT_IFADDRS=no # arping default device (e.g. eth0) [] ARPING_DEFAULT_DEVICE= # GNU TLS library for ping6 [yes|no|static] USE_GNUTLS=yes # Crypto library for ping6 [shared|static] USE_CRYPTO=shared # Resolv library for ping6 [yes|static] USE_RESOLV=yes # ping6 source routing (deprecated by RFC5095) [no|yes|RFC3542] ENABLE_PING6_RTHDR=no # rdisc server (-r option) support [no|yes] ENABLE_RDISC_SERVER=no # ------------------------------------- # What a pity, all new gccs are buggy and -Werror does not work. Sigh. # CCOPT=-fno-strict-aliasing -Wstrict-prototypes -Wall -Werror -g CCOPT=-fno-strict-aliasing -Wstrict-prototypes -Wall -g CCOPTOPT=-O3 GLIBCFIX=-D_GNU_SOURCE DEFINES= LDLIB= FUNC_LIB = $(if $(filter static,$(1)),$(LDFLAG_STATIC) $(2) $(LDFLAG_DYNAMIC),$(2)) # USE_GNUTLS: DEF_GNUTLS, LIB_GNUTLS # USE_CRYPTO: LIB_CRYPTO ifneq ($(USE_GNUTLS),no) LIB_CRYPTO = $(call FUNC_LIB,$(USE_GNUTLS),$(LDFLAG_GNUTLS)) DEF_CRYPTO = -DUSE_GNUTLS else LIB_CRYPTO = $(call FUNC_LIB,$(USE_CRYPTO),$(LDFLAG_CRYPTO)) endif # USE_RESOLV: LIB_RESOLV LIB_RESOLV = $(call FUNC_LIB,$(USE_RESOLV),$(LDFLAG_RESOLV)) # USE_CAP: DEF_CAP, LIB_CAP ifneq ($(USE_CAP),no) DEF_CAP = -DCAPABILITIES LIB_CAP = $(call FUNC_LIB,$(USE_CAP),$(LDFLAG_CAP)) endif # USE_SYSFS: DEF_SYSFS, LIB_SYSFS ifneq ($(USE_SYSFS),no) DEF_SYSFS = -DUSE_SYSFS LIB_SYSFS = $(call FUNC_LIB,$(USE_SYSFS),$(LDFLAG_SYSFS)) endif # USE_IDN: DEF_IDN, LIB_IDN ifneq ($(USE_IDN),no) DEF_IDN = -DUSE_IDN LIB_IDN = $(call FUNC_LIB,$(USE_IDN),$(LDFLAG_IDN)) endif # WITHOUT_IFADDRS: DEF_WITHOUT_IFADDRS ifneq ($(WITHOUT_IFADDRS),no) DEF_WITHOUT_IFADDRS = -DWITHOUT_IFADDRS endif # ENABLE_RDISC_SERVER: DEF_ENABLE_RDISC_SERVER ifneq ($(ENABLE_RDISC_SERVER),no) DEF_ENABLE_RDISC_SERVER = -DRDISC_SERVER endif # ENABLE_PING6_RTHDR: DEF_ENABLE_PING6_RTHDR ifneq ($(ENABLE_PING6_RTHDR),no) DEF_ENABLE_PING6_RTHDR = -DPING6_ENABLE_RTHDR ifeq ($(ENABLE_PING6_RTHDR),RFC3542) DEF_ENABLE_PING6_RTHDR += -DPINR6_ENABLE_RTHDR_RFC3542 endif endif # ------------------------------------- IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd IPV6_TARGETS=tracepath6 traceroute6 ping6 TARGETS=$(IPV4_TARGETS) $(IPV6_TARGETS) CFLAGS=$(CCOPTOPT) $(CCOPT) $(GLIBCFIX) $(DEFINES) LDLIBS=$(LDLIB) $(ADDLIB) UNAME_N:=$(shell uname -n) LASTTAG:=$(shell git describe HEAD | sed -e 's/-.*//') TODAY=$(shell date +%Y/%m/%d) DATE=$(shell date --date $(TODAY) +%Y%m%d) TAG:=$(shell date --date=$(TODAY) +s%Y%m%d) # ------------------------------------- .PHONY: all ninfod clean distclean man html check-kernel modules snapshot all: $(TARGETS) %.s: %.c $(COMPILE.c) $< $(DEF_$(patsubst %.o,%,$@)) -S -o $@ %.o: %.c $(COMPILE.c) $< $(DEF_$(patsubst %.o,%,$@)) -o $@ $(TARGETS): %: %.o $(LINK.o) $^ $(LIB_$@) $(LDLIBS) -o $@ # ------------------------------------- # arping DEF_arping = $(DEF_SYSFS) $(DEF_CAP) $(DEF_IDN) $(DEF_WITHOUT_IFADDRS) LIB_arping = $(LIB_SYSFS) $(LIB_CAP) $(LIB_IDN) ifneq ($(ARPING_DEFAULT_DEVICE),) DEF_arping += -DDEFAULT_DEVICE=\"$(ARPING_DEFAULT_DEVICE)\" endif # clockdiff DEF_clockdiff = $(DEF_CAP) LIB_clockdiff = $(LIB_CAP) # ping / ping6 DEF_ping_common = $(DEF_CAP) $(DEF_IDN) DEF_ping = $(DEF_CAP) $(DEF_IDN) $(DEF_WITHOUT_IFADDRS) LIB_ping = $(LIB_CAP) $(LIB_IDN) DEF_ping6 = $(DEF_CAP) $(DEF_IDN) $(DEF_WITHOUT_IFADDRS) $(DEF_ENABLE_PING6_RTHDR) $(DEF_CRYPTO) LIB_ping6 = $(LIB_CAP) $(LIB_IDN) $(LIB_RESOLV) $(LIB_CRYPTO) ping: ping_common.o ping6: ping_common.o ping.o ping_common.o: ping_common.h ping6.o: ping_common.h in6_flowlabel.h # rarpd DEF_rarpd = LIB_rarpd = # rdisc DEF_rdisc = $(DEF_ENABLE_RDISC_SERVER) LIB_rdisc = # tracepath DEF_tracepath = $(DEF_IDN) LIB_tracepath = $(LIB_IDN) # tracepath6 DEF_tracepath6 = $(DEF_IDN) LIB_tracepath6 = # traceroute6 DEF_traceroute6 = $(DEF_CAP) $(DEF_IDN) LIB_traceroute6 = $(LIB_CAP) $(LIB_IDN) # tftpd DEF_tftpd = DEF_tftpsubs = LIB_tftpd = tftpd: tftpsubs.o tftpd.o tftpsubs.o: tftp.h # ------------------------------------- # ninfod ninfod: @set -e; \ if [ ! -f ninfod/Makefile ]; then \ cd ninfod; \ ./configure; \ cd ..; \ fi; \ $(MAKE) -C ninfod # ------------------------------------- # modules / check-kernel are only for ancient kernels; obsolete check-kernel: ifeq ($(KERNEL_INCLUDE),) @echo "Please, set correct KERNEL_INCLUDE"; false else @set -e; \ if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \ echo "Please, set correct KERNEL_INCLUDE"; false; fi endif modules: check-kernel $(MAKE) KERNEL_INCLUDE=$(KERNEL_INCLUDE) -C Modules # ------------------------------------- man: $(MAKE) -C doc man html: $(MAKE) -C doc html clean: @rm -f *.o $(TARGETS) @$(MAKE) -C Modules clean @$(MAKE) -C doc clean @set -e; \ if [ -f ninfod/Makefile ]; then \ $(MAKE) -C ninfod clean; \ fi distclean: clean @set -e; \ if [ -f ninfod/Makefile ]; then \ $(MAKE) -C ninfod distclean; \ fi # ------------------------------------- snapshot: @if [ x"$(UNAME_N)" != x"pleiades" ]; then echo "Not authorized to advance snapshot"; exit 1; fi @echo "[$(TAG)]" > RELNOTES.NEW @echo >>RELNOTES.NEW @git log --no-merges $(LASTTAG).. | git shortlog >> RELNOTES.NEW @echo >> RELNOTES.NEW @cat RELNOTES >> RELNOTES.NEW @mv RELNOTES.NEW RELNOTES @sed -e "s/^%define ssdate .*/%define ssdate $(DATE)/" iputils.spec > iputils.spec.tmp @mv iputils.spec.tmp iputils.spec @echo "static char SNAPSHOT[] = \"$(TAG)\";" > SNAPSHOT.h @$(MAKE) -C doc snapshot @$(MAKE) man @git commit -a -m "iputils-$(TAG)" @git tag -s -m "iputils-$(TAG)" $(TAG) @git archive --format=tar --prefix=iputils-$(TAG)/ $(TAG) | bzip2 -9 > ../iputils-$(TAG).tar.bz2