Add ?prelude argument when import constants

A user can now define their own macros to use with extracting compile time info
This commit is contained in:
Rudi Grinberg 2018-04-16 20:25:51 +07:00
parent b8f2fa0465
commit 69b76f0c8e
4 changed files with 8 additions and 3 deletions

View File

@ -283,12 +283,13 @@ module C_define = struct
| String of string
end
let import t ?c_flags ?link_flags ~includes vars =
let import t ?prelude ?c_flags ?link_flags ~includes vars =
let buf = Buffer.create 1024 in
let pr fmt = Printf.bprintf buf (fmt ^^ "\n") in
let includes = "stdio.h" :: includes in
List.iter includes ~f:(pr "#include <%s>");
pr "";
Option.iter prelude ~f:(pr "%s");
pr "int main()";
pr "{";
List.iter vars ~f:(fun (name, (kind : Type.t)) ->

View File

@ -44,6 +44,9 @@ module C_define : sig
*)
val import
: t
-> ?prelude: string
(** Define extra code be used with extracting values below. Note that the
compiled code is never executed. *)
-> ?c_flags: string list
-> ?link_flags:string list
-> includes: string list

View File

@ -4,10 +4,11 @@ let () =
let module C_define = Configurator.C_define in
Configurator.main ~name:"c_test" (fun t ->
C_define.import t
~prelude:{|#define CONFIGURATOR_TESTING "foobar"|}
~includes:["caml/config.h"]
[ "CAML_CONFIG_H", C_define.Type.Switch
; "Page_log", C_define.Type.Int
; "__func__", C_define.Type.String
; "CONFIGURATOR_TESTING", C_define.Type.String
]
|> List.iter (fun (n, v) ->
Printf.printf "%s=%s\n"

View File

@ -11,4 +11,4 @@ Importing #define's from code is successful
$ jbuilder exec import-define/run.exe
CAML_CONFIG_H=true
Page_log=12
__func__=main
CONFIGURATOR_TESTING=foobar