# 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@ include sourcefiles.mk include 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) \ $(TEST_SOURCES) \ $(SERVAL_LIB_SOURCES) \ $(MONITOR_CLIENT_SRCS) \ $(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)) SERVALD_OBJS = \ $(addprefix $(OBJSDIR_SERVALD)/, $(notdir $(SQLITE3_SOURCES:.c=.o))) \ $(SERVAL_DAEMON_OBJS) TEST_OBJS = \ $(addprefix $(OBJSDIR_SERVALD)/, $(TEST_SOURCES:.c=.o)) \ $(addprefix $(OBJSDIR_SERVALD)/, $(SERVAL_CLIENT_SOURCES:.c=.o)) LIB_SERVAL_OBJS = \ $(addprefix $(OBJSDIR_LIB)/, $(SERVAL_CLIENT_SOURCES:.c=.o)) \ $(addprefix $(OBJSDIR_LIB)/, $(SERVAL_LIB_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)/, $(SERVAL_LIB_SOURCES:.c=.o)) \ $(addprefix $(OBJSDIR_LIB)/, $(MONITOR_CLIENT_SRCS:.c=.o)) SIMULATOR_OBJS = \ $(addprefix $(OBJSDIR_TOOLS)/, $(SIMULATOR_SOURCES:.c=.o)) CC= @CC@ LDFLAGS=@LDFLAGS@ @LIBS@ CFLAGS= -Isqlite-amalgamation-3100200 @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 CFLAGS+=-Wall -Werror # 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 INSTALL= install INSTALL_PROGRAM=$(INSTALL) INSTALL_DATA= $(INSTALL) -m 644 -include Makefile.dbg # More warnings, discover problems that only happen on some archs CFLAGS+=-Wextra # Security enhancements from Debian CFLAGS+=-Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 DEFS= @DEFS@ .PHONY: all test clean all: servald libserval.so libmonitorclient.so libmonitorclient.a test test: tfw_createfile directory_service fakeradio simulator serval-tests 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') | 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 .PRECIOUS: Makefile Makefile: Makefile.in config.status $(warning Makefile may be out of date, please run ./config.status) config.status: configure $(warning config.status may be out of date, please run ./configure) configure: configure.in $(warning configure may be out of date, please run autoreconf -f -i -I m4) $(OBJSDIR_TOOLS)/version.o: $(ALL_SOURCES) $(HDRS) version_servald.c version_string.sh $(wildcard VERSION.txt) COPYRIGHT.txt @echo CC version_servald.c @mkdir -p $(dir $@) @$(RM) $(@:.o=.gcno) $(@:.o=.gcda) @V=`./version_string.sh --ignore-untracked` \ && C="`sed -e :a -e N -e '$$!ba' -e 's/[\\\\"]/\\\\&/g' -e 's/\\n/\\\\n/g' COPYRIGHT.txt`" \ && $(CC) $(CFLAGS) $(DEFS) -c 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. $(OBJSDIR_SERVALD)/sqlite3.o: sqlite-amalgamation-3100200/sqlite3.c Makefile @echo SERVALD CC $< @mkdir -p $(dir $@) @$(RM) $(@:.o=.gcno) $(@:.o=.gcda) @$(CC) $(CFLAGS) -Wno-unused-value -Wno-empty-body $(DEFS) -c $< -o $@ # No object files in source directory! %.o: %.c $(OBJSDIR_TOOLS)/%.o: %.c @echo CC $< @mkdir -p $(dir $@) @$(RM) $(@:.o=.gcno) $(@:.o=.gcda) @$(CC) $(CFLAGS) $(DEFS) -c $< -o $@ $(OBJSDIR_SERVALD)/%.o: %.c @echo SERVALD CC $< @mkdir -p $(dir $@) @$(RM) $(@:.o=.gcno) $(@:.o=.gcda) @$(CC) $(CFLAGS) $(DEFS) -c $< -o $@ $(OBJSDIR_LIB)/%.o: %.c @echo LIB CC $< @mkdir -p $(dir $@) @$(RM) $(@:.o=.gcno) $(@:.o=.gcda) @$(CC) $(CFLAGS) $(DEFS) -c $< -o $@ $(SERVAL_DAEMON_OBJS): $(HDRS) $(SERVALD_OBJS): Makefile $(LIB_SERVAL_OBJS): $(HDRS) Makefile $(TEST_OBJS): $(HDRS) Makefile $(OBJSDIR_TOOLS)/tfw_createfile.o: str.h Makefile $(OBJSDIR_TOOLS)/directory_service.o: $(HDRS) Makefile $(MONITOR_CLIENT_OBJS): $(HDRS) Makefile $(SIMULATOR_OBJS): $(HDRS) Makefile servald: $(SERVALD_OBJS) $(OBJSDIR_TOOLS)/version.o @echo LINK $@ @$(CC) -Wall -o $@ $(SERVALD_OBJS) $(OBJSDIR_TOOLS)/version.o $(LDFLAGS) serval-tests: $(TEST_OBJS) $(OBJSDIR_TOOLS)/version.o @echo LINK $@ @$(CC) -Wall -o $@ $(TEST_OBJS) $(OBJSDIR_TOOLS)/version.o $(LDFLAGS) libserval.a: $(LIB_SERVAL_OBJS) $(OBJSDIR_TOOLS)/version.o @echo AR $@ @$(AR) -cr $@ $(LIB_SERVAL_OBJS) $(OBJSDIR_TOOLS)/version.o directory_service: $(OBJSDIR_TOOLS)/directory_service.o libserval.a @echo LINK $@ @$(CC) -Wall -o $@ $(OBJSDIR_TOOLS)/directory_service.o libserval.a $(LDFLAGS) tfw_createfile: $(OBJSDIR_TOOLS)/tfw_createfile.o libserval.a @echo LINK $@ @$(CC) -Wall -o $@ $(OBJSDIR_TOOLS)/tfw_createfile.o libserval.a $(LDFLAGS) fakeradio: $(OBJSDIR_TOOLS)/fakeradio.o libserval.a @echo LINK $@ @$(CC) -Wall -o $@ $(OBJSDIR_TOOLS)/fakeradio.o libserval.a $(LDFLAGS) simulator: $(SIMULATOR_OBJS) libserval.a @echo LINK $@ @$(CC) -Wall -o $@ $(SIMULATOR_OBJS) libserval.a $(LDFLAGS) 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 findPATH = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH))))) COPYRIGHT_TOOL := $(call findPATH,sp-copyright-tool) libserval.so: $(SERVALD_OBJS) $(OBJSDIR_TOOLS)/version.o @echo LINK $@ @$(CC) -Wall -shared -o $@ $(SERVALD_OBJS) $(OBJSDIR_TOOLS)/version.o $(LDFLAGS) libmonitorclient.so: $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o @echo LINK $@ @$(CC) -Wall -shared -o $@ $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o $(LDFLAGS) libmonitorclient.a: $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o @echo AR $@ @$(AR) -cr $@ $(MONITOR_CLIENT_OBJS) $(OBJSDIR_TOOLS)/version.o install: servald $(INSTALL_PROGRAM) -D servald $(DESTDIR)$(sbindir)/servald uninstall: $(RM) $(DESTDIR)$(sbindir)/servald clean: @$(RM) -r $(OBJSDIRS:%=%/*) \ servald libservald.so \ libserval.a libmonitorclient.so libmonitorclient.a \ fakeradio \ tfw_createfile