syncevolution/src/Makefile-gen.am
2009-05-06 10:49:34 +03:00

215 lines
8.4 KiB
Text

BACKENDS = @BACKENDS@
if COND_GUI
GUI_DIR = gtk-ui
endif
SUBDIRS = $(SYNTHESIS_SUBDIR) core $(BACKENDS) $(GUI_DIR)
DIST_SUBDIRS = core $(BACKENDS) gtk-ui
BUILT_SOURCES =
AM_CPPFLAGS = $(SUBDIRS:%=-I$(srcdir)/%) -I$(srcdir)/../test -I$(top_srcdir) $(BACKEND_CPPFLAGS) $(GLIB_CFLAGS)
EXTRA_PROGRAMS =
TESTS =
bin_PROGRAMS = syncevolution
if COND_DBUS
libexec_PROGRAMS = syncevo-dbus-server
endif
bin_SCRIPTS = synccompare
SYNCEVOLUTION_DEP =
if ENABLE_MODULES
else
SYNCEVOLUTION_LDADD += $(SYNCSOURCES)
SYNCEVOLUTION_DEP += $(SYNCSOURCES)
endif
EXTRA_DIST = shlibs.local Makefile-gen.am syncevolution.xml
TEMPLATE_FILES = @TEMPLATE_FILES@
nobase_dist_sysconf_DATA = $(TEMPLATE_FILES)
DISTCLEANFILES = synccompare
MAINTAINERCLEANFILES = Makefile.in
CLEANFILES = libstdc++.a client-test $(CLIENT_LIB_TEST_FILES)
# synccompare is created by replacing its 'import Algorithm::Diff;'
# with a simplified copy of Diff.pm.
synccompare : ../test/Algorithm/Diff.pm ../test/synccompare.pl
perl -e '$$diff = shift; open(DIFF, "<$$diff"); ($$_) = split(/__END__/, join("", <DIFF>)); s/\*import.*//m; s/require +Exporter;//; s/^#.*\n//mg; s/ +#.*\n//mg; $$diff = $$_;' -e 'while(<>) {' @MODIFY_SYNCCOMPARE@ -e 's/use +Algorithm::Diff;/"# embedded version of Algorithm::Diff follows, copyright by the original authors\n" . $$diff . "# end of embedded Algorithm::Diff\n"/e; print;}' $+ >$@
chmod u+x $@
CORE_SOURCES =
# The files which register backends have to be compiled into
# "client-test" and "syncevolution" in order to pull in the
# code from the libs which implement the backends.
#
# Unit testing also goes there.
#
# When using modules the registration is done inside the
# module and the register file is unnecessary. However, they
# still need to be included in "make dist".
BACKEND_REGISTRIES = @BACKEND_REGISTRIES@
if ENABLE_MODULES
EXTRA_DIST += $(BACKEND_REGISTRIES)
else
CORE_SOURCES += $(BACKEND_REGISTRIES)
endif
CORE_CXXFLAGS = $(SYNTHESIS_CFLAGS)
CORE_LDADD = $(SYNCEVOLUTION_LDADD) core/libsyncevolution.la $(GLIB_LIBS) $(LIBS)
CORE_DEP = $(SYNCEVOLUTION_DEP) core/libsyncevolution.la $(SYNTHESIS_DEP)
CORE_LD_FLAGS = -uSyncEvolution_Module_Version -Wl,--export-dynamic
# put link to static c++ library into current directory, needed if compiling with --enable-static-c++
libstdc++.a :
path=`$(CXX) $(CORE_LDADD) $(LD_FLAGS) -print-file-name=libstdc++.a` && ln -s $$path .
syncevolution_SOURCES = \
syncevolution.cpp \
$(CORE_SOURCES)
# SYNCEVOLUTION_LDADD will be replaced with libsyncebook.la/libsyncecal.la/libsyncsqlite.la
# if linking statically against them, empty otherwise;
# either way this does not lead to a dependency on those libs - done explicitly
syncevolution_LDADD = $(CORE_LDADD)
syncevolution_LDFLAGS = $(CORE_LD_FLAGS)
syncevolution_CXXFLAGS = $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS)
syncevolution_DEPENDENCIES = $(EXTRA_LTLIBRARIES) $(CORE_DEP) # $(SYNTHESIS_DEP)
# rule which is only relevant when compiling Synthesis in subdirectory
#$(SYNTHESIS_LIB) : $(SYNTHESIS_SUBDIR)/all
#$(SYNTHESIS_SUBDIR)/% :
# [ ! "$(SYNTHESIS_SUBDIR)" ] || ( cd ${@D} && $(MAKE) ${@F} )
# include Synthesis in distribution: package only files in git if using a git checkout
dist-hook:
set -x; [ ! "$(SYNTHESIS_SUBDIR)" ] || \
mkdir -p $(distdir)/synthesis && \
if test -d "$(SYNTHESIS_SRC)/.git"; \
then \
( ( cd "$(SYNTHESIS_SRC)" && git archive HEAD ) | ( cd "$(distdir)/synthesis" && tar xf - && $$SHELL autogen.sh && rm -rf autom4te.cache ) ) && \
( echo Creating ChangeLog && \
( ( cd "$(SYNTHESIS_SRC)" && \
echo '# Generated by configure. Do no edit.' && \
githash=`git show-ref --head --hash | head -1` && \
echo "# git revision $$githash" && \
echo "# git tag `git describe --tags $$githash`" && \
echo && \
"$(top_srcdir)/missing" --run perl "$(top_srcdir)/build/gen-changelog.pl" ) > ChangeLog.tmp ) && \
mv -f ChangeLog.tmp "$(distdir)/synthesis/ChangeLog" || \
( rm -f ChangeLog.tmp ; \
echo Failed to generate ChangeLog >&2 ) \
); \
elsif test $SYNTHESIS_SRC != "no-synthesis-source"; \
cp -a $(SYNTHESIS_SRC)/* $(distdir)/synthesis && \
for i in _build autom4te.cache; do [ ! -d "$(SYNTHESIS_SRC)/$$i" ] || chmod -R u+rwx "$(SYNTHESIS_SRC)/$$i"; done && \
find "$(distdir)" -name .libs -o -name "*~" -o -name ".*" -o -name "*.o" -o -name "*.lo" -o -name CVS -o -name .svn -o -name .git -o -name autom4te.cache -print0 | xargs -0 rm -rf; \
fi
clean-local: testclean
rm -rf testcases
# files created during testing
testclean:
rm -rf *.test.vcf *.log *.tests *.diff *.dat *Client_Sync_*client.*
distclean-local:
rm -rf $(SYNTHESIS_SUBDIR)
rm -rf $(CLEAN_CLIENT_SRC)
if COND_DBUS
BUILT_SOURCES += syncevo-dbus-glue.h syncevo-marshal.c syncevo-marshal.h
syncevo_dbus_server_SOURCES = \
syncevo-dbus-server.cpp syncevo-dbus-server.h \
DBusSyncClient.cpp DBusSyncClient.h \
$(CORE_SOURCES)
nodist_syncevo_dbus_server_SOURCES = syncevo-marshal.c
syncevo_dbus_server_LDADD = $(DBUS_GLIB_LIBS) $(CORE_LDADD)
syncevo_dbus_server_CPPFLAGS = -DHAVE_CONFIG_H $(DBUS_GLIB_CFLAGS) $(AM_CPPFLAGS)
syncevo_dbus_server_CXXFLAGS = $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS)
syncevo_dbus_server_LDFLAGS = $(CORE_LD_FLAGS)
syncevo_dbus_server_DEPENDENCIES = $(EXTRA_LTLIBRARIES) $(CORE_DEP) $(SYNTHESIS_DEP)
syncevo-dbus-glue.h: stamp-syncevo-dbus-glue.h
@true
stamp-syncevo-dbus-glue.h: $(builddir)/../interfaces/syncevo.xml
$(DBUS_BINDING_TOOL) --prefix=syncevo --mode=glib-server $< > xgen-$(@F) \
&& (cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%)) \
&& rm -f xgen-$(@F) \
&& echo timestamp > $(@F)
syncevo-marshal.h: $(srcdir)/../interfaces/syncevo-marshal.list $(GLIB_GENMARSHAL)
$(GLIB_GENMARSHAL) $< --header --prefix=syncevo_marshal > $@
syncevo-marshal.c: $(srcdir)/../interfaces/syncevo-marshal.list syncevo-marshal.h $(GLIB_GENMARSHAL)
echo "#include \"syncevo-marshal.h\"" > $@ \
&& $(GLIB_GENMARSHAL) --prefix=syncevo_marshal $(srcdir)/../interfaces/syncevo-marshal.list --body >> $@
endif
# With --disable-shared autotools links against libfunambol.a which does not
# pull any of the test suites into the test binary, so they would not be
# executed. The workaround is to explicitly set them as undefined on the
# link line.
client_test_SOURCES = \
client-test-app.cpp \
../test/ClientTest.cpp \
../test/ClientTest.h \
../test/client-test-main.cpp \
$(CORE_SOURCES)
CLIENT_LIB_TEST_FILES = \
testcases/vcard21.vcf \
testcases/vcard30.vcf \
testcases/ical20.ics \
testcases/imemo20.ics \
testcases/itodo20.ics
client_test_CPPFLAGS = -DHAVE_CONFIG_H -DENABLE_INTEGRATION_TESTS -DENABLE_UNIT_TESTS $(AM_CPPFLAGS)
client_test_CXXFLAGS = `cppunit-config --cflags` $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS)
client_test_LDFLAGS = `cppunit-config --libs` `nm core/.libs/libsyncevolution.a | grep funambolAutoRegisterRegistry | sed -e 's/.* /-u /'` $(CORE_LD_FLAGS)
client_test_LDADD = $(CORE_LDADD)
# These dependencies are intentionally a bit too broad:
# they ensure that all files are in place to *run* client-test.
client_test_DEPENDENCIES = $(EXTRA_LTLIBRARIES) $(CORE_DEP) $(CLIENT_LIB_TEST_FILES) synccompare
# copy test files because client-test expects them here
LOCAL_TEST_FILES=$(subst $(srcdir)/../test/,,$(wildcard $(srcdir)/../test/* $(srcdir)/../test/testcases/*))
$(filter testcases/%, $(filter $(LOCAL_TEST_FILES), $(CLIENT_LIB_TEST_FILES))) : % : $(srcdir)/../test/%
mkdir -p testcases
cp $< $@
# distribute test system?
if ENABLE_TESTING
# yes: install client-test in bindir, test files in datadir
TESTS += client-test
bin_PROGRAMS += client-test
nobase_dist_doc_DATA = $(CLIENT_LIB_TEST_FILES)
else
# The "all" dependency causes a rebuild even if the actual input files
# haven't changed. If client-test is part of the regular targets built
# by "all", then it must not depend on all!
EXTRA_PROGRAMS += client-test
nodist_client_test_SOURCES = $(CLIENT_LIB_TEST_FILES)
client_test_DEPENDENCIES += all
endif
# special target for testing with valgrind
valgrind : test
valgrind --leak-check=yes --suppressions=valgrind.supp ./test
# Because backend-related variables need to be substituted in
# Makefile-gen.am we need an explicit rule to redo that work
# so that "make" rebuilds derived files correctly.
$(srcdir)/Makefile.am: Makefile-gen.am
sed -e 's;[@]BACKEND_REGISTRIES[@];$(BACKEND_REGISTRIES);' \
-e 's;[@]BACKENDS[@];$(BACKENDS);' \
-e 's;[@]TEMPLATE_FILES[@];$(TEMPLATE_FILES);' \
$< >$@
# old-style name for test program(s)
.PHONY: test
test: client-test