# Local files (files in this directory)
/Doxyfile.local
-/local_config.hh
/.prepare-stamp
/libsenf.a
/build-arch-debug-stamp
sources, tests, includes = SENFSCons.Glob(env)
-env.Default(env.Program('mcsniffer', sources + [ '#/Packets/DefaultBundle/DefaultBundle.o' ]))
+env.Default(env.Program('mcsniffer', sources + env['PACKET_BUNDLES']))
SHOW_NAMESPACES = NO
ALPHABETICAL_INDEX = NO
-PROJECT_NAME = RateStuffer
+PROJECT_NAME = Examples
EXAMPLE_PATH = .
-import sys, glob, os.path, datetime
-sys.path.append('senfscons')
+# -*- python -*-
+
Import('env')
-import SENFSCons
+import SENFSCons, glob, yaptu
###########################################################################
-import yaptu
-
-HOWTOS = []
+EXAMPLES = []
for dox in sorted(glob.glob("*/Mainpage.dox")):
title = ([None] + [ line.split('\\mainpage',1)[-1].strip() for line in file(dox)
if '\\mainpage' in line ])[-1]
if title:
- HOWTOS.append( (dox.split('/',1)[0], title) )
+ EXAMPLES.append( (dox.split('/',1)[0], title) )
MAINPAGE="""
/** \mainpage Examples
\htmlonly
<dl>
-{{ for name, title in HOWTOS:
+{{ for name, title in EXAMPLES:
<dt><a href="../../${name}/doc/html/index.html">${name}</a></dt><dd>${title}</a></dd>
}}
SHOW_NAMESPACES = NO
ALPHABETICAL_INDEX = NO
-PROJECT_NAME = Sniffer
+PROJECT_NAME = Examples
EXAMPLE_PATH = .
sources, tests, includes = SENFSCons.Glob(env)
-env.Program('sniffer', sources + [ '#/Packets/DefaultBundle/DefaultBundle.o',
- '#/Packets/MPEGDVBBundle/MPEGDVBBundle.o',
- '#/Packets/80221Bundle/80221Bundle.o',
- '#/Packets/80211Bundle/80211Bundle.o' ] )
+env.Program('sniffer', sources + env['PACKET_BUNDLES'])
SENFSCons.Doxygen(env)
SHOW_NAMESPACES = NO
ALPHABETICAL_INDEX = NO
-PROJECT_NAME = UDPClientServer
+PROJECT_NAME = Examples
EXAMPLE_PATH = .
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
INPUT = .
-PROJECT_NAME = "HowTos"
+PROJECT_NAME = HowTos
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
INPUT = .
-PROJECT_NAME = NewPacket
+PROJECT_NAME = HowTos
EXAMPLE_PATH = .
# -*- python -*-
Import('env')
-import SENFSCons, glob, sys
-import yaptu
+import SENFSCons, glob, yaptu
###########################################################################
\see \ref senf_usage\n
<a href="../../Examples/doc/html/index.html">Examples</a>
+
+ \section senfutil_overview Building Projects using SENF
+
+ When building projects using senf, SENFSCons has a very simple helper module \ref senfutil to
+ make the building of libraries utilizing senf simpler:
+ \code
+ import sys
+ sys.path.extend(('senf/site_scons','/usr/lib/senf/site_scons'))
+ import os.path, glob, senfutil
+
+ env = Environment()
+
+ senfutil.SetupForSENF( env )
+
+ env.Append(
+
+ LIBS = [ ],
+ CXXFLAGS = [ '-Wall', '-Woverloaded-virtual' ],
+ LINKFLAGS = [ ],
+
+ CXXFLAGS_debug = [ ],
+ LINKFLAGS_debug = [ ],
+ LOGLEVELS_debug = [ 'senf::log::Debug||VERBOSE' ],
+
+ CXXFLAGS_final = [ '-O3' ],
+ LINKFLAGS_final = [ ],
+ LOGLEVELS_final = [ ],
+
+ SENF_BUILDOPTS = [ ],
+
+ )
+
+ env.Default(
+ env.Program( target = 'udpforward',
+ source = glob.glob('*.cc') )
+ )
+
+ env.Clean(DEFAULT_TARGETS, [ 'udpforward.log', 'udpforward.pid' ])
+ \endcode
+
+ This example builds a simple binary from a number of source files (all '.cc' files). It links
+ against the SENF library and automatically sets all the correct compiler options using
+ <tt>senfutil.SetupForSENF( env )</tt>.
+
+ This script automatically uses a SENF installation either symlinked or imported into the current
+ project in directory 'senf' or, if this directory does not exist, a globaly installed SENF. A
+ locally installed SENF is automatically recompiled if needed. Parallel building is also
+ supported.
+
+ This script automatically supports the \c final and \c LOGLEVELS command line parameters. The
+ LOGLEVELS parameter uses a much more readable syntax than SENF_LOG_CONF:
+ <pre>
+ $ scons -j2 final=1 \
+ LOGLEVELS='senf::log::Debug||IMPORTANT myapp::Transactions|mytrans::Area|VERBOSE'
+ </pre>
*/
/** \page senf_usage Using the SENF framework
ENV = { 'PATH' : os.environ.get('PATH') },
CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*', '.sconsign' ],
- CPPPATH = [ '#/include' ],
+ CPPPATH = [ '#' ],
LOCALLIBDIR = '#',
LIBPATH = [ '$LOCALLIBDIR' ],
LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB',
if not os.path.exists("Doxyfile.local"):
Execute(Touch("Doxyfile.local"))
-# Create local_config.h
-if not env.GetOption('clean') and not os.path.exists("local_config.hh"):
- Execute(Touch("local_config.hh"))
-
if not env.GetOption('clean') and not os.path.exists(".prepare-stamp") \
and not os.environ.get("SCONS") and COMMAND_LINE_TARGETS != [ 'prepare' ]:
env.Execute([ "scons prepare" ])
-# Load SConscripts. Need to load some first (they change the global environment)
-initSConscripts = [
- "debian/SConscript",
- "doclib/SConscript",
-]
+# Load SConscripts
-SConscript(initSConscripts)
+SConscript("debian/SConscript")
+SConscript("doclib/SConscript")
+if os.path.exists('SConscript.local') : SConscript('SConscript.local')
-if os.path.exists('SConscript.local'):
- SConscript('SConscript.local')
+SConscript("senf/SConscript")
-SConscript(list(set(glob.glob("*/SConscript")) - set(initSConscripts)))
+SConscript("Examples/SConscript")
+SConscript("HowTos/SConscript")
###########################################################################
# Define build targets
env.Depends(SENFSCons.Doxygen(env), env.Value(env['ENV']['REVISION']))
#### libsenf.a
-libsenf = env.Library(env.subst("$LIBSENF$LIBADDSUFFIX"), env['ALLOBJECTS'])
+libsenf = env.Library("$LOCALLIBDIR/${LIBSENF}${LIBADDSUFFIX}", env['ALLOBJECTS'])
env.Default(libsenf)
-env.InstallSubdir(target = '$INCLUDEINSTALLDIR', source = [ 'config.hh' ])
env.Install('$LIBINSTALLDIR', libsenf)
#### install_all, default, all_tests, all
+++ /dev/null
-// $Id$
-//
-// Copyright (C) 2006
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.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 "../Utils/auto_unit_test.hh"
-#include <boost/test/test_tools.hpp>
-
-#define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
-
-BOOST_AUTO_UNIT_TEST(testMain)
-{
- BOOST_CHECK( true );
-}
-
-///////////////////////////////cc.e////////////////////////////////////////
-#undef prefix_
-
-\f
-// Local Variables:
-// mode: c++
-// fill-column: 100
-// c-file-style: "senf"
-// indent-tabs-mode: nil
-// ispell-local-dictionary: "american"
-// compile-command: "scons -u test"
-// comment-column: 40
-// End:
# Naja ... etwas rumgehackt aber was solls ...
global EXTRA_MODULES
mods = {}
- pathbase = len(env.Dir('#').abspath)+1
+ pathbase = env.Dir('#/senf').abspath
+ pathbasel = len(pathbase)+1
for module in env.Alias('all_docs')[0].sources:
if module.name != 'html.stamp' : continue
- mods[module.dir.dir.dir.abspath] = [ module.dir.dir.dir.name,
- module.dir.abspath[pathbase:],
+ if not module.dir.dir.dir.abspath.startswith(pathbase): continue
+ mods[module.dir.dir.dir.abspath] = [ module.dir.dir.dir.abspath[pathbasel:].replace('/','_'),
+ module.dir.dir.dir.name,
+ module.dir.abspath[pathbasel:],
0 ]
rv = []
for mod in keys:
i = 0
while i < len(rv):
- if len(rv[i]) > pathbase and mod.startswith(rv[i] + '/'):
- level = mods[rv[i]][2] + 1
+ if len(rv[i]) > pathbasel and mod.startswith(rv[i] + '/'):
+ level = mods[rv[i]][-1] + 1
i += 1
while i < len(rv) and mods[rv[i]][2] >= level:
i += 1
rv[i:i] = [ mod ]
- mods[mod][2] = level
+ mods[mod][-1] = level
break
i += 1
if i == len(rv):
rv.append(mod)
- for mod in keys:
- if mods[mod][2] == 0:
- mods[mod][0] = 'lib' + mods[mod][0]
-
- n = 0
- for name,path in EXTRA_MODULES:
- path = env.Dir(path).dir.dir.abspath
- i = 0
- while i < len(rv):
- if rv[i] == path:
- mods[rv[i]][0] = name
- m = 1
- while i+m < len(rv) and mods[rv[i+m]][2] > mods[rv[i]][2]:
- m += 1
- rv[n:n] = rv[i:i+m]
- rv[i+m:i+2*m] = []
- i += m
- n += m
- else:
- i += 1
-
return ( tuple(mods[mod]) for mod in rv )
def indices():
###########################################################################
-# Extra documentation modules which are handled (named) different from
-# library modules
-EXTRA_MODULES = [
- ('Overview', '#/doc/html'),
- ('Examples', '#/Examples/doc/html'),
- ('HowTos', '#/HowTos/doc/html'),
- ('SENFSCons', '#/senfscons/doc/html') ]
-
HEADER = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<div id="content1">
<div id="content2">
<div class="tabs menu">
+ <li class="Overview level0"><a href="@TOPDIR@/doc/html/index.html">Overview</a></li>
+ <li class="Examples level0"><a href="@TOPDIR@/Examples/doc/html/index.html">Examples</a></li>
+ <li class="HowTos level0"><a href="@TOPDIR@/HowTos/doc/html/index.html">HowTos</a></li>
+ <li class="glossary level0"><a href="@TOPDIR@/doc/html/glossary.html">Glossary</a></li>
+ </div>
+ <div class="tabs menu">
<ul>
-{{ for name, path, level in modules():
- <li class="${name} level${level}"><a href="@TOPDIR@/${path}/index.html">${name}</a></li>
+{{ for id, name, path, level in modules():
+ <li class="${id} level${level}"><a href="@TOPDIR@/senf/${path}/index.html">${name}</a></li>
}}
- <li class="glossary level0"><a href="@TOPDIR@/doc/html/glossary.html">Glossary</a></li>
</ul>
</div>"""
--- /dev/null
+/Ext/*/
+/local_config.hh
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libPPI
+PROJECT_NAME = PPI
RECURSIVE = No
SHOW_DIRECTORIES = Yes
INPUT = . detail
\brief Events inline non-template implementation */
// Custom includes
-#include <../Utils/senfassert.hh>
+#include "../Utils/senfassert.hh"
#define prefix_ inline
///////////////////////////////cci.p///////////////////////////////////////
objects = env.Object(sources)
cobject = env.CombinedObject('80211Bundle', objects)
+env.Default(cobject)
env.Append(ALLOBJECTS = objects)
+env.Append(PACKET_BUNDLES = cobject)
env.BoostUnitTest('test', tests + cobject)
+env.Install('$OBJINSTALLDIR', cobject)
env.InstallSubdir('$INCLUDEINSTALLDIR', includes)
SConscript(glob.glob("*/SConscript"))
sources, tests, includes = SENFSCons.Glob(env)
objects = env.Object(sources)
-env.Install('$OBJINSTALLDIR', env.Default( env.CombinedObject('80221Bundle', objects) ))
+cobject = env.CombinedObject('80221Bundle', objects)
+env.Default(cobject)
env.Append(ALLOBJECTS = objects)
-env.BoostUnitTest('test', tests + ['80221Bundle.o'])
+env.Append(PACKET_BUNDLES = cobject)
+env.BoostUnitTest('test', tests + cobject)
+env.Install('$OBJINSTALLDIR', cobject)
env.InstallSubdir('$INCLUDEINSTALLDIR', includes)
SConscript(glob.glob("*/SConscript"))
objects = env.Object(sources)
cobject = env.CombinedObject('DefaultBundle', objects)
+env.Default(cobject)
env.Append(ALLOBJECTS = objects)
+env.Append(PACKET_BUNDLES = cobject)
env.BoostUnitTest('test', tests + cobject)
+env.Install('$OBJINSTALLDIR', cobject)
env.InstallSubdir('$INCLUDEINSTALLDIR', includes)
SConscript(glob.glob("*/SConscript"))
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libPackets
+PROJECT_NAME = Packets
INPUT = .
RECURSIVE = YES
EXAMPLE_PATH = . DefaultBundle
objects = env.Object(sources)
cobject = env.CombinedObject('MPEGDVBBundle', objects)
+env.Default(cobject)
env.Append(ALLOBJECTS = objects)
+env.Append(PACKET_BUNDLES = cobject)
env.BoostUnitTest('test', tests + cobject)
+env.Install('$OBJINSTALLDIR', cobject)
env.InstallSubdir('$INCLUDEINSTALLDIR', includes)
--- /dev/null
+# -*- python -*-
+
+Import('env')
+import SENFSCons, glob, os
+
+###########################################################################
+
+# Create local_config.h
+if not env.GetOption('clean') and not os.path.exists("local_config.hh"):
+ Execute(Touch("local_config.hh"))
+
+SConscript(glob.glob("*/SConscript"))
+
+env.InstallSubdir(target = '$INCLUDEINSTALLDIR', source = [ 'config.hh' ])
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libUtils
+PROJECT_NAME = Scheduler
ALPHABETICAL_INDEX = NO
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libSocket
+PROJECT_NAME = Socket
RECURSIVE = Yes
SHOW_DIRECTORIES = Yes
#define HH_SENF_Socket_Protocols_AddressExceptions_ 1
// Custom includes
-#include "../Utils/Exception.hh"
+#include "../../Utils/Exception.hh"
//#include "AddressExceptions.mpp"
///////////////////////////////hh.p////////////////////////////////////////
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libConsole
+PROJECT_NAME = Utils_Console
EXAMPLE_PATH = .
EXCLUDE = testServer.cc
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libScheduler
+PROJECT_NAME = Utils_Daemon
ALPHABETICAL_INDEX = NO
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = Daemon
+PROJECT_NAME = Utils
ALPHABETICAL_INDEX = NO
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = Logger
+PROJECT_NAME = Utils_Logger
ALPHABETICAL_INDEX = NO
#include <unistd.h>
#include <locale>
#include <boost/date_time/posix_time/posix_time.hpp>
-#include "../Scheduler/ClockService.hh"
+#include "../../Scheduler/ClockService.hh"
#include "../Console/Console.hh"
//#include "LogFormat.mpp"
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-PROJECT_NAME = libTermlib
+PROJECT_NAME = Utils_Termlib
EXAMPLE_PATH = .
EXCLUDE = telnetServer.cc
ALPHABETICAL_INDEX = NO
+++ /dev/null
-@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
-
-PROJECT_NAME = SENFSCons
-BUILTIN_STL_SUPPORT = NO
-FILE_PATTERNS = *.dox *.py
-EXCLUDE_PATTERNS += __init__.py
-OPTIMIZE_OUTPUT_JAVA = YES
-ALPHABETICAL_INDEX = NO
+++ /dev/null
-// $Id$
-//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.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.
-
-namespace senfscons {
-
-/** \mainpage The Senf Build Environment
-
- The Senf Build Environment is based on the <a href="http://www.scons.org">SCons</a> software
- construction tool. SCons is a <a href="http://www.python.org">python</a> based replacement for
- \c make. SENFScons consists of several SCons builders as well as some global configuration and
- build utilities. SENFScons tightly integrates the <a
- href="http://www.boost.org/libs/test/doc/index.html">Boost.Test</a> unit testing framework. It
- also incorporates a very flexible infrastructure to build software documentation using <a
- href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a>. This infrastructure uses quite a bit
- of pre- and postprocessing (which is integrated with the provided Doxygen builder) to fix some
- doxygen problems and generate a (IMHO) more readable layout.
-
- \autotoc
-
- \section senfutil_overview Building Projects using SENF
-
- When building projects using senf, SENFSCons has a very simple helper module \ref senfutil to
- make the building of libraries utilizing senf simpler:
- \code
- import sys
- sys.path.extend(('senf/senfscons','/usr/lib/senf/senfscons'))
- import os.path, glob, senfutil
-
- env = Environment()
-
- senfutil.SetupForSENF( env )
-
- env.Append(
-
- LIBS = [ ],
- CXXFLAGS = [ '-Wall', '-Woverloaded-virtual' ],
- LINKFLAGS = [ ],
-
- CXXFLAGS_debug = [ ],
- LINKFLAGS_debug = [ ],
- LOGLEVELS_debug = [ 'senf::log::Debug||VERBOSE' ],
-
- CXXFLAGS_final = [ '-O3' ],
- LINKFLAGS_final = [ ],
- LOGLEVELS_final = [ ],
-
- SENF_BUILDOPTS = [ ],
-
- )
-
- env.Default(
- env.Program( target = 'udpforward',
- source = glob.glob('*.cc') )
- )
-
- env.Clean(DEFAULT_TARGETS, [ 'udpforward.log', 'udpforward.pid' ])
- \endcode
-
- This example builds a simple binary from a number of source files (all '.cc' files). It links
- against the SENF library and automatically sets all the correct compiler options using
- <tt>senfutil.SetupForSENF( env )</tt>.
-
- This script automatically uses a SENF installation either symlinked or imported into the current
- project in directory 'senf' or, if this directory does not exist, a globaly installed SENF. A
- locally installed SENF is automatically recompiled if needed. Parallel building is also
- supported.
-
- This script automatically supports the \c final and \c LOGLEVELS command line parameters. The
- LOGLEVELS parameter uses a much more readable syntax than SENF_LOG_CONF:
- <pre>
- $ scons -j2 final=1 \
- LOGLEVELS='senf::log::Debug||IMPORTANT myapp::Transactions|mytrans::Area|VERBOSE'
- </pre>
-
- \section senfscons_intro Introduction to the SENFSCons build system
-
- Here we give an overview on how SENF itself is built. The SENFSCons system aims to be quite
- flexible at separates SENF specific tasks from generic tasks to facilitate reuse.
-
- \subsection senfscons_layout The Project Layout
-
- The SENFSCons infrastructure will always use a consistent directory layout. The top-level
- directory will contain one subdirectory for every module. The main target will often be
- considered to be just another module using the facilities provided by library modules.
-
- The top-level project directory must contain the SENFSCons module in 'senfscons'.
-
- The top-level \c SConstruct file will set up the global project configuration (which libraries
- are used etc) and will then automatically load all module \c SConscript files.
-
- Documentation is generated per module. This simplifies reusing modules in other projects. The
- framework however semi-automatically creates the necessary cross-reference information to
- cross-link the different module documentations. The unit-tests as well are run on a per-module
- basis.
-
- \subsection senfscons_buildconf Standard Build Configuration
-
- When the \c SConsctruct and \c SConscript files are build using the default SENFSCons helpers,
- by default all libraries and binaries are built. Some additional targets are
-
- <dl><dt><tt>scons all_tests</tt></dt><dd>Build all unit tests</dd>
-
- <dt><tt>scons all_docs</tt></dt><dd>Build documentation of all modules</dd>
-
- <dt><tt>scons all</tt></dt><dd>Build all targets including binaries, libraries, documentation,
- tests and possible further targets </dd>
-
- <dt><tt>scons -u doc</tt></dt><dd>Run from within a module directory will build the
- documentation of that module</dd>
-
- <dt><tt>scons -u test</tt></dt><dd>Run from within a module directory will build and run the
- unit test of that module</dd></dl>
-
- To clean any of the targets use the SCons \c -c parameter.
-
- The build environment can be configured \e locally using \ref sconfig in the project root
- directory.
-
- \see
- \ref sconstruct \n
- \ref sconscript \n
- \ref sconfig \n
- \ref builder
- */
-
-/** \page sconstruct The Top-Level 'SConstruct' File
-
- The top-level \c SConstruct file sets up the build, configures used libraries and parameters and
- invokes the module \c SConscript files. To simplify the configuration, the SENFScons python
- package is provided. This package has helper utilities to simplify standard tasks.
-
- In \c senfscons/SConstruct.template you may find an example SConstruct file. Copy this to the
- project root (under the name \c SConstruct) to start a new project. You can then modify and
- configure it to your wishes.
-
- The general structure of the \c SConstruct file is
- \li make the \c senfscons directory accessible
- \li tell the SENFScons infrastructure, which frameworks you intend to use and let SENFScons
- built a construction environment for you
- \li configure the construction environment
- \li load module sconscript file
- \li specify global build targets
-
- The first part, <i>making the \c senfscons directory accessible</i> will always stay the
- same. See the template file for how this is done.
-
- <i>Simplifying the use of more complex frameworks</i> is one of the most important things why
- SENFScons exists. If you only use very simple libraries, the configuration is quite
- simple. However for more complex frameworks the configuration can get quite complicated. This is
- simplified using the SENFScons framework statements. They all reside in the \c SENFSCons package
- and have a prefix of \c Use. See \ref use.
-
- After all frameworks are configured, you can use SEFNScons.MakeEnvironment() to create a
- correctly configured construction environment.
-
- To <i>configure the construction environment</i> you can set Variables in the construction
- environment. See the SCons manpage for a list of supported variables. Some additional variables
- are available with the new builders introduced with SENFSCons. Those are documented with the
- builder module documentation.
-
- <i>Loading the module \c SConscript files</i> will normally always be performed the same way
- using \c glob.glob() to automatically include any subdirectory module.
-
- You may then <i>specify global build targets</i>. You can use standard SCons targets or use all
- the target helpers provided with SENFSCons. Two standard helpers should always be included:
- SENFSCons.StandardTargets() and SENFSCons.GlobalTargets(). You can find more target helpers at
- \ref target
-
- The SConstruct file is an ordinary python file. It is loaded by SCons prior to building the
- software. Just remember, you can use all of python and all of SCons here. SENFScons just
- provides some additional helpers to make things simpler and more concise.
-
- \see
- \ref use \n
- \ref target
- */
-
-/** \page sconscript The Module 'SConscript' Files
-
- Every module (that is subdirectory) is built by that modules \c SConscript file. In \c
- SConscript.template you can find a template of such a file.
-
- Every \c SConscript file starts by importing the construction environment. The \c SConscript
- file is an ordinary \c SConscript file as used by SCons. You may use any of the SCons facilities
- to define targets. However, you will mostly use the \ref target.
-
- Every \c SConscript file should call \c SENFSCons.StandardTargets() to initialize the standard
- targets of every module.
-
- \see
- \ref target
- */
-
-/** \page sconfig The 'SConfig' File
-
- To configure the build environment to the local environment, a \c SConfig file may be created in
- the projects root directory. The supported parameters are
-
- <dl>
- <dt>\c CXX</dt>
- <dd>C++ compiler to use</dd>
- <dt>\c EXTRA_DEFINES</dt>
- <dd>preprocessor symbols to be defined locally</dd>
- <dt>\c EXTRA_LIBS</dt>
- <dd>additional libraries needed for a local build</dd>
- </dl>
-
- Additionally, the \ref use define additional configuration variables which may be set here.
- */
-
-}
-
-\f
-// Local Variables:
-// mode: c++
-// fill-column: 100
-// c-file-style: "senf"
-// indent-tabs-mode: nil
-// ispell-local-dictionary: "american"
-// mode: flyspell
-// mode: auto-fill
-// End:
+++ /dev/null
-Import('env')
-import SENFSCons
-
-###########################################################################
-
-SENFSCons.Doxygen(env)