serval-dna/Makefile.in
2016-11-21 10:34:12 +10:30

337 lines
10 KiB
Makefile

# Makefile.in for Serval DNA
# vim: noet ts=8 sts=0 sw=8
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
sysconfdir=@sysconfdir@
localstatedir=@localstatedir@
SQLITE3_AMALGAMATION = sqlite-amalgamation-3140200
include $(SOURCE_PREFIX)sourcefiles.mk
include $(SOURCE_PREFIX)headerfiles.mk
OBJSDIR_SERVALD = objs_servald
OBJSDIR_LIB = objs_lib
OBJSDIR_TOOLS = objs
OBJSDIRS = $(OBJSDIR_SERVALD) $(OBJSDIR_LIB) $(OBJSDIR_TOOLS)
ALL_SOURCES = \
$(SERVAL_CLIENT_SOURCES) \
$(MDP_CLIENT_SOURCES) \
$(SERVAL_DAEMON_SOURCES) \
$(SERVAL_DAEMON_JNI_SOURCES) \
$(MONITOR_CLIENT_SRCS) \
$(CLIENT_ONLY_SOURCES) \
$(SIMULATOR_SOURCES) \
$(SQLITE3_SOURCES)
SERVAL_DAEMON_OBJS = \
$(addprefix $(OBJSDIR_SERVALD)/, $(SERVAL_CLIENT_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_SERVALD)/, $(MDP_CLIENT_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_SERVALD)/, $(SERVAL_DAEMON_SOURCES:.c=.o))
ifeq (@HAVE_JNI_H@,yes)
SERVAL_DAEMON_JNI_OBJS = \
$(addprefix $(OBJSDIR_SERVALD)/, $(SERVAL_DAEMON_JNI_SOURCES:.c=.o))
SERVAL_DAEMON_OBJS += $(SERVAL_DAEMON_JNI_OBJS)
endif
SQLITE3_OBJS = \
$(addprefix $(OBJSDIR_SERVALD)/, $(notdir $(SQLITE3_SOURCES:.c=.o)))
SERVALD_OBJS = \
$(SQLITE3_OBJS) \
$(SERVAL_DAEMON_OBJS)
LIB_SERVAL_OBJS = \
$(addprefix $(OBJSDIR_LIB)/, $(SERVAL_CLIENT_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_LIB)/, $(CLIENT_ONLY_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_LIB)/, $(MDP_CLIENT_SOURCES:.c=.o))
MONITOR_CLIENT_OBJS = \
$(addprefix $(OBJSDIR_LIB)/, $(SERVAL_CLIENT_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_LIB)/, $(CLIENT_ONLY_SOURCES:.c=.o)) \
$(addprefix $(OBJSDIR_LIB)/, $(MONITOR_CLIENT_SRCS:.c=.o))
SIMULATOR_OBJS = \
$(addprefix $(OBJSDIR_TOOLS)/, $(SIMULATOR_SOURCES:.c=.o))
PREFIXED_HEADERS = $(addprefix $(SOURCE_PREFIX), $(HDRS))
CC= @CC@
LDFLAGS=@LDFLAGS@ @LIBS@
CFLAGS= -I$(SOURCE_PREFIX)$(SQLITE3_AMALGAMATION) @CPPFLAGS@ @CFLAGS@
CFLAGS+=-DSYSCONFDIR="\"$(sysconfdir)\"" -DLOCALSTATEDIR="\"$(localstatedir)\""
CFLAGS+=-DSQLITE_THREADSAFE=0 \
-DSQLITE_OMIT_DATETIME_FUNCS \
-DSQLITE_OMIT_COMPILEOPTION_DIAGS \
-DSQLITE_OMIT_DEPRECATED \
-DSQLITE_OMIT_LOAD_EXTENSION \
-DSQLITE_OMIT_VIRTUALTABLE \
-DSQLITE_OMIT_AUTHORIZATION
CFLAGS+=-fPIC -DSERVAL_ENABLE_DEBUG=1 -Wall -Werror -Wextra -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2
# Solaris magic
CFLAGS+=-DSHA2_USE_INTTYPES_H -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D__EXTENSIONS__=1
# OSX magic to compensate for the Solaris magic
CFLAGS+=-D_DARWIN_C_SOURCE
CFLAGS_SQLITE= @CFLAGS_SQLITE@
JAVAC= @JAVAC@
INSTALL= install
INSTALL_PROGRAM=$(INSTALL)
INSTALL_DATA= $(INSTALL) -m 644
-include $(SOURCE_PREFIX)Makefile.dbg
DEFS= @DEFS@
CONFIG_H = @CONFIG_H@
.PHONY: all libs test install uninstall clean
all: libs servald servaldwrap test
libs: libservaldaemon.so \
libservalclient.so libservalclient.a \
libmonitorclient.so libmonitorclient.a
test: tfw_createfile directory_service fakeradio simulator serval-tests
install: servald
$(INSTALL_PROGRAM) -D servald $(DESTDIR)$(sbindir)/servald
uninstall:
$(RM) $(DESTDIR)$(sbindir)/servald
clean:
@$(RM) -r $(OBJSDIRS:%=%/*) \
servald \
libservaldaemon.so libservaldaemon.a \
libservalclient.so libservalclient.a \
libmonitorclient.so libmonitorclient.a \
tfw_createfile directory_service fakeradio simulator serval-tests
# Only provide Java targets if the Java compiler is available.
ifneq ($(JAVAC),)
all: java-api
clean: java-api-clean
.PHONY: java-api java-api-clean
ifneq ($(SOURCE_PREFIX:/%=),)
SOURCE_PREFIX_JAVA_API= $(SOURCE_PREFIX)../java-api/
else
SOURCE_PREFIX_JAVA_API= $(SOURCE_PREFIX)
endif
java-api:
@mkdir -p java-api
cd java-api && $(MAKE) SOURCE_PREFIX=$(SOURCE_PREFIX_JAVA_API) all
java-api-clean:
cd java-api 2>/dev/null && $(MAKE) SOURCE_PREFIX=$(SOURCE_PREFIX_JAVA_API) clean
endif # $(JAVAC)
# Source code test coverage support -- see doc/Testing.md
.PHONY: covzero covinit covhtml is_built_with_coverage has_coverage_data
covzero: | is_built_with_coverage
@echo REMOVE all .gcda files
@find $(OBJSDIRS) -type f -name '*.gcda' -print0 | xargs -0 $(RM)
covinit: servald-initial.info
covhtml: coverage_html/index.html
is_built_with_coverage:
@for obj in $(SERVALD_OBJS); do \
gcno="$${obj%.o}.gcno" ;\
if [ ! -r "$$gcno" ]; then \
echo "ERROR: servald has not been compiled for code coverage; missing $$gcno" ;\
exit 1 ;\
fi ;\
done
has_coverage_data: | is_built_with_coverage
@count=0; for obj in $(SERVALD_OBJS); do \
gcda="$${obj%.o}.gcda" ;\
[ -s "$$gcda" ] && count=$$(($$count + 1)) ;\
done ;\
if [ $$count -eq 0 ]; then \
echo "ERROR: no code coverage data; run some tests" ;\
exit 1 ;\
fi
servald-initial.info: Makefile servald | is_built_with_coverage
geninfo --quiet --initial --checksum --base-directory=$(abspath .) --no-external $(OBJSDIR_SERVALD) -o $@
servald-coverage.info: Makefile servald $(shell find $(OBJSDIR_SERVALD) -type f -name '*.gcda' 2>/dev/null) | has_coverage_data
geninfo --quiet --checksum --base-directory=$(abspath .) --no-external $(OBJSDIR_SERVALD) -o $@ 2>&1 | { grep -v 'WARNING: no data found for .*\.h$$' || true; }
@[ -s $@ ]
coverage_html/index.html: Makefile servald-initial.info servald-coverage.info
$(RM) -r coverage_html
genhtml --quiet servald-initial.info servald-coverage.info -o coverage_html
# Autconf support -- helpful messages to help avoid some common build mistakes.
.PRECIOUS: Makefile config.status $(SOURCE_PREFIX)configure
Makefile: $(SOURCE_PREFIX)Makefile.in config.status
$(warning Makefile may be out of date, please run ./config.status)
config.status: $(SOURCE_PREFIX)configure
$(warning config.status may be out of date, please run $(if $(SOURCE_PREFIX),$(SOURCE_PREFIX),./)configure)
$(SOURCE_PREFIX)configure: $(SOURCE_PREFIX)configure.ac
$(warning $(SOURCE_PREFIX)configure may be out of date, please run $(if $(SOURCE_PREFIX),cd $(SOURCE_PREFIX) && ,)autoreconf -f -i -I m4)
# Embed Serval DNA's version into libraries and executables.
$(OBJSDIR_TOOLS)/version.o: $(addprefix $(SOURCE_PREFIX), $(ALL_SOURCES)) \
$(PREFIXED_HEADERS) \
$(SOURCE_PREFIX)version_servald.c \
$(SOURCE_PREFIX)version_string.sh \
$(wildcard VERSION.txt) \
$(SOURCE_PREFIX)COPYRIGHT.txt
@echo CC version_servald.c
@mkdir -p $(dir $@)
@$(RM) $(@:.o=.gcno) $(@:.o=.gcda)
@V=`$(SOURCE_PREFIX)./version_string.sh --repository=$(SOURCE_PREFIX) --ignore-untracked` \
&& C="`sed -e :a -e N -e '$$!ba' -e 's/[\\\\"]/\\\\&/g' -e 's/\\n/\\\\n/g' $(SOURCE_PREFIX)COPYRIGHT.txt`" \
&& $(CC) $(CFLAGS) $(DEFS) -c $(SOURCE_PREFIX)version_servald.c -o $@ -DSERVALD_VERSION="\"$$V\"" -DSERVALD_COPYRIGHT="\"$$C\""
#' <-- fixes vim syntax highlighting
# Compile SQLITE as a special case, because it is imported source code.
# Instead of fixing warnings case-by-case in the sqlite.c source code, simply
# suppress the classes of warnings that cause compilation errors with
# -Werror.
$(SQLITE3_OBJS): $(OBJSDIR_SERVALD)/%.o: $(SOURCE_PREFIX)$(SQLITE3_AMALGAMATION)/%.c
@echo SERVALD CC $<
@mkdir -p $(dir $@)
@$(RM) $(@:.o=.gcno) $(@:.o=.gcda)
@$(CC) $(CFLAGS) $(CFLAGS_SQLITE) $(DEFS) -c $< -o $@
# No object files in source directory!
%.o: $(SOURCE_PREFIX)%.c
$(OBJSDIR_TOOLS)/%.o: $(SOURCE_PREFIX)%.c
@echo CC $<
@mkdir -p $(dir $@)
@$(RM) $(@:.o=.gcno) $(@:.o=.gcda)
@$(CC) $(CFLAGS) $(DEFS) -c $< -o $@
$(OBJSDIR_SERVALD)/%.o: $(SOURCE_PREFIX)%.c
@echo SERVALD CC $<
@mkdir -p $(dir $@)
@$(RM) $(@:.o=.gcno) $(@:.o=.gcda)
@$(CC) $(CFLAGS) $(DEFS) -c $< -o $@
$(OBJSDIR_LIB)/%.o: $(SOURCE_PREFIX)%.c
@echo LIB CC $<
@mkdir -p $(dir $@)
@$(RM) $(@:.o=.gcno) $(@:.o=.gcda)
@$(CC) $(CFLAGS) $(DEFS) -c $< -o $@
# Dependencies on header files. The following list of dependencies is too
# broad so it sometimes results in unnecessary re-compilation, but that is
# better than too narrow, which can result in missed re-compilation.
$(SERVAL_DAEMON_OBJS): Makefile $(CONFIG_H) $(PREFIXED_HEADERS)
$(SERVALD_OBJS): Makefile
$(LIB_SERVAL_OBJS): Makefile $(CONFIG_H) $(PREFIXED_HEADERS)
$(OBJSDIR_TOOLS)/tfw_createfile.o: Makefile str.h
$(OBJSDIR_TOOLS)/directory_service.o: Makefile $(CONFIG_H) $(PREFIXED_HEADERS)
$(MONITOR_CLIENT_OBJS): Makefile $(CONFIG_H) $(PREFIXED_HEADERS)
$(SIMULATOR_OBJS): Makefile $(CONFIG_H) $(PREFIXED_HEADERS)
# Rules for main targets.
libservaldaemon.a: \
$(SERVALD_OBJS) \
$(OBJSDIR_TOOLS)/version.o
@echo AR $@
@$(AR) -cr $@ $^
libservaldaemon.so: \
$(OBJSDIR_SERVALD)/servald_features.o \
$(SERVAL_DAEMON_JNI_OBJS) \
libservaldaemon.a
@echo LINK $@
@$(CC) -Wall -shared -o $@ $^ $(LDFLAGS)
servald: $(OBJSDIR_SERVALD)/servald_features.o libservaldaemon.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
servaldwrap: $(OBJSDIR_SERVALD)/servalwrap.o $(OBJSDIR_TOOLS)/version.o
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
serval-tests: $(OBJSDIR_SERVALD)/test_features.o libservaldaemon.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
directory_service: $(OBJSDIR_TOOLS)/directory_service.o libservalclient.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
tfw_createfile: $(OBJSDIR_TOOLS)/tfw_createfile.o libservalclient.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
fakeradio: $(OBJSDIR_TOOLS)/fakeradio.o libservalclient.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
simulator: $(SIMULATOR_OBJS) libservalclient.a
@echo LINK $@
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
libservalclient.a: $(LIB_SERVAL_OBJS) $(OBJSDIR_TOOLS)/version.o
@echo AR $@
@$(AR) -cr $@ $^
libservalclient.so: $(LIB_SERVAL_OBJS) $(OBJSDIR_TOOLS)/version.o
@echo LINK $@
@$(CC) -Wall -shared -o $@ $^ $(LDFLAGS)
libmonitorclient.a: $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o
@echo AR $@
@$(AR) -cr $@ $^
libmonitorclient.so: $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o
@echo LINK $@
@$(CC) -Wall -shared -o $@ $^ $(LDFLAGS)
# Helpful target to update the COPYRIGHT.txt file by harvesting copyright
# information from the contents of all the source and header files. This
# should be run periodically and the results reviewed, manually adjusted and
# committed to the repository.
findPATH = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
COPYRIGHT_TOOL := $(call findPATH,sp-copyright-tool)
copyright:
@if [ -x "$(COPYRIGHT_TOOL)" ]; then \
echo GENERATE COPYRIGHT.txt; \
$(COPYRIGHT_TOOL) -o COPYRIGHT.txt condense *.c *.h; \
else \
echo 'sp-copyright-tool is not in $$PATH; COPYRIGHT.txt not updated'; \
fi