Skip to content
This repository
tag: v1717
Fetching contributors…

Cannot retrieve contributors at this time

file 44 lines (37 sloc) 1.612 kb
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
  )
Something went wrong with that request. Please try again.