From: g0dil Date: Mon, 28 Jan 2008 21:50:26 +0000 (+0000) Subject: Rework debian package build: build final and debug packages and split off include... X-Git-Url: http://g0dil.de/git?p=senf.git;a=commitdiff_plain;h=63ae38a98da5740e0638c868cd1c3f2ac73d2eb2 Rework debian package build: build final and debug packages and split off include files git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@641 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/HowTos/NewPacket/Mainpage.dox b/HowTos/NewPacket/Mainpage.dox index a932cb8..4f52f0d 100644 --- a/HowTos/NewPacket/Mainpage.dox +++ b/HowTos/NewPacket/Mainpage.dox @@ -372,7 +372,7 @@ \section howto_newpacket_type Defining the packet type - After we have implemented the \c GREPacketParser we need now to build the packet type. This is + After we have implemented the \c GREPacketParser we now need to build the packet type. This is done by providing a special policy class called the 'packet type'. This class encapsulates all the information the packet library needs to know about a packet: @@ -494,16 +494,18 @@ \code static void finalize(packet p) { + p->protocolType() << key(p.next(senf::nothrow)); if (p->checksumPresent()) p->checksum() << p->calculateChecksum(); - p->protocolType() << key(p.next(senf::nothrow)); } \endcode - \a finalize() first updates the \a checksum() field if present. It then sets the \a - protocolType() field depending on the \e next packet. The \c key() function is provided by the - mixin class: It will lookup the \e type of a packet in the registry and return that packets key - in the registry. + \a finalize() firs sets the \a protocolType() field depending on the \e next packet. The \c + key() function is provided by the mixin class: It will lookup the \e type of a packet in the + registry and return that packets key in the registry. + + It then updates the \a checksum() field if present (this always needs to be done last since the + checksum depends on the other field values). Here we are using the more generic parser assignment expressed using the \c << operator. This operator in the most cases works like an ordinary assignment, however it can also be used to @@ -569,9 +571,9 @@ static key_t nextPacketKey(packet p) { return p->protocolType(); } static void finalize(packet p) { + p->protocolType() << key(p.next(senf::nothrow)); if (p->checksumPresent()) p->checksum() << p->calculateChecksum(); - p->protocolType() << key(p.next(senf::nothrow)); - } + } static void dump(packet p, std::ostream & os); }; @@ -776,8 +778,8 @@ { return p->valid() ? lookup(p->protocolType()) : no_factory(); } static void finalize(packet p) { - if (p->checksumPresent()) p->checksum() << p->calculateChecksum(); p->protocolType() << key(p.next(senf::nothrow)); + if (p->checksumPresent()) p->checksum() << p->calculateChecksum(); } static void dump(packet p, std::ostream & os); diff --git a/PPI/SocketSource.cci b/PPI/SocketSource.cci deleted file mode 100644 index 0b44af0..0000000 --- a/PPI/SocketSource.cci +++ /dev/null @@ -1,52 +0,0 @@ -// $Id$ -// -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// David Wagner -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -/** \file - \brief SocketSource inline non-template implementation */ - -// Custom includes -#include "SocketSource.hh" - -#define prefix_ inline -///////////////////////////////cci.p/////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////// -// senf::ppi::module::ActiveSocketSource - -template -prefix_ void senf::ppi::module::ActiveSocketSource::replaceHandle(Handle handle) -{ - handle_ = handle; -} -///////////////////////////////cci.e/////////////////////////////////////// -#undef prefix_ - - -// Local Variables: -// mode: c++ -// fill-column: 100 -// comment-column: 40 -// c-file-style: "senf" -// indent-tabs-mode: nil -// ispell-local-dictionary: "american" -// compile-command: "scons -u test" -// End: diff --git a/SConstruct b/SConstruct index 66cfbb4..f3c42d7 100644 --- a/SConstruct +++ b/SConstruct @@ -143,7 +143,11 @@ env.Append( CLEAN_PATTERNS = [ '*.pyc', 'semantic.cache', '.sconsign', '.sconsign.dblite' ], BUILDPACKAGE_COMMAND = "dpkg-buildpackage -us -uc -rfakeroot -I.svn $CONFIG_FILES_OPTS", TOP_INCLUDES = [ 'Packets', 'PPI', 'Scheduler', 'Socket', 'Utils', - 'config.hh', 'local_config.hh' ] + 'config.hh', 'local_config.hh' ], +) + +env.SetDefault( + LIBSENF = "senf" ) Export('env') @@ -194,11 +198,11 @@ SENFSCons.InstallIncludeFiles(env, [ 'config.hh' ]) # Build combined library 'libsenf' libsenf = env.Library( - SENFSCons.LibPath('senf'), + SENFSCons.LibPath(env['LIBSENF']), Flatten([ env.File(SENFSCons.LibPath(lib)).sources for lib in env['ALLLIBS'] ])) env.Default(libsenf) -env.Clean('all', 'libsenf.a') -env.Alias('default', 'libsenf.a') +env.Clean('all', libsenf) +env.Alias('default', libsenf) env.Alias('install_all', env.Install('$LIBINSTALLDIR', libsenf)) @@ -210,7 +214,7 @@ env.Clean('all', [ os.path.join(path,f) PhonyTarget(env, 'deb', [ checkLocalConf, updateRevision, - "$BUILDPACKAGE_COMMAND", + "$BUILDPACKAGE_COMMAND -tc", ]) PhonyTarget(env, 'debsrc', [ @@ -221,7 +225,8 @@ PhonyTarget(env, 'debsrc', [ PhonyTarget(env, 'debbin', [ checkLocalConf, updateRevision, - "$BUILDPACKAGE_COMMAND -nc", + "$BUILDPACKAGE_COMMAND -b -nc", + "fakeroot ./debian/rules debclean" ]) PhonyTarget(env, 'linklint', [ diff --git a/debian/control b/debian/control index 832569e..033d006 100644 --- a/debian/control +++ b/debian/control @@ -7,13 +7,36 @@ Build-Depends: debhelper (>= 5), scons, binutils-dev, libboost-dev, graphviz, perl-base, linklint Standards-Version: 3.7.2 Section: libs -Package: libsenf-dev +Package: libsenf +Section: libdevel +Architecture: any +Description: SENF Extensible Network Framework, static library + The SENF Simple and Extensible Network Framework aims to be a + complete set of libraries to facilitate the development of network + applications focusing on network protocols on the layers below the + application layer. However, the framework includes many general + purpose utilities and will be expedient to use well beyond its primary + objective. + +Package: libsenf-dbg Section: libdevel Architecture: any +Description: SENF Extensible Network Framework, static library (debug build) + The SENF Simple and Extensible Network Framework aims to be a + complete set of libraries to facilitate the development of network + applications focusing on network protocols on the layers below the + application layer. However, the framework includes many general + purpose utilities and will be expedient to use well beyond its primary + objective. + +Package: libsenf-dev +Section: libdevel +Architecture: all Depends: binutils-dev, libboost-dev, libboost-regex-dev, libboost-date-time-dev, libboost-thread-dev, - libboost-filesystem-dev -Description: SENF Extensible Network Framework, development files + libboost-filesystem-dev, libsenf | libsenf-dbg +Recommends: libsenf, libsenf-dbg +Description: SENF Extensible Network Framework, header files The SENF Simple and Extensible Network Framework aims to be a complete set of libraries to facilitate the development of network applications focusing on network protocols on the layers below the diff --git a/debian/libsenf-dbg.install b/debian/libsenf-dbg.install new file mode 100644 index 0000000..31d8f7f --- /dev/null +++ b/debian/libsenf-dbg.install @@ -0,0 +1,3 @@ +debian/tmp/usr/lib/libsenf_g.a +debian/tmp/usr/lib/*.o usr/lib/debug/senf-packets +README usr/share/doc/libsenf-dbg diff --git a/debian/libsenf-dev.install b/debian/libsenf-dev.install index 3ededeb..692c39a 100644 --- a/debian/libsenf-dev.install +++ b/debian/libsenf-dev.install @@ -1,5 +1,3 @@ -debian/tmp/usr/lib/libsenf.a -debian/tmp/usr/lib/*.o usr/lib/senf-packets debian/tmp/usr/include/senf usr/include boost usr/include/senf local_config.hh usr/include/senf diff --git a/debian/libsenf.install b/debian/libsenf.install new file mode 100644 index 0000000..f573e00 --- /dev/null +++ b/debian/libsenf.install @@ -0,0 +1,3 @@ +debian/tmp/usr/lib/libsenf.a +debian/tmp/usr/lib/*.o usr/lib/senf-packets +README usr/share/doc/libsenf diff --git a/debian/rules b/debian/rules index f1921e0..4d2782e 100755 --- a/debian/rules +++ b/debian/rules @@ -1,10 +1,14 @@ #!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. +# # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. +# +# Modified to make a template file for a multi-binary package with separated +# build-arch and build-indep targets by Bill Allombert 2001 # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 @@ -12,9 +16,17 @@ debian_build=1 export debian_build +# This has to be exported to make some magic below work. +export DH_OPTIONS + +#DPKG_ARCH# + CFLAGS = -Wall -g CONCURRENCY_LEVEL ?= 1 +export CONCURRENCY_LEVEL + +LIBTYPE ?= UNSPEC ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 @@ -22,15 +34,6 @@ else CFLAGS += -O2 endif -# shared library versions, option 1 -#version=2.0.5 -#major=2 -# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so -#version=`ls src/.libs/lib*.so.* | \ -# awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` -#major=`ls src/.libs/lib*.so.* | \ -# awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` - destdir=$(CURDIR)/debian/tmp configure: configure-stamp @@ -47,30 +50,42 @@ configure-stamp: # by 'scons deb' and 'scons debsrc' touch configure-stamp -build: build-stamp -build-stamp: configure-stamp - dh_testdir -# # Add here commands to compile the package. - scons -j $(CONCURRENCY_LEVEL) default all_docs final=1 +build: #build-arch build-indep + +build-arch: build-arch-$(LIBTYPE)-stamp +build-arch-$(LIBTYPE)-stamp: configure-stamp +# Add here commands to compile the arch part of the package. + scons -j $(CONCURRENCY_LEVEL) default $(SCONS_OPTIONS) + touch $@ + +build-indep: build-indep-stamp +build-indep-stamp: configure-stamp +# Add here commands to compile the indep part of the package. + scons -j $(CONCURRENCY_LEVEL) all_docs scons linklint scons fixlinks touch $@ -clean: +clean: debclean +# Add here commands to clean up after the build process. + -scons -c all + -scons -c all LIBSENF=senf_g + +debclean: dh_testdir dh_testroot - rm -f build-stamp configure-stamp -# # Add here commands to clean up after the build process. - -scons -c all + rm -f build-arch-*-stamp build-indep-stamp configure-stamp dh_clean -install: build +install: #install-indep install-arch +install-indep: build-indep dh_testdir dh_testroot - dh_clean -k - dh_installdirs -# # Add here commands to install the package into debian/tmp - scons install_all final=1 \ + dh_clean -k -i + dh_installdirs -i +# Add here commands to install the indep part of the package into +# debian/-doc. + scons $(destdir)/usr/include $(destdir)/usr/share/doc $(SCONS_OPTIONS) \ PREFIX='$(destdir)/usr' \ DOCINSTALLDIR='$$PREFIX/share/doc/libsenf-doc' \ INCLUDEINSTALLDIR='$$PREFIX/include/senf' @@ -81,41 +96,72 @@ install: build mkdir -p "$$dir"; \ cp "Examples/$$src" "$$dir"; \ done + dh_install -X.svn -i -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. +install-arch: build-arch + dh_testdir + dh_testroot + dh_clean -k -s + dh_installdirs # options provided by DH_OPTIONS +# Add here commands to install the arch part of the package into +# debian/tmp. + scons $(destdir)/usr/lib $(SCONS_OPTIONS) PREFIX='$(destdir)/usr' + dh_install -X.svn # options provided by DH_OPTIONS -# Build architecture-dependent files here. -binary-arch: build install +# Must not depend on anything. This is to be called by +# binary-arch/binary-indep +# in another 'make' thread. +binary-common: dh_testdir dh_testroot - dh_installchangelogs + dh_installchangelogs dh_installdocs dh_installexamples - dh_install # dh_installmenu # dh_installdebconf -# dh_installlogrotate +# dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime +# dh_python # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip - dh_compress + dh_compress -Xhtml -Xdoclib -Xexamples dh_fixperms # dh_perl -# dh_python -# dh_makeshlibs + dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure +binary-indep: build-indep install-indep + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common + +binary-arch: binary-arch-final binary-arch-debug + +binary-arch-final: + $(MAKE) -f debian/rules \ + DH_OPTIONS="-s -Nlibsenf-dbg" \ + SCONS_OPTIONS="final=1" \ + LIBTYPE="final" \ + binary-arch-common + +binary-arch-debug: + $(MAKE) -f debian/rules \ + DH_OPTIONS="-plibsenf-dbg" \ + SCONS_OPTIONS="LIBSENF=senf_g" \ + LIBTYPE="debug" \ + binary-arch-common + +binary-arch-common: build-arch install-arch + $(MAKE) -f debian/rules DH_OPTIONS="$(DH_OPTIONS)" binary-common + +binary: binary-arch binary-indep +.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch \ + binary-arch-common binary-arch-final binary-arch-debug