1// (C) Copyright Gennadiy Rozental 2001.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6// See http://www.boost.org/libs/test for the library home page.
7//
8/// @file
9/// @brief Entry point for the end user into the Program Execution Monitor.
10///
11/// Use this header to forward declare function prg_exec_monitor_main and to automatically define a main
12/// function for you. If you prefer to use your own main you are free to do so, but you need to define
13/// BOOST_TEST_NO_MAIN before incuding this header. To initiate your main program body execution you
14/// would use statement like this:
15/// @code ::boost::prg_exec_monitor_main( &my_main, argc, argv ); @endcode
16/// Also this header facilitate auto linking with the Program Execution Monitor library if this feature
17/// is supported
18// ***************************************************************************
19
20#ifndef BOOST_PRG_EXEC_MONITOR_HPP_071894GER
21#define BOOST_PRG_EXEC_MONITOR_HPP_071894GER
22
23#include <boost/test/detail/config.hpp>
24
25//____________________________________________________________________________//
26
27// ************************************************************************** //
28// ************** Auto Linking ************** //
29// ************************************************************************** //
30
31// Automatically link to the correct build variant where possible.
32#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
33 !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
34# define BOOST_LIB_NAME boost_prg_exec_monitor
35
36// If we're importing code from a dll, then tell auto_link.hpp about it:
37# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)
38# define BOOST_DYN_LINK
39# endif
40
41# include <boost/config/auto_link.hpp>
42
43#endif // auto-linking disabled
44
45// ************************************************************************** //
46// ************** prg_exec_monitor_main ************** //
47// ************************************************************************** //
48
49namespace boost {
50
51/// @brief Wrapper around the main function
52///
53/// Call this routine instead of your own main body implementation directly. This routine impements all the monitoring
54/// functionality. THe monitor behavior is configurable by using the environment variable BOOST_TEST_CATCH_SYSTEM_ERRORS.
55/// If set to string value "no", the monitor will not attempt to catch system errors (signals)
56/// @param[in] cpp_main main function body. Should have the same signature as regular main function
57/// @param[in] argc, argv command line arguments
58int BOOST_TEST_DECL prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] );
59
60} // boost
61
62#if defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
63
64// ************************************************************************** //
65// ************** main function for tests using dll ************** //
66// ************************************************************************** //
67
68// prototype for user's cpp_main()
69int cpp_main( int argc, char* argv[] );
70
71int BOOST_TEST_CALL_DECL
72main( int argc, char* argv[] )
73{
74 return ::boost::prg_exec_monitor_main( &cpp_main, argc, argv );
75}
76
77//____________________________________________________________________________//
78
79#endif // BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
80
81#endif // BOOST_PRG_EXEC_MONITOR_HPP_071894GER
82

source code of boost/boost/test/prg_exec_monitor.hpp