-
Notifications
You must be signed in to change notification settings - Fork 125
/
bslDynlink.ml
44 lines (37 loc) · 1.57 KB
/
bslDynlink.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(*
Copyright © 2011 MLstate
This file is part of OPA.
OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.
OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.
You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*)
type bypass_plugin_file = SharedObject of string | MarshalPlugin of string
let file = function
| SharedObject s | MarshalPlugin s -> s
let load_bypass_plugin = function
| SharedObject file -> (
try
OManager.verbose "loading file \"%s\" (plugin)" file;
Dynlink.loadfile_private file
with
| Dynlink.Error e ->
OManager.printf "Primitives librairy plugin:@ Cannot dynlink file @{<bright>%S@}@\n" file;
OManager.error "@[<2>@{<bright>Hint@}:@\n%s@]@\n" (Dynlink.error_message e)
)
| MarshalPlugin file ->
OManager.verbose "loading file \"%s\" (plugin)" file;
BslMarshalPlugin.loadfile_private file
let loadfile_private = load_bypass_plugin
let cache : (bypass_plugin_file, unit) Hashtbl.t = Hashtbl.create 16
let load_bypass_plugin_cache bypass_plugin =
if not (Hashtbl.mem cache bypass_plugin)
then (
Hashtbl.add cache bypass_plugin () ;
load_bypass_plugin bypass_plugin
)