Copyright © 2019-2024 Stéphane Glondu <glondu@debian.org>
*)
+let stdlib_dir =
+ match Sys.getenv_opt "OCAML_STDLIB_DIR" with
+ | Some x ->
+ let n = String.length x in
+ if n > 0 && x.[0] = '/' then
+ String.sub x 1 (n - 1)
+ else
+ failwith "OCAML_STDLIB_DIR does not start with /"
+ | None -> failwith "OCAML_STDLIB_DIR is missing"
+
let read_lines fn =
let ic = open_in fn in
Fun.protect
let run_stdlib = ref []
let dev_compiler_libs = ref []
-let ocaml_base = ref [ "debian/ld.conf usr/lib/ocaml" ]
+let ocaml_base = ref [ "debian/ld.conf " ^ stdlib_dir ]
let ocaml =
ref [
- "debian/native-archs usr/lib/ocaml";
+ "debian/native-archs " ^ stdlib_dir;
]
let ocaml_interp =
ref [
"usr/bin/ocamlmklib", ocaml;
"usr/bin/ocamlprof", ocaml;
"usr/bin/ocamlmktop", ocaml;
- "usr/lib/ocaml/camlheader", ocaml;
- "usr/lib/ocaml/camlheaderd", ocaml;
- "usr/lib/ocaml/camlheaderi", ocaml;
- "usr/lib/ocaml/eventlog_metadata", ocaml;
- "usr/lib/ocaml/Makefile.config", ocaml;
- "usr/lib/ocaml/extract_crc", ocaml;
- "usr/lib/ocaml/camlheader_ur", ocaml;
- "usr/lib/ocaml/expunge", ocaml;
- "usr/lib/ocaml/VERSION", ocaml_base;
- "usr/lib/ocaml/target_camlheaderd", ocaml;
- "usr/lib/ocaml/objinfo_helper", ocaml;
- "usr/lib/ocaml/target_camlheaderi", ocaml;
- "usr/lib/ocaml/runtime-launch-info", ocaml;
- "usr/lib/ocaml/sys.ml.in", ocaml;
+ stdlib_dir ^ "/camlheader", ocaml;
+ stdlib_dir ^ "/camlheaderd", ocaml;
+ stdlib_dir ^ "/camlheaderi", ocaml;
+ stdlib_dir ^ "/eventlog_metadata", ocaml;
+ stdlib_dir ^ "/Makefile.config", ocaml;
+ stdlib_dir ^ "/extract_crc", ocaml;
+ stdlib_dir ^ "/camlheader_ur", ocaml;
+ stdlib_dir ^ "/expunge", ocaml;
+ stdlib_dir ^ "/VERSION", ocaml_base;
+ stdlib_dir ^ "/target_camlheaderd", ocaml;
+ stdlib_dir ^ "/objinfo_helper", ocaml;
+ stdlib_dir ^ "/target_camlheaderi", ocaml;
+ stdlib_dir ^ "/runtime-launch-info", ocaml;
+ stdlib_dir ^ "/sys.ml.in", ocaml;
"usr/bin/ocamlmklib.opt", ocaml;
"usr/bin/ocamllex.byte", ocaml;
"usr/bin/ocamldebug", ocaml;
let () =
List.iter (fun x ->
- match chop_prefix ~prefix:"usr/lib/ocaml/stdlib__" x with
+ match chop_prefix ~prefix:(stdlib_dir ^ "/stdlib__") x with
| None -> ()
| Some x ->
let i = String.index x '.' in
installed_files
|> move_all_to ocaml ((=) "usr/share/doc/ocaml/Changes")
|> move_all_to ocaml ((=) "usr/share/doc/ocaml/README.adoc")
- |> move_all_to ocaml (String.starts_with ~prefix:"usr/lib/ocaml/caml/")
- |> move_all_to dev_stdlib (String.starts_with ~prefix:"usr/lib/ocaml/threads/")
- |> move_all_to dev_stdlib (String.starts_with ~prefix:"usr/lib/ocaml/std_exit.")
- |> move_all_to dev_stdlib (String.starts_with ~prefix:"usr/lib/ocaml/stdlib.")
- |> move_all_to dev_stdlib (String.starts_with ~prefix:"usr/lib/ocaml/dynlink")
- |> move_all_to dev_compiler_libs (String.starts_with ~prefix:"usr/lib/ocaml/topdirs.")
- |> move_all_to dev_compiler_libs (String.starts_with ~prefix:"usr/lib/ocaml/compiler-libs/")
- |> move_all_to dev_compiler_libs (String.starts_with ~prefix:"usr/lib/ocaml/ocamldoc/")
- |> move_all_to dev_compiler_libs (String.starts_with ~prefix:"usr/lib/ocaml/runtime_events/")
+ |> move_all_to ocaml (String.starts_with ~prefix:(stdlib_dir ^ "/caml/"))
+ |> move_all_to dev_stdlib (String.starts_with ~prefix:(stdlib_dir ^ "/threads/"))
+ |> move_all_to dev_stdlib (String.starts_with ~prefix:(stdlib_dir ^ "/std_exit."))
+ |> move_all_to dev_stdlib (String.starts_with ~prefix:(stdlib_dir ^ "/stdlib."))
+ |> move_all_to dev_stdlib (String.starts_with ~prefix:(stdlib_dir ^ "/dynlink"))
+ |> move_all_to dev_compiler_libs (String.starts_with ~prefix:(stdlib_dir ^ "/topdirs."))
+ |> move_all_to dev_compiler_libs (String.starts_with ~prefix:(stdlib_dir ^ "/compiler-libs/"))
+ |> move_all_to dev_compiler_libs (String.starts_with ~prefix:(stdlib_dir ^ "/ocamldoc/"))
+ |> move_all_to dev_compiler_libs (String.starts_with ~prefix:(stdlib_dir ^ "/runtime_events/"))
|> move_all_to ocaml_man (String.ends_with ~suffix:".3o")
|> List.filter_map process_static
|> List.filter_map process_file