Packets: Fix annotation unit-test on 64bit architectures
[senf.git] / Makefile
index ae3cae0..d838e92 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,37 +1,74 @@
 #----------------------------------------------------------------------
 # Some SCONS shortcuts
 #----------------------------------------------------------------------
-SCONS=scons
+CONCURRENCY_LEVEL ?= $(shell grep process /proc/cpuinfo | wc -l)
 
-default: build
+ifdef nice
+  SCONS_ARGS += CXX='nice -n $(nice) g++'
+endif
+ifdef final
+  SCONS_ARGS += "final="$(final)
+endif
+ifdef debug
+  SCONS_ARGS += "debug="$(debug)
+endif
 
-build:
-       $(SCONS)
+SCONS=./tools/scons -j $(CONCURRENCY_LEVEL) $(SCONS_ARGS)
+
+# DON'T call this default ... default is a valid scons target ;-)
+build: default
+
+TARGETS := prepare default examples all_tests all_docs all install_all \
+       deb debsrc debbin linklint fixlinks valgrind lcov
+ALLTARGETS := $(TARGETS) package build
+
+$(TARGETS):
+       $(SCONS) $@
 
 clean:
        $(SCONS) --clean all
 
-all_docs all_tests:
+package: deb
+test_coverage: lcov
+
+#----------------------------------------------------------------------
+# subdirectory build targets
+#----------------------------------------------------------------------
+
+%/test %/doc:
        $(SCONS) $@
 
+%/build:
+       $(SCONS) $*
+
+#----------------------------------------------------------------------
+# remote compile targets
+#----------------------------------------------------------------------
+
+CWD = $(shell pwd)
+$(ALLTARGETS:%=%@%):
+       ssh $* "cd $(CWD) && $(MAKE) SCONS_ARGS=\"$(SCONS_ARGS)\" $(firstword $(subst @, ,$@))"
+
 #----------------------------------------------------------------------
 # Subversion stuff
 #----------------------------------------------------------------------
-SVN_REVISION = $(shell svnversion)
 
 svn_version:
-       @echo $(SVN_REVISION)
+       @v=`svnversion`; if [ $$v=="exported" ]; then gitsvnversion else echo $v; fi
+
+version: svn_version
 
 #----------------------------------------------------------------------
 # Building SENF requires some debian packages
 #----------------------------------------------------------------------
-DEB_BASE   = scons build-essential binutils-dev
-DEB_BOOST  = libboost-dev libboost-test-dev
-DEB_BOOST += libboost-date-time-dev libboost-regex-dev libboost-thread-dev
-DEB_DOC    = doxygen dia tidy xsltproc graphviz
+DEB_BASE   = build-essential
 
-prerequisites:
-       aptitude install $(DEB_BASE) $(DEB_BOOST) $(DEB_DOC)
+# This line parses the 'Build-Depends' entry from debian/control
+DEB_SENF   = $(shell perl -alnF'[:,]' -e '                                                     \
+                       BEGIN{$$,=" "} END{splice @R,0,1; print @R}                             \
+                       map {s/\(.*\)|\|.*//; s/[ \n\t]//g} @F;                                 \
+                       push @R,grep {/./} @F if (/^Build-Depends:/i.../^\S/)!~/(^|E0)$$/;'     \
+                               debian/control)
 
-package:
-       $(SCONS) deb
+prerequisites:
+       aptitude install $(DEB_BASE) $(DEB_SENF)