2014-05-28 08:10:47 +00:00
# Makefile.in for Serval DNA
# vim: noet ts=8 sts=0 sw=8
2013-10-13 08:09:17 +00:00
prefix = @prefix@
2013-12-03 03:59:13 +00:00
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
2014-03-26 05:05:43 +00:00
sysconfdir = @sysconfdir@
localstatedir = @localstatedir@
2013-10-13 08:09:17 +00:00
2016-09-19 02:51:57 +00:00
SQLITE3_AMALGAMATION = sqlite-amalgamation-3140200
2012-10-24 18:00:14 +00:00
i n c l u d e s o u r c e f i l e s . m k
i n c l u d e h e a d e r f i l e s . m k
2012-03-14 22:54:31 +00:00
2014-05-28 08:10:47 +00:00
OBJSDIR_SERVALD = objs_servald
OBJSDIR_LIB = objs_lib
OBJSDIR_TOOLS = objs
OBJSDIRS = $( OBJSDIR_SERVALD) $( OBJSDIR_LIB) $( OBJSDIR_TOOLS)
2014-12-01 02:18:46 +00:00
ALL_SOURCES = \
$( SERVAL_CLIENT_SOURCES) \
$( MDP_CLIENT_SOURCES) \
$( SERVAL_DAEMON_SOURCES) \
2016-10-12 06:38:26 +00:00
$( SERVAL_DAEMON_JNI_SOURCES) \
2014-12-01 02:18:46 +00:00
$( TEST_SOURCES) \
$( SERVAL_LIB_SOURCES) \
$( MONITOR_CLIENT_SRCS) \
$( SIMULATOR_SOURCES) \
$( SQLITE3_SOURCES)
2016-09-19 02:51:57 +00:00
2014-05-23 08:19:00 +00:00
SERVAL_DAEMON_OBJS = \
2014-05-28 08:10:47 +00:00
$( addprefix $( OBJSDIR_SERVALD) /, $( SERVAL_CLIENT_SOURCES:.c= .o) ) \
$( addprefix $( OBJSDIR_SERVALD) /, $( MDP_CLIENT_SOURCES:.c= .o) ) \
2016-10-12 06:38:26 +00:00
$( addprefix $( OBJSDIR_SERVALD) /, $( SERVAL_DAEMON_SOURCES:.c= .o) ) \
$( addprefix $( OBJSDIR_SERVALD) /, $( SERVAL_DAEMON_JNI_SOURCES:.c= .o) )
2016-09-19 02:51:57 +00:00
SQLITE3_OBJS = \
$( addprefix $( OBJSDIR_SERVALD) /, $( notdir $( SQLITE3_SOURCES:.c= .o) ) )
2014-05-23 08:19:00 +00:00
SERVALD_OBJS = \
2016-09-19 02:51:57 +00:00
$( SQLITE3_OBJS) \
2014-05-28 08:10:47 +00:00
$( SERVAL_DAEMON_OBJS)
2014-12-01 02:18:46 +00:00
TEST_OBJS = \
$( addprefix $( OBJSDIR_SERVALD) /, $( TEST_SOURCES:.c= .o) ) \
$( addprefix $( OBJSDIR_SERVALD) /, $( SERVAL_CLIENT_SOURCES:.c= .o) )
2014-05-23 08:19:00 +00:00
LIB_SERVAL_OBJS = \
2014-05-28 08:10:47 +00:00
$( addprefix $( OBJSDIR_LIB) /, $( SERVAL_CLIENT_SOURCES:.c= .o) ) \
$( addprefix $( OBJSDIR_LIB) /, $( SERVAL_LIB_SOURCES:.c= .o) ) \
$( addprefix $( OBJSDIR_LIB) /, $( MDP_CLIENT_SOURCES:.c= .o) )
2014-05-23 08:19:00 +00:00
MONITOR_CLIENT_OBJS = \
2014-05-28 08:10:47 +00:00
$( addprefix $( OBJSDIR_LIB) /, $( SERVAL_CLIENT_SOURCES:.c= .o) ) \
2016-01-18 10:46:01 +00:00
$( addprefix $( OBJSDIR_LIB) /, $( SERVAL_LIB_SOURCES:.c= .o) ) \
2014-05-28 08:10:47 +00:00
$( addprefix $( OBJSDIR_LIB) /, $( MONITOR_CLIENT_SRCS:.c= .o) )
2014-05-23 08:19:00 +00:00
SIMULATOR_OBJS = \
2014-05-28 08:10:47 +00:00
$( addprefix $( OBJSDIR_TOOLS) /, $( SIMULATOR_SOURCES:.c= .o) )
2016-09-27 07:26:04 +00:00
PREFIXED_HEADERS = $( addprefix $( SOURCE_PREFIX) , $( HDRS) )
2014-05-28 08:10:47 +00:00
CC = @CC@
2012-03-14 22:54:31 +00:00
2014-06-11 10:42:56 +00:00
LDFLAGS = @LDFLAGS@ @LIBS@
2012-03-14 22:54:31 +00:00
2016-09-27 07:26:04 +00:00
CFLAGS = -I$( SOURCE_PREFIX) $( SQLITE3_AMALGAMATION) @CPPFLAGS@ @CFLAGS@
2014-06-30 00:44:12 +00:00
CFLAGS += -DSYSCONFDIR= " \" $( sysconfdir) \" " -DLOCALSTATEDIR= " \" $( localstatedir) \" "
2016-09-19 02:51:57 +00:00
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
2012-08-06 07:33:00 +00:00
CFLAGS += -fPIC
2015-10-19 02:31:44 +00:00
CFLAGS += -Wall -Werror
2012-09-05 09:23:22 +00:00
# Solaris magic
CFLAGS += -DSHA2_USE_INTTYPES_H -D_XOPEN_SOURCE= 600 -D_XOPEN_SOURCE_EXTENDED= 1 -D__EXTENSIONS__= 1
2012-09-06 05:02:17 +00:00
# OSX magic to compensate for the Solaris magic
CFLAGS += -D_DARWIN_C_SOURCE
2016-09-19 02:51:57 +00:00
CFLAGS_SQLITE = @CFLAGS_SQLITE@
2013-12-03 03:59:13 +00:00
INSTALL = install
INSTALL_PROGRAM = $( INSTALL)
INSTALL_DATA = $( INSTALL) -m 644
2016-09-27 07:26:04 +00:00
- i n c l u d e $( SOURCE_PREFIX ) M a k e f i l e . d b g
2012-06-15 05:31:14 +00:00
2013-10-13 07:01:05 +00:00
# More warnings, discover problems that only happen on some archs
CFLAGS += -Wextra
# Security enhancements from Debian
2014-02-25 04:17:00 +00:00
CFLAGS += -Wformat -Werror= format-security -D_FORTIFY_SOURCE= 2
2013-10-13 07:01:05 +00:00
2012-06-15 05:31:14 +00:00
DEFS = @DEFS@
2012-04-23 10:47:11 +00:00
2016-09-27 07:26:04 +00:00
.PHONY : all libs test install uninstall clean
all : libs servald servaldwrap test
2013-08-19 07:29:10 +00:00
2016-09-27 07:26:04 +00:00
libs : libservald .so libservald .a \
libservalclient.so libservalclient.a \
libmonitorclient.so libmonitorclient.a
2013-08-19 04:05:58 +00:00
2014-12-01 02:18:46 +00:00
test : tfw_createfile directory_service fakeradio simulator serval -tests
2012-03-14 22:54:31 +00:00
2016-09-27 07:26:04 +00:00
install : servald
$( INSTALL_PROGRAM) -D servald $( DESTDIR) $( sbindir) /servald
uninstall :
$( RM) $( DESTDIR) $( sbindir) /servald
clean :
@$( RM) -r $( OBJSDIRS:%= %/*) \
servald \
libservald.so libservald.a \
libservalclient.so libservalclient.a \
libmonitorclient.so libmonitorclient.a \
tfw_createfile directory_service fakeradio simulator serval-tests
# Source code test coverage support -- see doc/Testing.md
.PHONY : covzero covinit covhtml is_built_with_coverage has_coverage_data
2014-05-28 08:10:47 +00:00
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
2016-09-27 07:26:04 +00:00
servald-initial.info : $( SOURCE_PREFIX ) Makefile servald | is_built_with_coverage
2014-05-28 08:10:47 +00:00
geninfo --quiet --initial --checksum --base-directory= $( abspath .) --no-external $( OBJSDIR_SERVALD) -o $@
2016-09-27 07:26:04 +00:00
servald-coverage.info : $( SOURCE_PREFIX ) Makefile servald $( shell find $ ( OBJSDIR_SERVALD ) -type f -name '*.gcda ' 2>/dev /null ) | has_coverage_data
2014-05-28 08:10:47 +00:00
geninfo --quiet --checksum --base-directory= $( abspath .) --no-external $( OBJSDIR_SERVALD) -o $@ 2>& 1 | { grep -v 'WARNING: no data found for .*\.h$$' || true; }
@[ -s $@ ]
2016-09-27 07:26:04 +00:00
coverage_html/index.html : $( SOURCE_PREFIX ) Makefile servald -initial .info servald -coverage .info
2014-05-28 08:10:47 +00:00
$( RM) -r coverage_html
genhtml --quiet servald-initial.info servald-coverage.info -o coverage_html
2016-09-27 07:26:04 +00:00
# Autconf support -- helpful messages to help avoid some common build mistakes.
.PRECIOUS : $( SOURCE_PREFIX ) Makefile $( SOURCE_PREFIX ) config .status $( SOURCE_PREFIX ) configure
$(SOURCE_PREFIX)Makefile : $( SOURCE_PREFIX ) Makefile .in $( SOURCE_PREFIX ) config .status
2014-11-30 23:49:09 +00:00
$( warning Makefile may be out of date, please run ./config.status)
2012-04-20 07:40:38 +00:00
2016-09-27 07:26:04 +00:00
$(SOURCE_PREFIX)config.status : $( SOURCE_PREFIX ) configure
2014-11-30 23:49:09 +00:00
$( warning config.status may be out of date, please run ./configure)
2016-09-27 07:26:04 +00:00
$(SOURCE_PREFIX)configure : $( SOURCE_PREFIX ) configure .ac
2016-01-19 00:53:04 +00:00
$( warning configure may be out of date, please run autoreconf -f -i -I m4)
2014-05-23 08:19:00 +00:00
2016-09-27 07:26:04 +00:00
# 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
2013-08-19 04:05:58 +00:00
@echo CC version_servald.c
2014-07-02 00:39:13 +00:00
@mkdir -p $( dir $@ )
2014-05-28 08:10:47 +00:00
@$( RM) $( @:.o= .gcno) $( @:.o= .gcda)
2016-09-27 07:26:04 +00:00
@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\" "
2013-08-19 04:05:58 +00:00
2014-05-23 08:19:00 +00:00
#' <-- fixes vim syntax highlighting
2014-05-09 05:57:23 +00:00
2016-02-01 03:12:38 +00:00
# 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.
2016-09-27 07:26:04 +00:00
$(SQLITE3_OBJS) : $( OBJSDIR_SERVALD ) /%.o : $( SOURCE_PREFIX ) $( SQLITE 3_AMALGAMATION ) /%.c
2014-05-23 08:19:00 +00:00
@echo SERVALD CC $<
@mkdir -p $( dir $@ )
2014-05-28 08:10:47 +00:00
@$( RM) $( @:.o= .gcno) $( @:.o= .gcda)
2016-09-19 02:51:57 +00:00
@$( CC) $( CFLAGS) $( CFLAGS_SQLITE) $( DEFS) -c $< -o $@
2014-05-23 08:19:00 +00:00
# No object files in source directory!
2016-09-27 07:26:04 +00:00
%.o : $( SOURCE_PREFIX ) %.c
2014-05-09 05:57:23 +00:00
2016-09-27 07:26:04 +00:00
$(OBJSDIR_TOOLS)/%.o : $( SOURCE_PREFIX ) %.c
2012-05-10 03:53:06 +00:00
@echo CC $<
2014-05-23 08:19:00 +00:00
@mkdir -p $( dir $@ )
2014-05-29 01:34:09 +00:00
@$( RM) $( @:.o= .gcno) $( @:.o= .gcda)
2014-05-23 08:19:00 +00:00
@$( CC) $( CFLAGS) $( DEFS) -c $< -o $@
2016-09-27 07:26:04 +00:00
$(OBJSDIR_SERVALD)/%.o : $( SOURCE_PREFIX ) %.c
2014-05-23 08:19:00 +00:00
@echo SERVALD CC $<
@mkdir -p $( dir $@ )
2014-05-29 01:34:09 +00:00
@$( RM) $( @:.o= .gcno) $( @:.o= .gcda)
2014-05-23 08:19:00 +00:00
@$( CC) $( CFLAGS) $( DEFS) -c $< -o $@
2016-09-27 07:26:04 +00:00
$(OBJSDIR_LIB)/%.o : $( SOURCE_PREFIX ) %.c
2014-05-23 08:19:00 +00:00
@echo LIB CC $<
@mkdir -p $( dir $@ )
2014-05-29 01:34:09 +00:00
@$( RM) $( @:.o= .gcno) $( @:.o= .gcda)
2012-10-18 06:40:45 +00:00
@$( CC) $( CFLAGS) $( DEFS) -c $< -o $@
2012-03-14 22:54:31 +00:00
2016-09-27 07:26:04 +00:00
# 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) : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
$(SERVALD_OBJS) : $( SOURCE_PREFIX ) Makefile
$(LIB_SERVAL_OBJS) : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
$(TEST_OBJS) : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
$(OBJSDIR_TOOLS)/tfw_createfile.o : $( SOURCE_PREFIX ) Makefile $( SOURCE_PREFIX ) str .h
$(OBJSDIR_TOOLS)/directory_service.o : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
$(MONITOR_CLIENT_OBJS) : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
$(SIMULATOR_OBJS) : $( SOURCE_PREFIX ) Makefile $( PREFIXED_HEADERS )
# Rules for main targets.
2012-11-22 07:48:00 +00:00
2014-05-28 08:10:47 +00:00
servald : $( SERVALD_OBJS ) $( OBJSDIR_TOOLS ) /version .o
2012-05-10 03:53:06 +00:00
@echo LINK $@
2014-06-11 10:42:56 +00:00
@$( CC) -Wall -o $@ $( SERVALD_OBJS) $( OBJSDIR_TOOLS) /version.o $( LDFLAGS)
2014-05-23 08:19:00 +00:00
2016-09-27 07:26:04 +00:00
servaldwrap : $( OBJSDIR_SERVALD ) /servalwrap .o $( OBJSDIR_TOOLS ) /version .o
@echo LINK $@
@$( CC) -Wall -o $@ $^ $( LDFLAGS)
2014-12-01 02:18:46 +00:00
serval-tests : $( TEST_OBJS ) $( OBJSDIR_TOOLS ) /version .o
@echo LINK $@
@$( CC) -Wall -o $@ $( TEST_OBJS) $( OBJSDIR_TOOLS) /version.o $( LDFLAGS)
2016-09-27 07:26:04 +00:00
directory_service : $( OBJSDIR_TOOLS ) /directory_service .o libservalclient .a
2012-09-14 02:20:45 +00:00
@echo LINK $@
2016-09-27 07:26:04 +00:00
@$( CC) -Wall -o $@ $( OBJSDIR_TOOLS) /directory_service.o libservalclient.a $( LDFLAGS)
2012-09-14 02:20:45 +00:00
2016-09-27 07:26:04 +00:00
tfw_createfile : $( OBJSDIR_TOOLS ) /tfw_createfile .o libservalclient .a
2012-10-31 07:43:33 +00:00
@echo LINK $@
2016-09-27 07:26:04 +00:00
@$( CC) -Wall -o $@ $( OBJSDIR_TOOLS) /tfw_createfile.o libservalclient.a $( LDFLAGS)
2012-10-31 07:43:33 +00:00
2016-09-27 07:26:04 +00:00
fakeradio : $( OBJSDIR_TOOLS ) /fakeradio .o libservalclient .a
2013-08-19 04:26:19 +00:00
@echo LINK $@
2016-09-27 07:26:04 +00:00
@$( CC) -Wall -o $@ $( OBJSDIR_TOOLS) /fakeradio.o libservalclient.a $( LDFLAGS)
2013-08-19 04:26:19 +00:00
2016-09-27 07:26:04 +00:00
simulator : $( SIMULATOR_OBJS ) libservalclient .a
2014-05-02 04:32:25 +00:00
@echo LINK $@
2016-09-27 07:26:04 +00:00
@$( CC) -Wall -o $@ $( SIMULATOR_OBJS) libservalclient.a $( LDFLAGS)
2014-05-02 04:32:25 +00:00
2016-09-27 07:26:04 +00:00
libservalclient.so : $( LIB_SERVAL_OBJS ) $( OBJSDIR_TOOLS ) /version .o
@echo AR $@
@$( CC) -Wall -shared -o $@ $( LIB_SERVAL_OBJS) $( OBJSDIR_TOOLS) /version.o
2013-12-05 02:51:58 +00:00
2016-09-27 07:26:04 +00:00
libservalclient.a : $( LIB_SERVAL_OBJS ) $( OBJSDIR_TOOLS ) /version .o
@echo AR $@
@$( AR) -cr $@ $( LIB_SERVAL_OBJS) $( OBJSDIR_TOOLS) /version.o
2013-12-05 02:51:58 +00:00
2016-09-27 07:26:04 +00:00
libservald.so : $( SERVALD_OBJS ) $( OBJSDIR_TOOLS ) /version .o
2012-05-10 03:53:06 +00:00
@echo LINK $@
2014-06-11 10:42:56 +00:00
@$( CC) -Wall -shared -o $@ $( SERVALD_OBJS) $( OBJSDIR_TOOLS) /version.o $( LDFLAGS)
2012-03-14 22:54:31 +00:00
2016-09-27 07:26:04 +00:00
libservald.a : $( SERVALD_OBJS ) $( OBJSDIR_TOOLS ) /version .o
@echo AR $@
@$( AR) -cr $@ $( SERVALD_OBJS) $( OBJSDIR_TOOLS) /version.o
2014-05-28 08:10:47 +00:00
libmonitorclient.so : $( MONITOR_CLIENT_OBJS ) $( OBJSDIR_TOOLS ) /version .o
2012-07-29 03:05:53 +00:00
@echo LINK $@
2014-06-11 10:42:56 +00:00
@$( CC) -Wall -shared -o $@ $( MONITOR_CLIENT_OBJS) $( OBJSDIR_TOOLS) /version.o $( LDFLAGS)
2012-03-14 22:54:31 +00:00
2014-05-28 08:10:47 +00:00
libmonitorclient.a : $( MONITOR_CLIENT_OBJS ) $( OBJSDIR_TOOLS ) /version .o
2012-08-10 05:06:46 +00:00
@echo AR $@
2014-05-28 08:10:47 +00:00
@$( AR) -cr $@ $( MONITOR_CLIENT_OBJS) $( OBJSDIR_TOOLS) /version.o
2012-08-10 05:06:46 +00:00
2016-09-27 07:26:04 +00:00
# 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.
2013-12-03 03:59:13 +00:00
2016-09-27 07:26:04 +00:00
findPATH = $( firstword $( wildcard $( addsuffix /$( 1) ,$( subst :, ,$( PATH) ) ) ) )
COPYRIGHT_TOOL := $( call findPATH,sp-copyright-tool)
2013-10-13 08:09:17 +00:00
2016-09-27 07:26:04 +00:00
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