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