C stub functions
open Ocamlbuild_pack
open Ocamlbuild_plugin
open Command
open Ocaml_specific
open Outcome
module Config32 = struct
let bits64 = false
end
module Config64 = struct
let bits64 = true
end
open Config64;
let ocaml_local_dir =
try
Sys.getenv "OCAMLDIR"
with Not_found ->
failwith "OCAMLDIR environment variable must be set; usually that's \
the directory where, for instance, camlinternalMod reside."
let local dir = Filename.concat ocaml_local_dir dir
type libdep_description = {
ld_name : string;
ld_have_lib : string option;
ld_lib : string;
ld_dir : string;
ld_include : string;
ld_static : bool;
ld_c_headers : string list
}
type ocaml_lib_description = {
od_path : string;
od_name : string;
od_headers : string list
}
let system_lib_dir =
if bits64 then "/usr/lib64" else "/usr/lib"
let zlib_description = {
ld_name = "zlib";
ld_have_lib = Some "-DHAVE_ZLIB";
ld_lib = "-lz";
ld_dir = "-L" ^ system_lib_dir;
ld_include = "-L/usr/include";
ld_c_headers = [];
ld_static = true
}
let clibdep ld =
flag ["ocamlmklib"; "c"; "use_"^ld.ld_name]
(S[A ld.ld_dir; A ld.ld_lib]);
flag ["c"; "compile"; "include_"^ld.ld_name]
(S[A"-ccopt"; A ld.ld_include;
begin match ld.ld_have_lib with
| None -> N
| Some x -> S[A"-ccopt"; A x]
end]);
flag ["link"; "ocaml"; "library"; "use_"^ld.ld_name]
(S[A"-ccopt"; A ld.ld_dir; A"-cclib"; A ld.ld_lib]);
if ld.ld_static then flag ["link"; "ocaml"; "byte"] (A"-custom")
let cryptokit_lib_description = {
od_path = "";
od_name = "cryptokit";
od_headers = ["arcfour.h"; "d3des.h"; "rijndael-alg-fst.h";
"ripemd160.h"; "sha1.h"; "sha256.h"]
}
let float32_lib_description = {
od_path = "float32/";
od_name = "float32";
od_headers = []
}
let ocamllib old =
let u = old.od_name in
ocaml_lib u;
flag ["link"; "library"; "ocaml"; "byte"; "use_"^u]
(S[A"-dllpath";A(old.od_path);A"-dllib";A("-l"^u);
A"-cclib";A("-L"^old.od_path);A"-cclib";A("-l"^u)]);
flag ["link"; "ocaml"; "byte"; "use_"^u]
(S[A"-dllpath";A(old.od_path);A"-dllib";A("-l"^u);
A"-cclib";A("-L"^old.od_path);A"-cclib";A("-l"^u)]);
flag ["link"; "library"; "ocaml"; "native"; "use_lib"^u]
(S[A"-cclib";A("-L"^old.od_path);A"-cclib"; A("-l"^u)]);
dep ["link"; "ocaml"; "use_lib"^u] [old.od_path^"lib"^u^".a"];
dep ["compile"; "c"] old.od_headers;
let () =
dispatch begin function
| After_options ->
begin
Options.hygiene := true;
Options.sanitize := true;
Options.ocamlopt := A"ocamlopt.opt";
Options.ocamlc := A"ocamlc.opt";
Options.ocamldep := A"ocamldep.opt";
Options.ocamlyacc := A "menhir";
Options.include_dirs :=
["graph"; "util"; "float32"; "mysubdir1"; "mysubdir2"]
@ !Options.include_dirs
end
| After_rules ->
begin
List.iter
begin fun dir ->
flag ["ocaml"; "link"] (S[A"-I"; A dir]);
flag ["ocaml"; "compile"] (S[A"-I"; A dir]);
flag ["ocaml"; "doc"] (S[A"-I"; A dir])
end
[
local "mysubdir1";
local "mysubdir2"];
Log.dprintf 5 "Ready";
ocamllib float32_lib_description;
flag ["ocaml"; "link"; "byte"; "use_float32"]
(S[A"-dllpath";A"float32";A"-dllib"; A"-lfloat32"]);*)
end
| _ -> ()
end