The UDS Collection
Configuring UDS
back to main page
UDS Flags
To use some of the features UDS provides, you have to configure the library
in your program. This should to be done at compile time. You do this
by defining the variable uds::flags.
That might look like the following:
#include <uds/uds.hh>
// configure UDS
uds::uds_flags_t uds::flags = uds::leak_check | uds::summon_zombies;
The flags will be 0 if you do not override them.
The available flags are:
- force_core_dumps
- force core dumps when an UDS exception is thrown
- leak_check
- check for memory leaks
- summon_zombies
- create zombie objects
- log_allocs
- log all memory [de]allocations to stderr
- rename_cores
- rename cores that are dumped by UDS exceptions
- std_backtraces (new)
- generate always a backtrace when a UDS exception is thrown
-
Note that starting with version 0.9.5 uds::flags is not constant anymore.
You can now change flags at runtime. This is especially useful for the
force_core_dumps
and log_allocs
flags.
I recommend you use a VRemember
object to make sure the value gets
restored in case of an exception. Don't change the leak_check
flag though or you will get funny results.
If you don't want to set any flags, you don't have to provide uds::flags.
However, UDS defines global new and delete operators (as weak symbols).
If you don't set any flags, there is still a small performance overhead.
Fortunately, there is a workaround.
UDS comes with a source file ([prefix]/share/uds/udsdeff.cc)
that, when added to your program, will #include config.h if present
and set the uds flags according to [non]defined #defines.
Additionally, when it is not necessary to use UDS new / delete operators,
the original new and delete operators are restored.
Note that if the standard operators are restored, you won't be able
to switch on leak_check
, summon_zombies
,
or log_allocs
at runtime.
If you want to use the debugging facilities during development, and run
your releases at full speed, add udsdeff.cc to your project and
add at least the following line to your configure.in:
UDS_CHECK_FLAGS
This is a m4 macro which adds a configure check for each flag.
The default options depend on whether debugging is enabled.
This check is done by UDS_DEBUG,
a prerequisite macro for UDS_CHECK_FLAGS.
If you use your own --enable-debug option, you might want to use the
UDS_CHECK_FLAGS_NB macro instead, which does not depend on other
macros. All flag switches default to 'no'.
M4 macros
There are a some other useful m4 macros provided my UDS. Have a look at the
UDS configure.in for a few examples.
- UDS_CHECK_LIBUDS
- Checks that libuds is installed on your system. If not, a short message
and a link to the download page are printed.
- UDS_CHECK_LIBUDSTHREAD
- Same as above, but it is also checked for libudsthread.
- UDS_CHECK_VERSION
- Checks for specific versions of UDS.
Examples: UDS_CHECK_VERSION(0.9.5) checks for a version >= 0.9.5, and
UDS_CHECK_VERSION(0.9.5,1.0.0) checks for a version >= 0.9.5 <= 1.0.0
- UDS_CHECK_EXTRA_LI
- Adds the configure options --with-extra-libs and --with-extra-includes.
You can pass space separated lists of paths to the options to
specify extra library and include paths.
You have to use the UDS_FL_GEN macro at the end of your configure.in
file to make this work.
- UDS_CHECK_DEBUG
- Adds the --enable-debug option which is used to enable generation
of debugging information. If you want to use another debug option
that -ggdb, pass it as argument to the macro.
Default settings of several other switches
(generated by UDS macros) depend on this option.
- UDS_CHECK_STATIC_LINK
- Adds the --enable-static option. If enabled, the -static option
is used. Default is 'yes' if debugging is enabled.
- UDS_CHECK_OPTIMIZATION
- Adds two options, --enable-optimization and --enable-arch.
The --enable-optimization is used to toggle optimization options.
It is possible to optimize explicitly for speed or size by using
--enable-optimization=speed|size. Additional compiler options for
standard, speed, and size optimization can be passed as first,
second, and third argument to the macro. I use usually
UDS_CHECK_OPTIMIZATION(, -fstrict-aliasing, -fstrict-aliasing).
Default is 'yes'.
The --enable-arch option can be used to enable optimization for
specific architectures. If the option is set to 'yes' (the default if
it is optimized for speed or size), -march=$(uname -m) is used.
The architecture can be set explicitly by using eg --enable-arch=i686.
- UDS_CHECK_PROFILE
- Adds the --enable-profile option which controls whether to emit
profiling info. Default is 'no'. Other valid arguments are
'flat' for flat a profile, 'lcov' for line coverage, and 'both' for
both.
- UDS_FL_GEN
- Put this macro at the end of your configure.in if you use
UDS m4 macros which affect compiler options.
It sets CFLAGS and CXXFLAGS.
- UDS_CHECK_PROG
- Checks for the presence / absolute path of a program. The full program
path is stored in config.h. The macro takes four arguments:
- the program name
- --with-[x] option name
- brief program description
- config.h macro name
- UDS_PATHS
- defines PREFIX, EXEC_PREFIX, SYSCONFDIR, and LIBDIR in config.h
- UDS_CHECK_FLAGS
- Described above. Adds the following options:
- --enable-core-dumps
- --enable-leak-check
- --enable-zombies
- --enable-log-allocs
- --enable-rename-cores
- --enable-std-backtraces
- UDS_CHECK_FLAGS_ND
- Likewise. All options default to 'no' and UDS_CHECK_DEBUG is not
a prerequisite macro.