Merged revision(s) 58452-58584 from trunk/blender into soc-2013-dingto.
[blender-staging.git] / intern / cycles / util / util_dynlib.cpp
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (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 Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18
19 #include <stdlib.h>
20
21 #include "util_dynlib.h"
22
23 #ifdef _WIN32
24
25 #include <windows.h>
26
27 CCL_NAMESPACE_BEGIN
28
29 struct DynamicLibrary {
30         HMODULE module;
31 };
32
33 DynamicLibrary *dynamic_library_open(const char *name)
34 {
35         HMODULE module = LoadLibrary(name);
36
37         if(!module)
38                 return NULL;
39
40         DynamicLibrary *lib = new DynamicLibrary();
41         lib->module = module;
42
43         return lib;
44 }
45
46 void *dynamic_library_find(DynamicLibrary *lib, const char *name)
47 {
48         return (void*)GetProcAddress(lib->module, name);
49 }
50
51 void dynamic_library_close(DynamicLibrary *lib)
52 {
53         FreeLibrary(lib->module);
54         delete lib;
55 }
56
57 CCL_NAMESPACE_END
58
59 #else
60
61 #include <dlfcn.h>
62
63 CCL_NAMESPACE_BEGIN
64
65 struct DynamicLibrary {
66         void *module;
67 };
68
69 DynamicLibrary *dynamic_library_open(const char *name)
70 {
71         void *module = dlopen(name, RTLD_NOW);
72
73         if(!module)
74                 return NULL;
75
76         DynamicLibrary *lib = new DynamicLibrary();
77         lib->module = module;
78
79         return lib;
80 }
81
82 void *dynamic_library_find(DynamicLibrary *lib, const char *name)
83 {
84         return dlsym(lib->module, name);
85 }
86
87 void dynamic_library_close(DynamicLibrary *lib)
88 {
89         dlclose(lib->module);
90         delete lib;
91 }
92
93 CCL_NAMESPACE_END
94
95 #endif
96