01dd78f9e9
The old check assumed that @CLIENT@ does not contain birdc, which is not true in 2.0 branc. Thanks to Thomas Petazzoni for the bugreport and original patch.
217 lines
5.4 KiB
Makefile
217 lines
5.4 KiB
Makefile
# Makefile for the BIRD Internet Routing Daemon
|
|
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
|
|
# (c) 2016 Jan Moskyto Matejka <mq@ucw.cz>
|
|
|
|
# Disable build-in rules
|
|
MAKEFLAGS += -r
|
|
|
|
# Variable definitions
|
|
CPPFLAGS=-I$(objdir) -I$(srcdir) @CPPFLAGS@
|
|
CFLAGS=$(CPPFLAGS) @CFLAGS@
|
|
LDFLAGS=@LDFLAGS@
|
|
M4FLAGS=@M4FLAGS@
|
|
BISONFLAGS=@BISONFLAGS@
|
|
LIBS=@LIBS@
|
|
DAEMON_LIBS=@DAEMON_LIBS@
|
|
CLIENT_LIBS=@CLIENT_LIBS@
|
|
CC=@CC@
|
|
M4=@M4@
|
|
BISON=@BISON@
|
|
FLEX=@FLEX@
|
|
RANLIB=@RANLIB@
|
|
INSTALL=@INSTALL@
|
|
INSTALL_PROGRAM=@INSTALL_PROGRAM@
|
|
INSTALL_DATA=@INSTALL_DATA@
|
|
|
|
client=$(addprefix $(exedir)/,@CLIENT@)
|
|
daemon=$(exedir)/bird
|
|
protocols=@protocols@
|
|
|
|
prefix=@prefix@
|
|
exec_prefix=@exec_prefix@
|
|
bindir=@bindir@
|
|
sbindir=@sbindir@
|
|
sysconfdir=@sysconfdir@
|
|
localstatedir=@localstatedir@
|
|
docdir=@prefix@/doc
|
|
|
|
srcdir := @srcdir@
|
|
objdir := @objdir@
|
|
exedir := @exedir@
|
|
|
|
git-label:=$(strip $(shell cd $(srcdir) && [ "$$(git rev-parse --show-toplevel)" = "$$(readlink -f .)" ] && git describe --always --dirty=-x 2>/dev/null))
|
|
ifneq ($(git-label),)
|
|
CFLAGS += -DGIT_LABEL="$(git-label)"
|
|
endif
|
|
|
|
ifeq ($(objdir),.)
|
|
objdir := $(realpath .)
|
|
endif
|
|
|
|
ifeq ($(VERBOSE),)
|
|
E:=@
|
|
Q:=@
|
|
else
|
|
E:=@\#
|
|
Q:=
|
|
endif
|
|
|
|
ifneq ($(COLOR),)
|
|
CFLAGS += -fdiagnostics-color=always
|
|
endif
|
|
|
|
# Meta rules
|
|
docgoals := docs userdocs progdocs
|
|
testgoals := check test tests tests_run
|
|
cleangoals := clean distclean testsclean
|
|
.PHONY: all daemon cli $(docgoals) $(testgoals) $(cleangoals) tags cscope
|
|
all: daemon cli
|
|
|
|
daemon: $(daemon)
|
|
cli: $(client)
|
|
|
|
$(daemon): LIBS += $(DAEMON_LIBS)
|
|
|
|
# Include directories
|
|
dirs := client conf doc filter lib nest test $(addprefix proto/,$(protocols)) @sysdep_dirs@
|
|
|
|
conf-y-targets := $(addprefix $(objdir)/conf/,cf-parse.y keywords.h commands.h)
|
|
cf-local = $(conf-y-targets): $(s)config.Y
|
|
|
|
src-o-files = $(patsubst %.c,$(o)%.o,$(src))
|
|
tests-target-files = $(patsubst %.c,$(o)%,$(tests_src))
|
|
|
|
all-daemon = $(daemon): $(obj)
|
|
all-client = $(client): $(obj)
|
|
|
|
s = $(dir $(lastword $(MAKEFILE_LIST)))
|
|
ifeq ($(srcdir),.)
|
|
o = $(objdir)/$(s)
|
|
else
|
|
o = $(patsubst $(srcdir)%,$(objdir)%,$(s))
|
|
endif
|
|
|
|
define clean_in =
|
|
clean::
|
|
rm -f $(addprefix $(o),$(1))
|
|
endef
|
|
|
|
clean = $(eval $(call clean_in,$(1)))
|
|
|
|
include $(addsuffix /Makefile,$(addprefix $(srcdir)/,$(dirs)))
|
|
|
|
# Generic rules
|
|
# Object file rules
|
|
$(objdir)/%.o: $(srcdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -c $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
|
|
|
|
$(objdir)/%.o: $(objdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -c $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
|
|
|
|
# Debug: Preprocessed source rules
|
|
$(objdir)/%.E: $(srcdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -E $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -E $<
|
|
|
|
$(objdir)/%.E: $(objdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -E $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -E $<
|
|
|
|
# Debug: Assembler object rules
|
|
$(objdir)/%.S: $(srcdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -S $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -S $<
|
|
|
|
$(objdir)/%.S: $(objdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
|
|
$(E)echo CC -o $@ -S $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -S $<
|
|
|
|
|
|
|
|
$(objdir)/.dir-stamp:
|
|
$(E)echo MKDIR -p $(addprefix $(objdir)/,$(dirs) doc)
|
|
$(Q)mkdir -p $(addprefix $(objdir)/,$(dirs) doc)
|
|
$(Q)touch $@
|
|
|
|
$(client) $(daemon):
|
|
$(E)echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
$(objdir)/sysdep/paths.h: Makefile
|
|
echo >$@ "/* Generated by Makefile, don't edit manually! */"
|
|
echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
|
|
echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
|
|
if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
|
|
|
|
# Unit tests rules
|
|
|
|
tests_targets_ok = $(addsuffix .ok,$(tests_targets))
|
|
|
|
$(tests_targets): %: %.o $(tests_objs)
|
|
$(E)echo LD $(LDFLAGS) -o $@ $< "..." $(LIBS)
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
# Hack to avoid problems with tests linking everything
|
|
$(tests_targets): LIBS += $(DAEMON_LIBS)
|
|
|
|
$(tests_targets_ok): %.ok: %
|
|
$(Q)$* 2>/dev/null && touch $*.ok
|
|
|
|
test: testsclean check
|
|
check: tests tests_run
|
|
tests: $(tests_targets)
|
|
tests_run: $(tests_targets_ok)
|
|
|
|
# Finally include the computed dependencies
|
|
|
|
ifneq ($(filter-out $(cleangoals),$(MAKECMDGOALS)),)
|
|
-include $(shell find $(objdir) -name "*.d")
|
|
endif
|
|
|
|
ifeq ($(MAKECMDGOALS),)
|
|
-include $(shell find $(objdir) -name "*.d")
|
|
endif
|
|
|
|
tags:
|
|
cd $(srcdir) ; etags -lc `find $(dirs) -name *.[chY]`
|
|
|
|
cscope:
|
|
cd $(srcdir) ; find $(dirs) -name *.[chY] > cscope.files ; cscope -b
|
|
|
|
# Install
|
|
|
|
install: all
|
|
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
|
|
for BIN in bird @CLIENT@ ; do \
|
|
$(INSTALL_PROGRAM) $(exedir)/$$BIN $(DESTDIR)/$(sbindir)/$$BIN ; \
|
|
done
|
|
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
|
|
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
|
|
else \
|
|
echo "Not overwriting old bird.conf" ; \
|
|
fi
|
|
|
|
install-docs:
|
|
$(INSTALL) -d $(DESTDIR)/$(docdir)
|
|
$(INSTALL_DATA) $(objdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
|
|
|
|
# Cleanup
|
|
clean::
|
|
rm -f $(objdir)/sysdep/paths.h
|
|
rm -f $(addprefix $(exedir)/,bird birdc birdcl)
|
|
find $(objdir) -name "*.[od]" -exec rm -f '{}' '+'
|
|
|
|
testsclean:
|
|
rm -f $(tests_targets_ok)
|
|
|
|
ifeq ($(objdir),obj)
|
|
distclean: clean
|
|
rm -rf $(objdir)
|
|
rm -f config.log config.status configure Makefile
|
|
else
|
|
distclean: clean
|
|
rm -rf * .dir-stamp
|
|
rm -f config.log config.status configure Makefile
|
|
endif
|