Line data Source code
1 :
2 : /* Copyright (c) 2008-2016, Stefan Eilemann <eile@equalizergraphics.com>
3 : * Cedric Stalder <cedric.stalder@gmail.com>
4 : * Daniel Nachbaur <danielnachbaur@gmail.com>
5 : *
6 : * This library is free software; you can redistribute it and/or modify it under
7 : * the terms of the GNU Lesser General Public License version 2.1 as published
8 : * by the Free Software Foundation.
9 : *
10 : * This library is distributed in the hope that it will be useful, but WITHOUT
11 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13 : * details.
14 : *
15 : * You should have received a copy of the GNU Lesser General Public License
16 : * along with this library; if not, write to the Free Software Foundation, Inc.,
17 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 : */
19 :
20 : #include "init.h"
21 :
22 : #include "atomic.h"
23 : #include "file.h"
24 : #include "thread.h"
25 :
26 : #include <fstream>
27 : #include <stdlib.h>
28 : #include <time.h>
29 :
30 : namespace lunchbox
31 : {
32 : namespace
33 : {
34 24 : static a_int32_t _initialized;
35 : }
36 :
37 5 : bool init( const int argc, char** argv )
38 : {
39 5 : for( int i = 1; i < argc; ++i )
40 : {
41 : // verbose options
42 0 : if( std::string( argv[i] ) == "-vv" )
43 0 : Log::level += 2;
44 0 : else if( std::string( argv[i] ) == "-v" )
45 0 : ++Log::level;
46 0 : else if( std::string( argv[i] ) == "--lb-logfile" )
47 : {
48 0 : std::string logfile = getFilename( argv[0] ) + ".log";
49 0 : if( i+1 < argc )
50 0 : logfile = argv[++i];
51 0 : Log::setOutput( logfile );
52 : }
53 : }
54 :
55 5 : if( ++_initialized > 1 ) // not first
56 1 : return true;
57 :
58 4 : Log::instance().setThreadName( "Main" );
59 :
60 4 : const time_t now = ::time(0);
61 : #ifdef _WIN32
62 : char* gmtString = ::ctime( &now );
63 : #else
64 : char gmtString[32];
65 4 : ::ctime_r( &now, gmtString );
66 :
67 4 : setenv( "AVAHI_COMPAT_NOWARN", "1", 0 ); // get rid of annoying avahi warning
68 : #endif
69 :
70 12 : LBDEBUG << "Log level " << Log::getLogLevelString() << " topics "
71 12 : << Log::topics << " date " << gmtString << std::flush;
72 4 : return true;
73 : }
74 :
75 6 : bool exit()
76 : {
77 6 : if( --_initialized > 0 ) // not last
78 1 : return true;
79 :
80 5 : Log::reset();
81 :
82 5 : if( _initialized < 0 )
83 : {
84 1 : LBERROR << "init/exit call mismatch" << std::endl;
85 1 : _initialized = 0;
86 1 : return false;
87 : }
88 4 : return true;
89 : }
90 :
91 72 : }
|