MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
modules.cc
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/base/modules.cc,v 1.19 2017/01/12 14:46:10 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati <masarati@aero.polimi.it>
9  * Paolo Mantegazza <mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */
31 
32 #include "mbconfig.h" /* This goes first in every *.c,*.cc file */
33 
34 #if defined(USE_RUNTIME_LOADING) && defined(HAVE_LTDL_H)
35 #include <ltdl.h>
36 #endif // USE_RUNTIME_LOADING && HAVE_LTDL_H
37 
38 #include "dataman.h"
39 #include "mbdefs.h"
40 
41 static int count;
42 
43 void
45 {
46  if (::count++ > 0) {
47  return;
48  }
49 
50 #ifdef USE_RUNTIME_LOADING
51  if (lt_dlinit()) {
52  silent_cerr("module_initialize: unable to initialize run-time loading" << std::endl);
54  }
55 
56  /*
57  * NOTE: this macro is defined in mbdefs.h
58  */
59  if (lt_dlsetsearchpath(MODULE_LOADPATH) != 0) {
60  silent_cerr("module_initialize: unable to initialize load path" << std::endl);
62  }
63 #endif // USE_RUNTIME_LOADING
64 }
65 
66 void
68 {
69  if (::count == 0) {
70  silent_cerr("module_finalize: called too many times" << std::endl);
71  return;
72  }
73 
74  if (::count-- > 0) {
75  return;
76  }
77 
78 #ifdef USE_RUNTIME_LOADING
79  lt_dlexit();
80 #endif // USE_RUNTIME_LOADING
81 }
82 
void module_initialize(void)
Definition: modules.cc:44
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
void module_finalize(void)
Definition: modules.cc:67
static int count
Definition: modules.cc:41