From: g0dil Date: Tue, 22 May 2007 10:57:23 +0000 (+0000) Subject: Implement libPacket protocol bundles X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=9357448dc66bc9acfd3bd8db423deb75bcd6a2c4;p=senf.git Implement libPacket protocol bundles git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@246 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Examples/MCSniffer/MCSniffer.cc b/Examples/MCSniffer/MCSniffer.cc index f353b2c..1da14b6 100644 --- a/Examples/MCSniffer/MCSniffer.cc +++ b/Examples/MCSniffer/MCSniffer.cc @@ -30,7 +30,7 @@ #include #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 c7cab09..8d4e3b7 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 8d68b85..6c1c57a 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 9cf1883..2c43eb6 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(0,0); - senf::Packet::create(0,0); - } } int loop_main (int argc, char const * argv[]) diff --git a/Examples/TCPClientServer/client.cc b/Examples/TCPClientServer/client.cc index 0297c41..e30c96e 100644 --- a/Examples/TCPClientServer/client.cc +++ b/Examples/TCPClientServer/client.cc @@ -25,7 +25,6 @@ #include #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 99991f7..a3b0374 100644 --- a/Examples/TCPClientServer/server.cc +++ b/Examples/TCPClientServer/server.cc @@ -26,11 +26,11 @@ // Custom includes #include +#include #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 8603c85..5dbec31 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 c848d3a..94a3a91 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 f0fed39..35c33f0 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 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 fa8fdb1..32fd807 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 0000000..f096a68 --- /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 a93f80f..d74e080 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 2f54e93..bd0fc57 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/RTCPPacket.cc b/Packets/DefaultBundle/main.test.cc similarity index 85% copy from Packets/RTCPPacket.cc copy to Packets/DefaultBundle/main.test.cc index 440532f..fd5cfe1 100644 --- a/Packets/RTCPPacket.cc +++ b/Packets/DefaultBundle/main.test.cc @@ -1,4 +1,4 @@ -// $Id$ +// $Id: main.test.cc 206 2007-02-20 14:20:52Z g0dil $ // // Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) @@ -22,25 +22,18 @@ // Definition of non-inline non-template functions -#include "RTCPPacket.hh" -//#include "RTCPPacket.ih" +//#include "test.hh" +//#include "test.ih" // Custom includes +#define BOOST_AUTO_TEST_MAIN +#include +#include #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ void senf::RTCPPacket::v_nextInterpreter() - const -{ - registerInterpreter(begin()+bytes(),end()); -} - -prefix_ void senf::RTCPPacket::v_finalize() -{} - - ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ diff --git a/Packets/Doxyfile b/Packets/Doxyfile index 2e7c41a..a7fcd33 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 93f951a..da9964a 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 struct RegistrationProxy diff --git a/Packets/RTCPPacket.cc b/Packets/RTPBundle/RTCPPacket.cc similarity index 100% copy from Packets/RTCPPacket.cc copy 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 1d566cb..da4d25a 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 823487a..1f281f5 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 9711b18..1f0da11 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 #include diff --git a/Packets/RTPBundle/SConscript b/Packets/RTPBundle/SConscript new file mode 100644 index 0000000..fe9bc76 --- /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/RTCPPacket.cc b/Packets/RTPBundle/main.test.cc similarity index 85% rename from Packets/RTCPPacket.cc rename to Packets/RTPBundle/main.test.cc index 440532f..fd5cfe1 100644 --- a/Packets/RTCPPacket.cc +++ b/Packets/RTPBundle/main.test.cc @@ -1,4 +1,4 @@ -// $Id$ +// $Id: main.test.cc 206 2007-02-20 14:20:52Z g0dil $ // // Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) @@ -22,25 +22,18 @@ // Definition of non-inline non-template functions -#include "RTCPPacket.hh" -//#include "RTCPPacket.ih" +//#include "test.hh" +//#include "test.ih" // Custom includes +#define BOOST_AUTO_TEST_MAIN +#include +#include #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ void senf::RTCPPacket::v_nextInterpreter() - const -{ - registerInterpreter(begin()+bytes(),end()); -} - -prefix_ void senf::RTCPPacket::v_finalize() -{} - - ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ diff --git a/Packets/SConscript b/Packets/SConscript index b39aa65..27f0650 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 e6aed7a..2dce3ba 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 d87f229..c676f34 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