Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
# The default target of this Makefile is this
all::

# Define V=1 to have a more verbose compile.
#
# Define NO_PANEL if you don't want to use -lpanel.
#
# Define NEEDS_NCURSES5 if you need linking with ncurses5.
#
# Define NEEDS_NCURSESW5 if you need linking with ncursesw5.
#
# Define NEEDS_NCURSES6 if you need linking with ncurses6.
#
# Define NEEDS_NCURSESW6 if you need linking with ncursesw6.


VERSION-FILE: FORCE
	@$(SHELL_PATH) ./GEN-VERSION-FILE
-include VERSION-FILE

IPTRAF_CFLAGS := -std=gnu99 -D_GNU_SOURCE
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS) $(IPTRAF_CFLAGS)
ALL_LDFLAGS = $(LDFLAGS)
STRIP ?= strip

prefix = $(PREFIX)
sbindir_relative = sbin
ifndef SBINDIR
sbindir = $(prefix)/$(sbindir_relative)
else
sbindir = $(SBINDIR)
endif
mandir = $(prefix)/share/man
sharedir = $(prefix)/share
localedir = $(sharedir)/locale
lib = lib
man8dir = $(mandir)/man8

# DESTDIR=
pathsep = :

export prefix bindir sharedir sysconfdir gitwebdir localedir

RM = rm -f
INSTALL = install
RPMBUILD = rpmbuild
TAR = tar

### --- END CONFIGURATION SECTION ---


# Those must not be GNU-specific; they are shared with perl/ which may
# be built by a different compiler. (Note that this is an artifact now
# but it still might be nice to keep that distinction.)
BASIC_CFLAGS = -I. -Isrc/
BASIC_LDFLAGS =

# Guard against environment variables
iptraf-h :=
iptraf-o :=

ALL_PROGRAMS := iptraf-ng

ifndef SHELL_PATH
	SHELL_PATH = /bin/sh
endif

iptraf-h += src/tui/input.h
iptraf-h += src/tui/labels.h
iptraf-h += src/tui/listbox.h
iptraf-h += src/tui/menurt.h
iptraf-h += src/tui/msgboxes.h
iptraf-h += src/tui/winops.h
iptraf-h += src/iptraf-ng-compat.h
iptraf-h += src/parse-options.h
iptraf-h += src/packet.h
iptraf-h += src/tcptable.h
iptraf-h += src/othptab.h
iptraf-h += src/ifstats.h
iptraf-h += src/deskman.h
iptraf-h += src/hostmon.h
iptraf-h += src/fltedit.h
iptraf-h += src/cidr.h
iptraf-h += src/fltselect.h
iptraf-h += src/ipfilter.h
iptraf-h += src/fltmgr.h
iptraf-h += src/ipfrag.h
iptraf-h += src/serv.h
iptraf-h += src/servname.h
iptraf-h += src/timer.h
iptraf-h += src/ifaces.h
iptraf-h += src/error.h
iptraf-h += src/revname.h
iptraf-h += src/log.h
iptraf-h += src/pktsize.h
iptraf-h += src/landesc.h
iptraf-h += src/dirs.h
iptraf-h += src/getpath.h
iptraf-h += src/options.h
iptraf-h += src/promisc.h
iptraf-h += src/parseproto.h
iptraf-h += src/addproto.h
iptraf-h += src/arphdr.h
iptraf-h += src/attrs.h
iptraf-h += src/fltdefs.h
iptraf-h += src/logvars.h
iptraf-h += src/list.h
iptraf-h += src/counters.h
iptraf-h += src/rate.h
iptraf-h += src/built-in.h
iptraf-h += src/sockaddr.h
iptraf-h += src/capt.h
iptraf-h += src/capt-recvmsg.h
iptraf-h += src/capt-recvmmsg.h
iptraf-h += src/capt-mmap-v2.h
iptraf-h += src/capt-mmap-v3.h

iptraf-o += src/tui/input.o
iptraf-o += src/tui/labels.o
iptraf-o += src/tui/listbox.o
iptraf-o += src/tui/menurt.o
iptraf-o += src/tui/msgboxes.o
iptraf-o += src/tui/winops.o
iptraf-o += src/error.o
iptraf-o += src/log.o
iptraf-o += src/getpath.o
iptraf-o += src/parseproto.o
iptraf-o += src/fltselect.o
iptraf-o += src/ipfilter.o
iptraf-o += src/fltmgr.o
iptraf-o += src/ipfrag.o
iptraf-o += src/serv.o
iptraf-o += src/servname.o
iptraf-o += src/timer.o
iptraf-o += src/revname.o
iptraf-o += src/pktsize.o
iptraf-o += src/landesc.o
iptraf-o += src/options.o
iptraf-o += src/promisc.o
iptraf-o += src/ifaces.o
iptraf-o += src/usage.o
iptraf-o += src/iptraf.o
iptraf-o += src/itrafmon.o
iptraf-o += src/wrapper.o
iptraf-o += src/parse-options.o
iptraf-o += src/packet.o
iptraf-o += src/tcptable.o
iptraf-o += src/othptab.o
iptraf-o += src/ifstats.o
iptraf-o += src/detstats.o
iptraf-o += src/deskman.o
iptraf-o += src/hostmon.o
iptraf-o += src/fltedit.o
iptraf-o += src/cidr.o
iptraf-o += src/counters.o
iptraf-o += src/rate.o
iptraf-o += src/capture-pkt.o
iptraf-o += src/sockaddr.o
iptraf-o += src/capt.o
iptraf-o += src/capt-recvmsg.o
iptraf-o += src/capt-recvmmsg.o
iptraf-o += src/capt-mmap-v2.o
iptraf-o += src/capt-mmap-v3.o
iptraf-o += src/rvnamed.o

ifndef sysconfdir
ifeq ($(prefix),/usr)
sysconfdir = /etc
else
sysconfdir = etc
endif
endif

ifdef CHECK_HEADER_DEPENDENCIES
COMPUTE_HEADER_DEPENDENCIES = no
USE_COMPUTED_HEADER_DEPENDENCIES =
endif

ifndef COMPUTE_HEADER_DEPENDENCIES
COMPUTE_HEADER_DEPENDENCIES = auto
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
dep_check = $(shell $(CC) $(ALL_CFLAGS) \
	-c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \
	echo $$?)
ifeq ($(dep_check),0)
override COMPUTE_HEADER_DEPENDENCIES = yes
else
override COMPUTE_HEADER_DEPENDENCIES = no
endif
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
else
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no)
$(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \
(not "$(COMPUTE_HEADER_DEPENDENCIES)"))
endif
endif

ifndef NCURSES_LDFLAGS
ifdef NEEDS_NCURSES5
	NCURSES_CFLAGS := $(shell ncurses5-config --cflags 2>/dev/null)
	NCURSES_LDFLAGS := $(shell ncurses5-config --libs 2>/dev/null)
	ifndef NO_PANEL
		NCURSES_LDFLAGS += -lpanel
	endif
endif
endif

ifndef NCURSES_LDFLAGS
ifdef NEEDS_NCURSESW5
	NCURSES_CFLAGS := $(shell ncursesw5-config --cflags 2>/dev/null)
	NCURSES_LDFLAGS := $(shell ncursesw5-config --libs 2>/dev/null)
	ifndef NO_PANEL
		NCURSES_LDFLAGS += -lpanelw
	endif
endif
endif

ifndef NCURSES_LDFLAGS
ifdef NEEDS_NCURSES6
	NCURSES_CFLAGS := $(shell ncurses6-config --cflags 2>/dev/null)
	NCURSES_LDFLAGS := $(shell ncurses6-config --libs 2>/dev/null)
	ifndef NO_PANEL
		NCURSES_LDFLAGS += -lpanel
	endif
endif
endif

ifndef NCURSES_LDFLAGS
ifdef NEEDS_NCURSESW6
	NCURSES_CFLAGS := $(shell ncursesw6-config --cflags 2>/dev/null)
	NCURSES_LDFLAGS := $(shell ncursesw6-config --libs 2>/dev/null)
	ifndef NO_PANEL
		NCURSES_LDFLAGS += -lpanelw
	endif
endif
endif

# try find ncuses by autodetect
ifndef NCURSES_LDFLAGS
	ifneq ($(shell ncursesw6-config --libs 2>/dev/null),)
		NCURSES_CFLAGS := $(shell ncursesw6-config --cflags 2>/dev/null)
		NCURSES_LDFLAGS := $(shell ncursesw6-config --libs 2>/dev/null)
		ifndef NO_PANEL
			NCURSES_LDFLAGS += -lpanelw
		endif
	else ifneq ($(shell ncurses6-config --libs 2>/dev/null),)
		NCURSES_CFLAGS := $(shell ncurses6-config --cflags 2>/dev/null)
		NCURSES_LDFLAGS := $(shell ncurses6-config --libs 2>/dev/null)
		ifndef NO_PANEL
			NCURSES_LDFLAGS += -lpanel
		endif
	else ifneq ($(shell ncursesw5-config --libs 2>/dev/null),)
		NCURSES_CFLAGS := $(shell ncursesw5-config --cflags 2>/dev/null)
		NCURSES_LDFLAGS := $(shell ncursesw5-config --libs 2>/dev/null)
		ifndef NO_PANEL
			NCURSES_LDFLAGS += -lpanelw
		endif
	else ifneq ($(shell ncurses5-config --libs 2>/dev/null),)
		NCURSES_CFLAGS := $(shell ncurses5-config --cflags 2>/dev/null)
		NCURSES_LDFLAGS := $(shell ncurses5-config --libs 2>/dev/null)
		ifndef NO_PANEL
			NCURSES_LDFLAGS += -lpanel
		endif
	endif
endif

QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
QUIET_SUBDIR1  =

ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
	QUIET_CC       = @echo '   ' CC $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_GEN      = @echo '   ' GEN $@;
	QUIET_SUBDIR0  = +@subdir=
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
	export V
	export QUIET_GEN
	export QUIET_BUILT_IN
endif
endif


DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
sbindir_SQ = $(subst ','\'',$(sbindir))

ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

export TAR INSTALL DESTDIR SHELL_PATH

### Build rules

SHELL = $(SHELL_PATH)

#all:: shell_compatibility_test
#please_set_SHELL_PATH_to_a_more_modern_shell:
#	@$$(:)
#shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell


all:: $(ALL_PROGRAMS)

iptraf-ng: $(iptraf-o)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ \
		$(iptraf-o) $(ALL_LDFLAGS) $(NCURSES_LDFLAGS)

src/deskman.o src/iptraf.o: VERSION-FILE
src/deskman.o src/iptraf.o src/capture-pkt.o: EXTRA_CPPFLAGS = \
	-DIPTRAF_VERSION='"$(IPTRAF_VERSION)"' \
	-DIPTRAF_NAME='"iptraf-ng"'

OBJECTS := $(sort $(iptraf-o))

dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
$(dep_dirs):
	@mkdir -p $@

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
dep_file = $(dir $@).depend/$(notdir $@).d
dep_args = -MF $(dep_file) -MMD -MP
ifdef CHECK_HEADER_DEPENDENCIES
$(error cannot compute header dependencies outside a normal build. \
Please unset CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

.SUFFIXES:

ifdef PRINT_HEADER_DEPENDENCIES
$(OBJECTS): %.o: %.c FORCE
	echo $^

ifndef CHECK_HEADER_DEPENDENCIES
$(error cannot print header dependencies during a normal build. \
Please set CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

ifndef PRINT_HEADER_DEPENDENCIES
ifdef CHECK_HEADER_DEPENDENCIES
$(OBJECTS): %.o: %.c $(dep_files) FORCE
	@set -e; echo CHECK $@; \
	missing_deps="$(missing_deps)"; \
	if test "$$missing_deps"; \
	then \
		echo missing dependencies: $$missing_deps; \
		false; \
	fi
endif
endif

ifndef CHECK_HEADER_DEPENDENCIES
$(OBJECTS): %.o: %.c $(missing_dep_dirs)
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(NCURSES_CFLAGS) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
endif

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
endif
else
# Dependencies on header files, for platforms that do not support
# the gcc -MMD option.
#
# Dependencies on automatically generated headers such as common-cmds.h
# should _not_ be included here, since they are necessary even when
# building an object for the first time.
#
# XXX. Please check occasionally that these include all dependencies
# gcc detects!

$(OBJECTS): $(iptraf-h)
endif


### Maintainer's dist rules

IPTRAF_TARNAME = iptraf-ng-$(IPTRAF_VERSION)
dist:
	@mkdir -p $(IPTRAF_TARNAME)
	@cp --parents `git ls-files` $(IPTRAF_TARNAME)
	$(TAR) cf $(IPTRAF_TARNAME).tar $(IPTRAF_TARNAME)
	@$(RM) -rf $(IPTRAF_TARNAME)
	gzip -f -9 $(IPTRAF_TARNAME).tar

### Documentation rules
html: Documentation/book1.html
pdf: Documentation/manual.pdf

Documentation/book1.html: Documentation/manual.sgml
	cd Documentation && docbook2html manual.sgml

Documentation/manual.pdf: Documentation/manual.sgml
	cd Documentation && docbook2pdf manual.sgml

Documentation/manual.sgml: Documentation/manual.sgml.in VERSION-FILE
	cat $< | sed \
		-e s/@@version@@/`echo $(IPTRAF_VERSION) | cut -d. -f1-3`/ \
		-e s/@@major@@/`echo $(IPTRAF_VERSION) | cut -d. -f1-2`/ \
	> $@

## TODO: use asciidoc to generate mans

### Installation rules
install: all
	@echo $(DESTDIR_SQ)$(man8dir)
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sbindir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(sbindir_SQ)'
	$(INSTALL) -d -m 755 $(DESTDIR)$(man8dir)
	$(INSTALL) -m 644 src/iptraf-ng.8  $(DESTDIR)$(man8dir)

### Cleaning rules

distclean: clean

clean:
	$(RM) Documentation/manual.sgml
	$(RM) Documentation/manual.pdf
	$(RM) Documentation/*.html
	$(RM) $(iptraf-o)
	$(RM) $(ALL_PROGRAMS)
	$(RM) -r $(dep_dirs)
	$(RM) $(IPTRAF_TARNAME).tar.gz
	$(RM) VERSION-FILE

gtags:
	$(QUIET_GEN) gtags

.PHONY: clean distclean all install html pdf gtags FORCE