Add 'include/senf' directory
g0dil [Mon, 3 Sep 2007 15:23:17 +0000 (15:23 +0000)]
Provide additional include files for socket protocols
Socket: Change UDP socket handle to bind instead of connect if given an address argument.

git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@425 270642c3-0616-0410-b53a-bc976706d245

39 files changed:
Examples/DVBAdapter/MPEdec.cc
Examples/DVBAdapter/ULEdec.cc
Examples/DVBAdapter/ULEdec.hh
Examples/DVBAdapter/frontend.cc
Examples/MCSniffer/MCSniffer.cc
Examples/RateStuffer/Mainpage.dox
Examples/RateStuffer/ratestuffer.cc
Examples/RateStuffer/ratestuffer.dia
Examples/Sniffer/Sniffer.cc
Examples/TCPClientServer/client.cc
Examples/TCPClientServer/server.cc
SConstruct
Socket/Protocols/DVB.hh [copied from debian/Socket.hh with 94% similarity]
Socket/Protocols/DVB/SConscript
Socket/Protocols/INet.hh [copied from debian/Socket.hh with 94% similarity]
Socket/Protocols/INet/INet.hh [copied from debian/Socket.hh with 91% similarity]
Socket/Protocols/INet/SConscript
Socket/Protocols/INet/UDPSocketHandle.cc
Socket/Protocols/INet/UDPSocketHandle.hh
Socket/Protocols/Raw.hh [copied from debian/Socket.hh with 94% similarity]
Socket/Protocols/Raw/Raw.hh [copied from debian/Socket.hh with 91% similarity]
Socket/Protocols/Raw/SConscript
Socket/Protocols/SConscript
config.hh
debian/libsenf-dev.install
debian/local_config.hh [deleted file]
debian/rules
include/senf/PPI [new symlink]
include/senf/PPI.hh [moved from debian/PPI.hh with 100% similarity]
include/senf/Packets [new symlink]
include/senf/Packets.hh [moved from debian/Packets.hh with 100% similarity]
include/senf/Scheduler [new symlink]
include/senf/Socket [new symlink]
include/senf/Socket.hh [moved from debian/Socket.hh with 100% similarity]
include/senf/Utils [new symlink]
include/senf/config.hh [new symlink]
include/senf/local_config.hh [new symlink]
senf.dict
senfscons/SENFSCons.py

index 50ecf3c..b32417e 100644 (file)
 #include <linux/sockios.h>
 #include <linux/dvb/dmx.h> 
 
-#include "../../Scheduler/Scheduler.hh"
-#include "../../Packets/DefaultBundle/EthernetPacket.hh"
-#include "../../Packets/MPEGDVBBundle/DatagramSection.hh"
-#include "../../Utils/membind.hh"
-#include "../../Utils/hexdump.hh"
-#include "../../Socket/Protocols/DVB/DVBDemuxHandles.hh"
-#include "../../Packets/ParseInt.hh"
-#include "../../Packets/Packet.hh"
-#include "../../Packets/PacketData.hh"
+#include <senf/Scheduler/Scheduler.hh>
+#include <senf/Packets/DefaultBundle/EthernetPacket.hh>
+#include <senf/Packets/MPEGDVBBundle/DatagramSection.hh>
+#include <senf/Utils/membind.hh>
+#include <senf/Utils/hexdump.hh>
+#include <senf/Socket/Protocols/DVB.hh>
+#include <senf/Packets.hh>
 
 #define PID 500
 
index 64e79a7..3c1de25 100644 (file)
@@ -26,9 +26,9 @@
 
 #include <linux/dvb/dmx.h> 
 #include <boost/format.hpp>
-#include "../../Packets/PacketData.hh"
-#include "../../Utils/hexdump.hh"
-#include "../../Utils/membind.hh"
+#include <senf/Packets.hh>
+#include <senf/Utils/hexdump.hh>
+#include <senf/Utils/membind.hh>
 
 #define PID 271
 #define TRANSPORT_PACKET_SIZE 188
index 1cb705f..c6dc738 100644 (file)
 
 // Definition of non-inline non-template functions
 
-#include "../../Scheduler/Scheduler.hh"
-#include "../../Packets/MPEGDVBBundle/TransportPacket.hh"
-#include "../../Packets/MPEGDVBBundle/SNDUPacket.hh"
-#include "../../Socket/Protocols/DVB/DVBDemuxHandles.hh"
+#include <senf/Scheduler/Scheduler.hh>
+#include <senf/Packets/MPEGDVBBundle/TransportPacket.hh>
+#include <senf/Packets/MPEGDVBBundle/SNDUPacket.hh>
+#include <senf/Socket/Protocols/DVB.hh>
 
 
 class ULEdec
index 6e3afb2..185991f 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <string>
 #include <iostream>
-#include "../../Socket/Protocols/DVB/DVBFrontendHandle.hh"
+#include <senf/Socket/Protocols/DVB.hh>
 
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
index c6c32a3..252734d 100644 (file)
 #include <fstream>
 #include <string>
 #include <iomanip>
-#include "../../Socket/Protocols/INet/UDPSocketHandle.hh"
-#include "../../Scheduler/Scheduler.hh"
-#include "../../Packets/DefaultBundle/EthernetPacket.hh"
-#include "../../Utils/membind.hh"
-#include "../../Utils/hexdump.hh"
+#include <senf/Socket/Protocols/INet.hh>
+#include <senf/Scheduler/Scheduler.hh>
+#include <senf/Packets/DefaultBundle/EthernetPacket.hh>
+#include <senf/Utils/membind.hh>
+#include <senf/Utils/hexdump.hh>
 
 
 //#include "MCSniffer.mpp"
index 65fe3cc..95864eb 100644 (file)
@@ -64,7 +64,7 @@
 
     Above image depicts the module setup implementing the rate stuffer. A
     senf::ppi::module::ActiveSocketReader reads the incoming UDP packets and sends them into a
-    senf::ppi::module::PassiveQueue.
+    senf::ppi::module::PassiveQueue (via a senf::ppi::module::ThrottleBarrier).
 
     The \a queue feeds the packets into a senf::ppi::module::PriorityJoin. The CloneSource
     \a generator is fed as second input into the \a join to provide the stuffing packets.
     ensures that read requests of the RateStuffer's input are always serviced, either from the \a
     queue or, if the \a queue output is throttled, from the \a generator.
 
+    The \a barrier is not strictly necessary. However, it makes the behavior of the RateStuffer
+    predictable in the case where packets need to be dropped. Without the
+    senf::ppi::module::ThrottleBarrier, the packets will be left in the kernel socket queue. Packets
+    will only start to be dropped when that queue fills up. The size of this queue cannot be easily
+    manipulated and it's initial size is immense. So to stop the kernel queue from filling up with
+    increasingly out-of-date packets, we add the \a barrier which will explicitly read and drop
+    excess packets.
+
     \section code Example code
 
     \dontinclude ratestuffer.cc
@@ -82,7 +90,7 @@
 
     \skip Custom
     \skip #include
-    \until Setup
+    \until PPI
 
     We also define some namespace aliases
 
     \until }
 
     The event is initialized to fire eery \a interval nanoseconds.  The traffic is routed 'across'
-    the timer which controls the traffic. The timer is then registered to call
-    RateFilter::timeout().
+    the timer which controls the traffic. This routing lets the module automatically handle
+    throttling events. The timer is registered to call RateFilter::timeout().
 
     \until }
 
     and forwarded to \a output.
 
     This is all there is to the RateFilter module. Due to the routing setup, the timer will
-    automatically be disabled if either \a input or \a output become throttled (which is not even
-    needed here).
+    automatically be disabled should either \a input or \a output become throttled. However, in this
+    specific case this should never happen: The \a input is connected (via the \a join) to the
+    senf::ppi::module::CloneSource, which will never throttle. The \a output is connected to a UDP
+    socket which also never throttles.
 
     \subsection ratestuffer The RateStuffer subnet
 
     generator and set the timing \a interval of the \a rateFilter.
     
     The \a input and \a output connector references are bound to the corresponding connectors we
-    want to expose: \a input to the \a queue's \a input and \a output to the \a rateStuffer's \a
+    want to expose: \a input to the \a barrier's \a input and \a output to the \a rateFilter's \a
     output.
 
     \until };
     discipline of the \a queue. This Completes the RateStuffer. This subnetwork can now be used like
     a module.
 
-    \subsection main Connecting the modules
+    \subsection main Application setup
 
     The applications main() method starts out by initializing the socket handles
 
index 5217801..9ae6bc9 100644 (file)
 //#include "ppitest.ih"
 
 // Custom includes
-#include "../../Socket/Protocols/INet/UDPSocketHandle.hh"
-#include "../../Socket/Protocols/INet/ConnectedUDPSocketHandle.hh"
-#include "../../Socket/Protocols/INet/INetAddressing.hh"
-#include "../../PPI/SocketReader.hh"
-#include "../../PPI/SocketWriter.hh"
-#include "../../PPI/Module.hh"
-#include "../../PPI/IntervalTimer.hh"
-#include "../../PPI/Joins.hh"
-#include "../../PPI/ThrottleBarrier.hh"
-#include "../../PPI/PassiveQueue.hh"
-#include "../../PPI/Queueing.hh"
-#include "../../PPI/CloneSource.hh"
-#include "../../PPI/Setup.hh"
+#include <senf/Socket/Protocols/INet.hh>
+#include <senf/PPI.hh>
 
 //#include "ppitest.mpp"
 #define prefix_
@@ -136,8 +125,8 @@ public:
 
 int main(int argc, char * argv[])
 {
-    senf::UDPv4ClientSocketHandle inputSocket;
-    inputSocket.bind(senf::INet4SocketAddress("0.0.0.0:44344"));
+    senf::UDPv4ClientSocketHandle inputSocket(
+        senf::INet4SocketAddress("0.0.0.0:44344"));
 
     senf::ConnectedUDPv4ClientSocketHandle outputSocket(
         senf::INet4SocketAddress("localhost:44345"));
index 866ab2e..1abf803 100644 (file)
Binary files a/Examples/RateStuffer/ratestuffer.dia and b/Examples/RateStuffer/ratestuffer.dia differ
index 1d60837..8c384ff 100644 (file)
 #include <string>
 #include <iostream>
 #include <iomanip>
-#include "../../Socket/Protocols/Raw/PacketSocketHandle.hh"
-#include "../../Scheduler/Scheduler.hh"
-#include "../../Utils/membind.hh"
-#include "../../Utils/hexdump.hh"
-#include "../../Packets/DefaultBundle/EthernetPacket.hh"
+#include <senf/Socket/Protocols/Raw.hh>
+#include <senf/Scheduler/Scheduler.hh>
+#include <senf/Utils/membind.hh>
+#include <senf/Utils/hexdump.hh>
+#include <senf/Packets/DefaultBundle/EthernetPacket.hh>
 
 //#include "Sniffer.mpp"
 #define prefix_
index 83fbde6..8d87483 100644 (file)
@@ -24,8 +24,7 @@
 // Custom includes
 #include <iostream>
 #include <sstream>
-#include "../../Socket/Protocols/INet/TCPSocketHandle.hh"
-#include "../../Socket/Protocols/INet/INetAddressing.hh"
+#include <senf/Socket/Protocols/INet.hh>
 
 int main(int argc, char const * argv[])
 {
index ef9f7ef..0504948 100644 (file)
 // Custom includes
 #include <string>
 #include <iostream>
-#include "../../Scheduler/Scheduler.hh"
-#include "../../Utils/membind.hh"
-#include "../../Socket/Protocols/INet/TCPSocketHandle.hh"
-#include "../../Socket/Protocols/INet/INetAddressing.hh"
-
+#include <senf/Scheduler/Scheduler.hh>
+#include <senf/Utils/membind.hh>
+#include <senf/Socket/Protocols/INet.hh>
 
 class Server
 {
index e723e46..bcfdd21 100644 (file)
@@ -77,7 +77,7 @@ def configFilesOpts(target, source, env, for_signature):
     return [ '-I%s' % os.path.split(f)[1] for f in env['CONFIG_FILES'] ]
 
 env.Append(
-   CPPPATH = [ '#' ],
+   CPPPATH = [ '#/include' ],
    LIBS = [ 'iberty', '$BOOSTREGEXLIB' ],
    DOXY_XREF_TYPES = [ 'bug', 'fixme', 'todo', 'idea' ],
    DOXY_HTML_XSL = '#/doclib/html-munge.xsl',
@@ -90,6 +90,8 @@ env.Append(
    CONFIG_FILES_OPTS = configFilesOpts,
    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' ]
 )
 
 Export('env')
similarity index 94%
copy from debian/Socket.hh
copy to Socket/Protocols/DVB.hh
index 48e6e36..a0e8763 100644 (file)
@@ -21,9 +21,9 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Socket public header */
+    \brief INet public header */
 
-#include "Socket/Socket.hh"
+#include "DVB/DVB.hh"
 
 \f
 // Local Variables:
index 4e77b00..ffad345 100644 (file)
@@ -5,6 +5,9 @@ import SENFSCons, glob
 
 ###########################################################################
 
+SENFSCons.AllIncludesHH(env, [ f for f in glob.glob("*.hh")
+                               if f not in ('all_includes.hh','DVB.hh') and not f.endswith('.test.hh') ])
+
 sources = SENFSCons.GlobSources()
 
 allob = []
@@ -16,4 +19,6 @@ for sc in glob.glob("*/SConscript"):
     ob = SConscript(sc)
     if ob : allob.extend(ob)
 
+SENFSCons.InstallIncludeFiles(env, [ 'DVB.hh', 'all_includes.hh' ])
+
 Return('allob')
similarity index 94%
copy from debian/Socket.hh
copy to Socket/Protocols/INet.hh
index 48e6e36..46affc1 100644 (file)
@@ -21,9 +21,9 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Socket public header */
+    \brief INet public header */
 
-#include "Socket/Socket.hh"
+#include "INet/INet.hh"
 
 \f
 // Local Variables:
similarity index 91%
copy from debian/Socket.hh
copy to Socket/Protocols/INet/INet.hh
index 48e6e36..3682fc2 100644 (file)
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Socket public header */
+    \brief INet public header */
 
-#include "Socket/Socket.hh"
+#ifndef HH_INet_
+#define HH_INet_ 1
+
+#include "all_includes.hh"
+
+#endif
 
 \f
 // Local Variables:
index 4e77b00..a4700dd 100644 (file)
@@ -5,6 +5,9 @@ import SENFSCons, glob
 
 ###########################################################################
 
+SENFSCons.AllIncludesHH(env, [ f for f in glob.glob("*.hh")
+                               if f not in ('all_includes.hh','INet.hh') and not f.endswith('.test.hh') ])
+
 sources = SENFSCons.GlobSources()
 
 allob = []
@@ -16,4 +19,6 @@ for sc in glob.glob("*/SConscript"):
     ob = SConscript(sc)
     if ob : allob.extend(ob)
 
+SENFSCons.InstallIncludeFiles(env, [ 'INet.hh', 'all_includes.hh' ])
+
 Return('allob')
index 31e7e8b..35caf99 100644 (file)
@@ -55,7 +55,7 @@ senf::UDPv4SocketProtocol::init_client(INet4SocketAddress const & address)
     const
 {
     init_client();
-    connect(address);
+    bind(address);
 }
 
 prefix_ std::auto_ptr<senf::SocketProtocol> senf::UDPv4SocketProtocol::clone()
@@ -81,7 +81,7 @@ senf::UDPv6SocketProtocol::init_client(INet6SocketAddress const & address)
     const
 {
     init_client();
-    connect(address);
+    bind(address);
 }
 
 prefix_ std::auto_ptr<senf::SocketProtocol> senf::UDPv6SocketProtocol::clone()
index d081c39..46a7cb3 100644 (file)
@@ -98,11 +98,10 @@ namespace senf {
                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
                                              constructor */
         void init_client(INet4SocketAddress const & address) const;
-                                        ///< Create client socket and connect
-                                        /**< Creates a new client socket and connects to the given
+                                        ///< Create client socket and bind
+                                        /**< Creates a new client socket and bind to the given
                                              address.
-
-                                             \param[in] address remote address to connect to */
+                                             \param[in] local address to bind to */
                                         /**< \note This member is implicitly called from the
                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
                                              constructor */
@@ -164,10 +163,9 @@ namespace senf {
                                              constructor */
         void init_client(INet6SocketAddress const & address) const;
                                         ///< Create client socket and connect
-                                        /**< Creates a new client socket and connects to the given
+                                        /**< Creates a new client socket and bind to the given
                                              address.
-
-                                             \param[in] address remote address to connect to */
+                                             \param[in] local address to bind to */
                                         /**< \note This member is implicitly called from the
                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
                                              constructor */
similarity index 94%
copy from debian/Socket.hh
copy to Socket/Protocols/Raw.hh
index 48e6e36..e3efa2b 100644 (file)
@@ -21,9 +21,9 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Socket public header */
+    \brief Raw public header */
 
-#include "Socket/Socket.hh"
+#include "Raw/Raw.hh"
 
 \f
 // Local Variables:
similarity index 91%
copy from debian/Socket.hh
copy to Socket/Protocols/Raw/Raw.hh
index 48e6e36..ef75476 100644 (file)
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Socket public header */
+    \brief Raw public header */
 
-#include "Socket/Socket.hh"
+#ifndef HH_Raw_
+#define HH_Raw_ 1
+
+#include "all_includes.hh"
+
+#endif
 
 \f
 // Local Variables:
index 4e77b00..5e09980 100644 (file)
@@ -5,6 +5,9 @@ import SENFSCons, glob
 
 ###########################################################################
 
+SENFSCons.AllIncludesHH(env, [ f for f in glob.glob("*.hh")
+                               if f not in ('all_includes.hh','Raw.hh') and not f.endswith('.test.hh') ])
+
 sources = SENFSCons.GlobSources()
 
 allob = []
@@ -16,4 +19,6 @@ for sc in glob.glob("*/SConscript"):
     ob = SConscript(sc)
     if ob : allob.extend(ob)
 
+SENFSCons.InstallIncludeFiles(env, [ 'Raw.hh', 'all_includes.hh' ])
+
 Return('allob')
index 4e77b00..c5ca1ad 100644 (file)
@@ -16,4 +16,6 @@ for sc in glob.glob("*/SConscript"):
     ob = SConscript(sc)
     if ob : allob.extend(ob)
 
+SENFSCons.InstallIncludeFiles(env, [ 'INet.hh', 'Raw.hh' ])
+
 Return('allob')
index a0e1cbc..4ecb902 100644 (file)
--- a/config.hh
+++ b/config.hh
@@ -34,7 +34,7 @@
 # include "local_config.hh"
 
 # ifndef SENF_ABSOLUTE_INCLUDE_PATH
-#     define SENF_ABSOLUTE_INCLUDE_PATH(senf_relative_include_file_path) <senf_relative_include_file_path>
+#     define SENF_ABSOLUTE_INCLUDE_PATH(senf_relative_include_file_path) <senf/senf_relative_include_file_path>
 # endif
 
 # ifndef SENF_copy_n
index cdb869b..3ededeb 100644 (file)
@@ -1,13 +1,9 @@
 debian/tmp/usr/lib/libsenf.a
 debian/tmp/usr/lib/*.o usr/lib/senf-packets
-debian/tmp/usr/include/Packets usr/include/senf
-debian/tmp/usr/include/PPI usr/include/senf
-debian/tmp/usr/include/Scheduler usr/include/senf
-debian/tmp/usr/include/Socket usr/include/senf
-debian/tmp/usr/include/Utils usr/include/senf
+debian/tmp/usr/include/senf usr/include
 boost usr/include/senf
-debian/local_config.hh usr/include/senf
-debian/Socket.hh usr/include/senf
-debian/Packets.hh usr/include/senf
-debian/PPI.hh usr/include/senf
+local_config.hh usr/include/senf
+include/senf/Socket.hh usr/include/senf
+include/senf/Packets.hh usr/include/senf
+include/senf/PPI.hh usr/include/senf
 README usr/share/doc/libsenf-dev
diff --git a/debian/local_config.hh b/debian/local_config.hh
deleted file mode 100644 (file)
index 1ee04a4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-#define SENF_ABSOLUTE_INCLUDE_PATH(senf_relative_include_file_path) <senf/senf_relative_include_file_path>
index ea893a0..e6f15b4 100755 (executable)
@@ -68,7 +68,8 @@ install: build
 #      # Add here commands to install the package into debian/tmp
        scons  install_all final=1\
                PREFIX='$(destdir)/usr' \
-               DOCINSTALLDIR='$$PREFIX/share/doc/libsenf-doc'
+               DOCINSTALLDIR='$$PREFIX/share/doc/libsenf-doc' \
+               INCLUDEINSTALLDIR='$$PREFIX/include/senf' 
 #       We need to install the example sourcecode
        find Examples \( -name "*.hh" -o -name "*.cc" \) -printf "%P\n" | \
                while read src; do \
diff --git a/include/senf/PPI b/include/senf/PPI
new file mode 120000 (symlink)
index 0000000..49d378c
--- /dev/null
@@ -0,0 +1 @@
+../../PPI
\ No newline at end of file
similarity index 100%
rename from debian/PPI.hh
rename to include/senf/PPI.hh
diff --git a/include/senf/Packets b/include/senf/Packets
new file mode 120000 (symlink)
index 0000000..d84aca5
--- /dev/null
@@ -0,0 +1 @@
+../../Packets
\ No newline at end of file
similarity index 100%
rename from debian/Packets.hh
rename to include/senf/Packets.hh
diff --git a/include/senf/Scheduler b/include/senf/Scheduler
new file mode 120000 (symlink)
index 0000000..2bf96cf
--- /dev/null
@@ -0,0 +1 @@
+../../Scheduler
\ No newline at end of file
diff --git a/include/senf/Socket b/include/senf/Socket
new file mode 120000 (symlink)
index 0000000..bb3e832
--- /dev/null
@@ -0,0 +1 @@
+../../Socket
\ No newline at end of file
similarity index 100%
rename from debian/Socket.hh
rename to include/senf/Socket.hh
diff --git a/include/senf/Utils b/include/senf/Utils
new file mode 120000 (symlink)
index 0000000..71341d8
--- /dev/null
@@ -0,0 +1 @@
+../../Utils
\ No newline at end of file
diff --git a/include/senf/config.hh b/include/senf/config.hh
new file mode 120000 (symlink)
index 0000000..ea97ba7
--- /dev/null
@@ -0,0 +1 @@
+../../config.hh
\ No newline at end of file
diff --git a/include/senf/local_config.hh b/include/senf/local_config.hh
new file mode 120000 (symlink)
index 0000000..cc4d9c9
--- /dev/null
@@ -0,0 +1 @@
+../../local_config.hh
\ No newline at end of file
index 6ed1733..c6705d0 100644 (file)
--- a/senf.dict
+++ b/senf.dict
@@ -265,6 +265,7 @@ SystemException
 td
 templated
 ThresholdQueueing
+ThrottleBarrier
 todo
 tr
 TruncatedPacketException
index da20141..4245fa9 100644 (file)
@@ -245,8 +245,8 @@ def MakeEnvironment():
                    CPPDEFINES = [ 'NDEBUG' ])
     else:
         env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ],
-    # The unit-test framework is not compiled with _GLIBCXX_DEBUG so this fails.
-    #               CPPDEFINES = [ '_GLIBCXX_DEBUG', 'BOOST_REGEX_NO_LIB' ],
+    # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails.
+    #               CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
                    LINKFLAGS = [ '-g' ])
 
     env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],