ardour
pbd.cc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 
18 */
19 
20 #include <iostream>
21 #include <cstdlib>
22 #include <string>
23 
24 #ifdef PLATFORM_WINDOWS
25 #include <fcntl.h>
26 #endif
27 
28 #include <giomm.h>
29 
30 #include <glibmm/thread.h>
31 
32 #include "pbd/pbd.h"
33 #include "pbd/debug.h"
34 #include "pbd/error.h"
35 #include "pbd/id.h"
36 #include "pbd/enumwriter.h"
37 
38 #ifdef PLATFORM_WINDOWS
39 #include <winsock2.h>
40 #endif
41 
42 #include "i18n.h"
43 
44 extern void setup_libpbd_enums ();
45 
46 namespace {
47 
48 static bool libpbd_initialized = false;
49 
50 }
51 
52 void
54 {
55  bool set;
56  std::string options;
57 
58  options = Glib::getenv ("PBD_DEBUG", set);
59  if (set) {
60  std::cerr << "PBD_DEBUG=" << options << std::endl;
61  PBD::parse_debug_options (options.c_str());
62  }
63 }
64 
65 bool
67 {
68  if (libpbd_initialized) {
69  return true;
70  }
71 
72 #ifdef PLATFORM_WINDOWS
73  // Essential!! Make sure that any files used by Ardour
74  // will be created or opened in BINARY mode!
75  _fmode = O_BINARY;
76 
77  WSADATA wsaData;
78 
79  /* Initialize windows socket DLL for PBD::CrossThreadChannel
80  */
81 
82  if (WSAStartup(MAKEWORD(1,1),&wsaData) != 0) {
83  fatal << "Windows socket initialization failed with error: " << WSAGetLastError() << endmsg;
84  abort();
85  /*NOTREACHED*/
86  return false;
87  }
88 #endif
89 
90  if (!Glib::thread_supported()) {
91  Glib::thread_init();
92  }
93 
94  Gio::init ();
95 
96  PBD::ID::init ();
97 
99 
101 
102  libpbd_initialized = true;
103  return true;
104 }
105 
106 void
108 {
109 #ifdef PLATFORM_WINDOWS
110  WSACleanup();
111 #endif
112 
113  EnumWriter::destroy ();
114 }
LIBPBD_API Transmitter fatal
std::ostream & endmsg(std::ostream &ostr)
Definition: transmitter.h:71
void setup_libpbd_enums()
Definition: enums.cc:27
static void init()
Definition: id.cc:38
LIBPBD_API bool init()
Definition: pbd.cc:66
void set_debug_options_from_env()
Definition: pbd.cc:53
LIBPBD_API void cleanup()
Definition: pbd.cc:107
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
Definition: globals.cc:376
LIBPBD_API int parse_debug_options(const char *str)
Definition: debug.cc:80