40 lines
1.2 KiB
OCaml
40 lines
1.2 KiB
OCaml
|
module C = Configurator.V1
|
||
|
|
||
|
let write_sexp (conf : C.Pkg_config.package_conf) =
|
||
|
C.Flags.write_sexp "c_flags.sexp" conf.cflags;
|
||
|
C.Flags.write_sexp "c_library_flags.sexp" conf.libs
|
||
|
|
||
|
let pkg_config_combine ~default deps =
|
||
|
let deps =
|
||
|
List.map (Result.fold ~ok:(fun x -> x) ~error:(fun e -> C.die "pkg-config: %s" e))
|
||
|
deps in
|
||
|
List.fold_left (fun conf dep ->
|
||
|
C.Pkg_config.{ libs = conf.libs @ dep.libs;
|
||
|
cflags = conf.cflags @ dep.cflags })
|
||
|
default deps
|
||
|
|
||
|
let freebsd _c =
|
||
|
let conf = { C.Pkg_config.libs = ["-lvmmapi"]; cflags = [] } in
|
||
|
write_sexp conf
|
||
|
|
||
|
let linux c =
|
||
|
(* FIXME: cflags -I *)
|
||
|
let default = { C.Pkg_config.libs = ["-lnl-3"; "-lnl-route-3"]; cflags = [] } in
|
||
|
let conf =
|
||
|
match C.Pkg_config.get c with
|
||
|
| None -> default
|
||
|
| Some pc ->
|
||
|
pkg_config_combine ~default [
|
||
|
C.Pkg_config.query_expr_err pc ~package:"libnl-3.0" ~expr:"libnl-3.0";
|
||
|
C.Pkg_config.query_expr_err pc ~package:"libnl-route-3.0" ~expr:"libnl-route-3.0";
|
||
|
]
|
||
|
in
|
||
|
write_sexp conf
|
||
|
|
||
|
let () =
|
||
|
C.main ~name:"libnl-3-pkg-config" (fun c ->
|
||
|
match C.ocaml_config_var_exn c "system" with
|
||
|
| "freebsd" -> freebsd c
|
||
|
| "linux" -> linux c
|
||
|
| os -> failwith ("Unsupported platform: "^os))
|