| # | |
| # 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 | |