diff --git a/Examples/MCSniffer/MCSniffer.cc b/Examples/MCSniffer/MCSniffer.cc index f353b2c3617fb0d84b79e76ddf7910eba43536c1..1da14b6f63556153d622781ecf6dc30a05d06ee1 100644 --- a/Examples/MCSniffer/MCSniffer.cc +++ b/Examples/MCSniffer/MCSniffer.cc @@ -30,7 +30,7 @@ #include <iomanip> #include "Socket/UDPSocketHandle.hh" #include "Scheduler/Scheduler.hh" -#include "Packets/EthernetPacket.hh" +#include "Packets/DefaultBundle/EthernetPacket.hh" #include "Utils/membind.hh" diff --git a/Examples/MCSniffer/SConscript b/Examples/MCSniffer/SConscript index c7cab09296ae38e450531385797ed975d7e3cbcb..8d4e3b7d05d2da4648fd978a56059c9075b04b9e 100644 --- a/Examples/MCSniffer/SConscript +++ b/Examples/MCSniffer/SConscript @@ -4,4 +4,5 @@ import SENFSCons ########################################################################### SENFSCons.Binary(env, 'mcsniffer', SENFSCons.GlobSources(), - LIBS = [ 'Scheduler', 'Packets', 'Socket', 'Utils' ]); + LIBS = [ 'Scheduler', 'Packets', 'Socket', 'Utils' ], + OBJECTS = [ '#/Packets/DefaultBundle/DefaultBundle.o' ]); diff --git a/Examples/Sniffer/SConscript b/Examples/Sniffer/SConscript index 8d68b85a83654853a85e589e04fcddca57606a53..6c1c57ad7c9c528c1155cf8409450d50b5c1865c 100644 --- a/Examples/Sniffer/SConscript +++ b/Examples/Sniffer/SConscript @@ -4,4 +4,5 @@ import SENFSCons ########################################################################### SENFSCons.Binary(env, 'sniffer', SENFSCons.GlobSources(), - LIBS = [ 'Scheduler', 'Packets', 'Socket', 'Utils' ]); + LIBS = [ 'Scheduler', 'Packets', 'Socket', 'Utils' ], + OBJECTS = [ '#/Packets/DefaultBundle/DefaultBundle.o' ]); diff --git a/Examples/Sniffer/Sniffer.cc b/Examples/Sniffer/Sniffer.cc index 9cf18838dbb7a53b9c813ba0b509fb29c2c99f95..2c43eb619df3325813cd85485cdfb07187dab7b1 100644 --- a/Examples/Sniffer/Sniffer.cc +++ b/Examples/Sniffer/Sniffer.cc @@ -32,10 +32,7 @@ #include "Socket/PacketSocketHandle.hh" #include "Scheduler/Scheduler.hh" #include "Utils/membind.hh" - -#include "Packets/EthernetPacket.hh" -#include "Packets/IpV4Packet.hh" -#include "Packets/UDPPacket.hh" +#include "Packets/DefaultBundle/EthernetPacket.hh" //#include "Sniffer.mpp" #define prefix_ @@ -81,12 +78,6 @@ namespace { std::cout << std::dec; } - void use_em() - { - // Pull in symbols from the wanted packets ... - senf::Packet::create<senf::IpV4Packet>(0,0); - senf::Packet::create<senf::UDPPacket>(0,0); - } } int loop_main (int argc, char const * argv[]) diff --git a/Examples/TCPClientServer/client.cc b/Examples/TCPClientServer/client.cc index 0297c4185237815542328b32147b6fbd0ec51836..e30c96ec8add134b35de96f00cfd91d37cc963a1 100644 --- a/Examples/TCPClientServer/client.cc +++ b/Examples/TCPClientServer/client.cc @@ -25,7 +25,6 @@ #include <sstream> #include "Socket/TCPSocketHandle.hh" #include "Socket/INetAddressing.hh" -#include "Packets/EthernetPacket.hh" int main(int argc, char const * argv[]) diff --git a/Examples/TCPClientServer/server.cc b/Examples/TCPClientServer/server.cc index 99991f7f4fb4712c8fa21cf8539dd346735b62b6..a3b0374dc4589fbcfd349f8073cd1648aedcc5e0 100644 --- a/Examples/TCPClientServer/server.cc +++ b/Examples/TCPClientServer/server.cc @@ -26,11 +26,11 @@ // Custom includes #include <string> +#include <iostream> #include "Scheduler/Scheduler.hh" #include "Utils/membind.hh" #include "Socket/TCPSocketHandle.hh" #include "Socket/INetAddressing.hh" -#include "Packets/EthernetPacket.hh" class Server diff --git a/Packets/EthernetPacket.cc b/Packets/DefaultBundle/EthernetPacket.cc similarity index 100% rename from Packets/EthernetPacket.cc rename to Packets/DefaultBundle/EthernetPacket.cc diff --git a/Packets/EthernetPacket.cti b/Packets/DefaultBundle/EthernetPacket.cti similarity index 100% rename from Packets/EthernetPacket.cti rename to Packets/DefaultBundle/EthernetPacket.cti diff --git a/Packets/EthernetPacket.hh b/Packets/DefaultBundle/EthernetPacket.hh similarity index 97% rename from Packets/EthernetPacket.hh rename to Packets/DefaultBundle/EthernetPacket.hh index 8603c856acfb9ddfcef7cbd46b4d348d0b08014a..5dbec31f44e2b550171027d4f20dadf494d05a38 100644 --- a/Packets/EthernetPacket.hh +++ b/Packets/DefaultBundle/EthernetPacket.hh @@ -24,10 +24,10 @@ #define HH_EthernetPacket_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/PacketRegistry.hh" //#include "EthernetPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// diff --git a/Packets/EthernetPacket.test.cc b/Packets/DefaultBundle/EthernetPacket.test.cc similarity index 100% rename from Packets/EthernetPacket.test.cc rename to Packets/DefaultBundle/EthernetPacket.test.cc diff --git a/Packets/IpV4Packet.cc b/Packets/DefaultBundle/IpV4Packet.cc similarity index 100% rename from Packets/IpV4Packet.cc rename to Packets/DefaultBundle/IpV4Packet.cc diff --git a/Packets/IpV4Packet.cti b/Packets/DefaultBundle/IpV4Packet.cti similarity index 100% rename from Packets/IpV4Packet.cti rename to Packets/DefaultBundle/IpV4Packet.cti diff --git a/Packets/IpV4Packet.hh b/Packets/DefaultBundle/IpV4Packet.hh similarity index 97% rename from Packets/IpV4Packet.hh rename to Packets/DefaultBundle/IpV4Packet.hh index c848d3a177d9475265a29523f217d90b03c3ab9f..94a3a911535de2543e3adbc04a6d60f0493f3096 100644 --- a/Packets/IpV4Packet.hh +++ b/Packets/DefaultBundle/IpV4Packet.hh @@ -24,10 +24,10 @@ #define HH_IpV4Packet_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/PacketRegistry.hh" //#include "IpV4Packet.mpp" ///////////////////////////////hh.p//////////////////////////////////////// diff --git a/Packets/IpV4Packet.test.cc b/Packets/DefaultBundle/IpV4Packet.test.cc similarity index 100% rename from Packets/IpV4Packet.test.cc rename to Packets/DefaultBundle/IpV4Packet.test.cc diff --git a/Packets/IpV6Extensions.cc b/Packets/DefaultBundle/IpV6Extensions.cc similarity index 100% rename from Packets/IpV6Extensions.cc rename to Packets/DefaultBundle/IpV6Extensions.cc diff --git a/Packets/IpV6Extensions.ct b/Packets/DefaultBundle/IpV6Extensions.ct similarity index 100% rename from Packets/IpV6Extensions.ct rename to Packets/DefaultBundle/IpV6Extensions.ct diff --git a/Packets/IpV6Extensions.hh b/Packets/DefaultBundle/IpV6Extensions.hh similarity index 100% rename from Packets/IpV6Extensions.hh rename to Packets/DefaultBundle/IpV6Extensions.hh diff --git a/Packets/IpV6Extensions.test.cc b/Packets/DefaultBundle/IpV6Extensions.test.cc similarity index 99% rename from Packets/IpV6Extensions.test.cc rename to Packets/DefaultBundle/IpV6Extensions.test.cc index f0fed397038325c0b8d317debd08604c172e668c..35c33f0fce549248aae4a9da0c0283f4d5657a82 100644 --- a/Packets/IpV6Extensions.test.cc +++ b/Packets/DefaultBundle/IpV6Extensions.test.cc @@ -28,7 +28,7 @@ #include "IpV6Extensions.hh" #include "IpV6Packet.hh" #include "UDPPacket.hh" -#include "DataPacket.hh" +#include "Packets/DataPacket.hh" #include "Socket/INetAddressing.hh" #include <boost/test/auto_unit_test.hpp> diff --git a/Packets/IpV6Packet.cc b/Packets/DefaultBundle/IpV6Packet.cc similarity index 100% rename from Packets/IpV6Packet.cc rename to Packets/DefaultBundle/IpV6Packet.cc diff --git a/Packets/IpV6Packet.cti b/Packets/DefaultBundle/IpV6Packet.cti similarity index 100% rename from Packets/IpV6Packet.cti rename to Packets/DefaultBundle/IpV6Packet.cti diff --git a/Packets/IpV6Packet.hh b/Packets/DefaultBundle/IpV6Packet.hh similarity index 96% rename from Packets/IpV6Packet.hh rename to Packets/DefaultBundle/IpV6Packet.hh index fa8fdb1ed481ec6d864f3fd6eb73d88e2cf87815..32fd8078322e118ce7d8824b2141fd8986afe458 100644 --- a/Packets/IpV6Packet.hh +++ b/Packets/DefaultBundle/IpV6Packet.hh @@ -25,10 +25,10 @@ #define HH_IpV6Packet_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/PacketRegistry.hh" #include "IpV4Packet.hh" //#include "IpV6Packet.mpp" diff --git a/Packets/IpV6Packet.test.cc b/Packets/DefaultBundle/IpV6Packet.test.cc similarity index 100% rename from Packets/IpV6Packet.test.cc rename to Packets/DefaultBundle/IpV6Packet.test.cc diff --git a/Packets/DefaultBundle/SConscript b/Packets/DefaultBundle/SConscript new file mode 100644 index 0000000000000000000000000000000000000000..f096a680401d1d98a88eabe3f8029e95c7388a03 --- /dev/null +++ b/Packets/DefaultBundle/SConscript @@ -0,0 +1,14 @@ +# -*- python -*- + +Import('env') +import SENFSCons, glob + +########################################################################### + +sources = SENFSCons.GlobSources() + +SENFSCons.StandardTargets(env) + +SENFSCons.Object(env, target = 'DefaultBundle', sources=sources, + LIBS = ['Packets', 'Socket', 'Utils']) + diff --git a/Packets/UDPPacket.cc b/Packets/DefaultBundle/UDPPacket.cc similarity index 98% rename from Packets/UDPPacket.cc rename to Packets/DefaultBundle/UDPPacket.cc index a93f80f9a77f69c695f52a59ed0051cd60278e5d..d74e0808c8e6754ef30c9946fc556dfaf316dcae 100644 --- a/Packets/UDPPacket.cc +++ b/Packets/DefaultBundle/UDPPacket.cc @@ -27,7 +27,7 @@ #include "IpV4Packet.hh" // Custom includes -#include "DataPacket.hh" +#include "Packets/DataPacket.hh" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// diff --git a/Packets/UDPPacket.cti b/Packets/DefaultBundle/UDPPacket.cti similarity index 100% rename from Packets/UDPPacket.cti rename to Packets/DefaultBundle/UDPPacket.cti diff --git a/Packets/UDPPacket.hh b/Packets/DefaultBundle/UDPPacket.hh similarity index 95% rename from Packets/UDPPacket.hh rename to Packets/DefaultBundle/UDPPacket.hh index 2f54e93f487324f8b67ae421805ad4bf77dff953..bd0fc5757b2a715ebc551ed7c60f198620afe309 100644 --- a/Packets/UDPPacket.hh +++ b/Packets/DefaultBundle/UDPPacket.hh @@ -24,10 +24,10 @@ #define HH_UDPPacket_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/PacketRegistry.hh" //#include "UDPPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// diff --git a/Packets/UDPPacket.test.cc b/Packets/DefaultBundle/UDPPacket.test.cc similarity index 100% rename from Packets/UDPPacket.test.cc rename to Packets/DefaultBundle/UDPPacket.test.cc diff --git a/Packets/DefaultBundle/main.test.cc b/Packets/DefaultBundle/main.test.cc new file mode 100644 index 0000000000000000000000000000000000000000..fd5cfe15a0949e3b347ed4ada4564ec756fc6ff4 --- /dev/null +++ b/Packets/DefaultBundle/main.test.cc @@ -0,0 +1,47 @@ +// $Id: main.test.cc 206 2007-02-20 14:20:52Z g0dil $ +// +// Copyright (C) 2006 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Stefan Bund <stefan.bund@fokus.fraunhofer.de> +// +// 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. + +// Definition of non-inline non-template functions + +//#include "test.hh" +//#include "test.ih" + +// Custom includes +#define BOOST_AUTO_TEST_MAIN +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// End: diff --git a/Packets/Doxyfile b/Packets/Doxyfile index 2e7c41a30525e71c05777e99fd36da8417147aa5..a7fcd33fb1dcc4603ba6b2e6cd6e215b555182aa 100644 --- a/Packets/Doxyfile +++ b/Packets/Doxyfile @@ -2,4 +2,5 @@ PROJECT_NAME = libPackets TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag" -GENERATE_TAGFILE = doc/Packets.tag \ No newline at end of file +GENERATE_TAGFILE = doc/Packets.tag +INPUT = . DefaultBundle RTPBundle \ No newline at end of file diff --git a/Packets/PacketRegistry.hh b/Packets/PacketRegistry.hh index 93f951aa3f6a1522b972ee36b28cca141ee701fc..da9964a20dd6ce77881a801855e867e8ec767aba 100644 --- a/Packets/PacketRegistry.hh +++ b/Packets/PacketRegistry.hh @@ -89,9 +89,6 @@ namespace senf { { public: /** \brief Statically register a packet type in a PacketRegistry - - \fixme This fails to work within a library since the linker will - remove all unused object files ... */ template <class OtherPacket> struct RegistrationProxy diff --git a/Packets/RTCPPacket.cc b/Packets/RTPBundle/RTCPPacket.cc similarity index 100% rename from Packets/RTCPPacket.cc rename to Packets/RTPBundle/RTCPPacket.cc diff --git a/Packets/RTCPPacket.cti b/Packets/RTPBundle/RTCPPacket.cti similarity index 100% rename from Packets/RTCPPacket.cti rename to Packets/RTPBundle/RTCPPacket.cti diff --git a/Packets/RTCPPacket.hh b/Packets/RTPBundle/RTCPPacket.hh similarity index 98% rename from Packets/RTCPPacket.hh rename to Packets/RTPBundle/RTCPPacket.hh index 1d566cb36d5aa2a42f8953e7c94d2aecd292fc2b..da4d25abe4ca53c0431c359d462a30be7d8e72a2 100644 --- a/Packets/RTCPPacket.hh +++ b/Packets/RTPBundle/RTCPPacket.hh @@ -24,12 +24,12 @@ #define HH_RTCPPacket_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "ParseListS.hh" -#include "ParseVec.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/ParseListS.hh" +#include "Packets/ParseVec.hh" +#include "Packets/PacketRegistry.hh" //#include "RTCPPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// diff --git a/Packets/RTCPPacket.test.cc b/Packets/RTPBundle/RTCPPacket.test.cc similarity index 100% rename from Packets/RTCPPacket.test.cc rename to Packets/RTPBundle/RTCPPacket.test.cc diff --git a/Packets/RTPPacket.cc b/Packets/RTPBundle/RTPPacket.cc similarity index 100% rename from Packets/RTPPacket.cc rename to Packets/RTPBundle/RTPPacket.cc diff --git a/Packets/RTPPacket.cti b/Packets/RTPBundle/RTPPacket.cti similarity index 100% rename from Packets/RTPPacket.cti rename to Packets/RTPBundle/RTPPacket.cti diff --git a/Packets/RTPPacket.hh b/Packets/RTPBundle/RTPPacket.hh similarity index 98% rename from Packets/RTPPacket.hh rename to Packets/RTPBundle/RTPPacket.hh index 823487a0b2ef86cc9b1d07680eb9fabedb8b3577..1f281f544fa041a502f83a2d652b3964fe8a24b5 100644 --- a/Packets/RTPPacket.hh +++ b/Packets/RTPBundle/RTPPacket.hh @@ -24,11 +24,11 @@ #define HH_RTPPacket_ 1 // Custom includes -#include "Packet.hh" -#include "ParseInt.hh" -#include "ParseArray.hh" -#include "ParseVec.hh" -#include "PacketRegistry.hh" +#include "Packets/Packet.hh" +#include "Packets/ParseInt.hh" +#include "Packets/ParseArray.hh" +#include "Packets/ParseVec.hh" +#include "Packets/PacketRegistry.hh" //#include "RTPPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// diff --git a/Packets/RTPPacket.test.cc b/Packets/RTPBundle/RTPPacket.test.cc similarity index 98% rename from Packets/RTPPacket.test.cc rename to Packets/RTPBundle/RTPPacket.test.cc index 9711b185dc51b01b9d2c31437ec0b8eac240ed52..1f0da11c7af42d5c54d964dbbd736b1c53b13335 100644 --- a/Packets/RTPPacket.test.cc +++ b/Packets/RTPBundle/RTPPacket.test.cc @@ -28,9 +28,9 @@ // Custom includes #include "RTPPacket.hh" -#include "EthernetPacket.hh" -#include "IpV4Packet.hh" -#include "UDPPacket.hh" +#include "Packets/DefaultBundle/EthernetPacket.hh" +#include "Packets/DefaultBundle/IpV4Packet.hh" +#include "Packets/DefaultBundle/UDPPacket.hh" #include <boost/test/auto_unit_test.hpp> #include <boost/test/test_tools.hpp> diff --git a/Packets/RTPBundle/SConscript b/Packets/RTPBundle/SConscript new file mode 100644 index 0000000000000000000000000000000000000000..fe9bc765728c8045074e3a75d02745598c2846f1 --- /dev/null +++ b/Packets/RTPBundle/SConscript @@ -0,0 +1,15 @@ +# -*- python -*- + +Import('env') +import SENFSCons, glob + +########################################################################### + +sources = SENFSCons.GlobSources() + +SENFSCons.StandardTargets(env) + +SENFSCons.Object(env, target = 'RTPBundle', sources=sources, + LIBS = ['Packets', 'Socket', 'Utils'], + OBJECTS = ['#/Packets/DefaultBundle/DefaultBundle.o']) + diff --git a/Packets/RTPBundle/main.test.cc b/Packets/RTPBundle/main.test.cc new file mode 100644 index 0000000000000000000000000000000000000000..fd5cfe15a0949e3b347ed4ada4564ec756fc6ff4 --- /dev/null +++ b/Packets/RTPBundle/main.test.cc @@ -0,0 +1,47 @@ +// $Id: main.test.cc 206 2007-02-20 14:20:52Z g0dil $ +// +// Copyright (C) 2006 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Stefan Bund <stefan.bund@fokus.fraunhofer.de> +// +// 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. + +// Definition of non-inline non-template functions + +//#include "test.hh" +//#include "test.ih" + +// Custom includes +#define BOOST_AUTO_TEST_MAIN +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// End: diff --git a/Packets/SConscript b/Packets/SConscript index b39aa6539a75d2274e07c1940818ca506f2f608f..27f0650e37fb75c6840c32299332136e37a747e3 100644 --- a/Packets/SConscript +++ b/Packets/SConscript @@ -1,7 +1,7 @@ # -*- python -*- Import('env') -import SENFSCons +import SENFSCons, glob ########################################################################### @@ -17,3 +17,5 @@ SENFSCons.Lib(env, SENFSCons.Doxygen(env, extra_sources = [ env.Dia2Png("structure.dia") ]) + +SConscript(glob.glob("*/SConscript")) diff --git a/senfscons/BoostUnitTests.py b/senfscons/BoostUnitTests.py index e6aed7af765857d2063e03625fca1bc36972217f..2dce3ba1e2b94720319137e600039ed2825a8d12 100644 --- a/senfscons/BoostUnitTests.py +++ b/senfscons/BoostUnitTests.py @@ -26,7 +26,7 @@ import SCons.Defaults import os.path import os -def BoostUnitTests(env, target, source, test_source=None, LIBS = [], DEPENDS = [], **kw): +def BoostUnitTests(env, target, source, test_source=None, LIBS = [], OBJECTS = [], DEPENDS = [], **kw): path, name = os.path.split(target) if test_source: if type(test_source) is not type([]): @@ -38,7 +38,7 @@ def BoostUnitTests(env, target, source, test_source=None, LIBS = [], DEPENDS = [ testEnv.Prepend(LIBS = LIBS) sources = [] if source: - sources = sources + env.Object(source) + sources = sources + env.Object(source) + OBJECTS sources = sources + test_source binName = os.path.join(path,'.' + name +'.bin') testRunner = testEnv.Program(binName, sources) diff --git a/senfscons/SENFSCons.py b/senfscons/SENFSCons.py index d87f229e944c7f0b53d9d90749693c0cca20dd4b..c676f3476d404f70748a4f6b56c6a7863b0e77b0 100644 --- a/senfscons/SENFSCons.py +++ b/senfscons/SENFSCons.py @@ -292,7 +292,7 @@ def LibPath(lib): return '$LOCALLIBDIR/lib%s.a' % lib # provide both \a sources and \a testSources. # # \ingroup target -def Objects(env, sources, testSources = None, LIBS = []): +def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []): if type(sources) == type(()): testSources = sources[1] sources = sources[0] @@ -307,6 +307,7 @@ def Objects(env, sources, testSources = None, LIBS = []): source = sources, test_source = testSources, LIBS = LIBS, + OBJECTS = OBJECTS, DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) env.Alias('all_tests', test) # Hmm ... here I'd like to use an Alias instead of a file @@ -493,8 +494,8 @@ def DoxyXRef(env, docs=None, # The library is added to the list of default targets. # #\ingroup target -def Lib(env, library, sources, testSources = None, LIBS = []): - objects = Objects(env,sources,testSources,LIBS=LIBS) +def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = []): + objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) lib = None if objects: lib = env.Library(env.File(LibPath(library)),objects) @@ -502,6 +503,15 @@ def Lib(env, library, sources, testSources = None, LIBS = []): env.Append(ALLLIBS = library) return lib +## \brief Build Object from multiple sources +def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = []): + objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) + ob = None + if objects: + ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES") + env.Default(ob) + return ob + ## \brief Build executable # # This target helper will build the given binary. The \a sources, \a @@ -512,13 +522,13 @@ def Lib(env, library, sources, testSources = None, LIBS = []): # construction environment parameters or the framework helpers. # # \ingroup target -def Binary(env, binary, sources, testSources = None, LIBS = []): - objects = Objects(env,sources,testSources,LIBS=LIBS) +def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = []): + objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) program = None if objects: progEnv = env.Copy() progEnv.Prepend(LIBS = LIBS) - program = progEnv.Program(target=binary,source=objects) + program = progEnv.Program(target=binary,source=objects+OBJECTS) env.Default(program) env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ]) return program