X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Mainpage.dox;h=2fd5529deb153fe22e9550932616a11267e10ca1;hb=8a1b6c58c91e38ad2adfa5c8601ce9dd0764e0d3;hp=036a1e61e3de090dde00ede0edb65b8a8ed69c7e;hpb=f2cc6f8a4ca99301f9f26156803e541ec2dff66b;p=senf.git diff --git a/Mainpage.dox b/Mainpage.dox index 036a1e6..2fd5529 100644 --- a/Mainpage.dox +++ b/Mainpage.dox @@ -47,8 +47,135 @@ \see \ref senf_usage\n Examples + + \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. + + \see \ref senf_senfutil */ +/** \page senf_senfutil SENF SCons build utility (senfutil.py) + + \autotoc + + The \c senfutil utility for SCons helps setting up a project to compile against SENF: + + \li \c senfutil adds all necessary libraries to link against + \li \c senfutil will set necessary compile options. + \li \c senfutil supports normal, debug and final project build options + \li \c senfutil allows specifying variables on the scons command line + \li \c senfutil supports more readable compile-time SENF loglevel configuration + + Using the utility is quite simple + + \code + import sys + sys.path.extend(('senf/site_scons','/usr/lib/senf/site_scons')) + import glob, senfutil + + env = Environment() + senfutil.SetupForSENF(env) + # senfutil.DefaultOptions(env) + + # Set or change SCons environment variables with env.Append, env.Replace or env.SetDefault + env.Append( + CXXFLAGS = [ '-Wall', '-Woverloaded-virtual' ], + CXXFLAGS_final = [ '-O2' ], + CXXFLAGS_normal = [ '-O0', '-g' ], + CXXFLAGS_debug = [ '$CXXFLAGS_normal' ], + + LINKFLAGS_normal = [ '-Wl,-S' ], + + LOGLEVELS_debug = [ 'senf::log::Debug||VERBOSE' ], + ) + + env.Default( + env.Program( target='udpforward', source=glob.glob('*.cc') ) + ) + \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 + senfutil.SetupForSENF( env ). + + 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 globally installed SENF. + + \section senf_senfutil_options Build options + + \c senfutil supports the debug=1 or final=1 build options. These parameters + select one of the build configurations 'debug', 'normal' or 'final'. The following variables are + supported each with separate values for all three configurations: + + \li \c CXXFLAGS + \li \c CPPDEFINES + \li \c LINKFLAGS + \li \c LOGLEVELS + + \c senfutil will detect the type of SENF library used (final or not) and set the correct compile + options. + + \section senf_senfutil_loglevels Specifying compile-time loglevels + + To simplify specifying the compile-time loglevel configuration, the build variable \c LOGLEVELS + (and it's build configuration specific variants) may be set. This variable will be parsed and + converted into the correct \c SENF_LOG_CONF definition. The \c LOGLEVELS Syntax is + + \par "" \e optional_stream \c | \e optional_area | \e level + + where \e optional_stream and \e optional_area are optional fully scoped C++ names (e.g. \c + senf::log::Debug) and \e level is the loglevel. There must be \e no whitespace in a single + specification, multiple specifications are either specified using an array or separated with + whitespace. + + \section senf_senfutil_default Default options + + In the example above, all compile options are set manually. To specify the default customary + compile options for SENF programs, \c senfutil.DefaultOptions(env) is provided. This function is + identical to: + + \code + senfutil.DefaultOptions(env) => + env.Append( + CXXFLAGS = [ '-Wall', '-Woverloaded-virtual' ], + CXXFLAGS_final = [ '-O2' ], + CXXFLAGS_normal = [ '-O0', '-g' ], + CXXFLAGS_debug = [ '$CXXFLAGS_normal' ], + + LINKFLAGS_normal = [ '-Wl,-S' ], + ) + \endcode + + Thus above example can be simplified to + \code + import sys + sys.path.extend(('senf/site_scons','/usr/lib/senf/site_scons')) + import glob, senfutil + + env = Environment() + senfutil.SetupForSENF(env) + senfutil.DefaultOptions(env) + + env.Append( LOGLEVELS_debug = [ 'senf::log::Debug||VERBOSE' ] ) + + env.Default( + env.Program( target = 'udpforward', source = glob.glob('*.cc') ) + ) + \endcode + + \section senf_senfutil_arguments 'scons' Command line arguments + + \c senfutil automatically parses SCons command line arguments into the SCons build + environment. This allows specifying any parameter on the command line: +
+    $ scons CXX=myg++ CXXFLAGS+=-mtune=geode
+    
+ You may either set variables unconditionally using '=' or append values to the end of a list + using '+='. + */ + /** \page senf_usage Using the SENF framework The SENF Framework is a collection of loosely coupled modules. The libraries are heavily object @@ -155,7 +282,7 @@ env = Environment( - LIBS = [ 'senf', 'iberty', 'boost_regex', 'boost_iostreams' ], + LIBS = [ 'senf', 'boost_regex', 'boost_iostreams' ], CXXFLAGS = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long' ], ) @@ -171,7 +298,9 @@ The most simple way to build using SENF is to use a very simple SCons helper which automatically supports debug and final builds, uses SENF either centrally installed or locally built and has - some other nice features. See \ref senfutil for more info and an example for this utility. + some other nice features. See Building Projects using SENF + for more info and an example for this utility. \see \ref senf_components \n \ref senf_overview