thanks to @whitequark, could use cppo for preprocessing files

This commit is contained in:
Simon Cruanes 2014-11-04 15:21:09 +01:00
parent 786334dcce
commit 76c9254dec
4 changed files with 51 additions and 4 deletions

View file

@ -4,4 +4,4 @@
- Drup (Gabriel Radanne) - Drup (Gabriel Radanne)
- Jacques-Pascal Deplaix - Jacques-Pascal Deplaix
- Nicolas Braud-Santoni - Nicolas Braud-Santoni
- Whitequark (Peter Zotov)

2
_oasis
View file

@ -8,7 +8,7 @@ LicenseFile: LICENSE
Plugins: META (0.3), DevFiles (0.3) Plugins: META (0.3), DevFiles (0.3)
OCamlVersion: >= 4.00.1 OCamlVersion: >= 4.00.1
BuildTools: ocamlbuild BuildTools: ocamlbuild
AlphaFeatures: compiled_setup_ml AlphaFeatures: ocamlbuild_more_args, compiled_setup_ml
Synopsis: A modular standard library focused on data structures. Synopsis: A modular standard library focused on data structures.
Description: Description:

4
configure vendored
View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# OASIS_START # OASIS_START
# DO NOT EDIT (digest: 82230d61386befb40bc7377608e1f16e) # DO NOT EDIT (digest: 6f7b8221311e800a7093dc3b793f67ca)
set -e set -e
FST=true FST=true
@ -23,5 +23,5 @@ for i in "$@"; do
esac esac
done done
make configure CONFIGUREFLAGS="$@" make configure CONFIGUREFLAGS="$*"
# OASIS_STOP # OASIS_STOP

47
myocamlbuild.ml Normal file
View file

@ -0,0 +1,47 @@
(* OASIS_START *)
(* OASIS_STOP *)
open Ocamlbuild_plugin;;
dispatch
(MyOCamlbuildBase.dispatch_combine [
begin function
| After_rules ->
(* replace with Ocamlbuild_cppo.dispatch when 4.00 is not supported
anymore *)
let dep = "%(name).cppo.ml" in
let prod1 = "%(name: <*> and not <*.cppo>).ml" in
let prod2 = "%(name: <**/*> and not <**/*.cppo>).ml" in
let f prod env _build =
let dep = env dep in
let prod = env prod in
let tags = tags_of_pathname prod ++ "cppo" in
Cmd (S[A "cppo"; T tags; S [A "-o"; P prod]; P dep ])
in
rule "cppo1" ~dep ~prod:prod1 (f prod1) ;
rule "cppo2" ~dep ~prod:prod2 (f prod2) ;
pflag ["cppo"] "cppo_D" (fun s -> S [A "-D"; A s]) ;
pflag ["cppo"] "cppo_U" (fun s -> S [A "-U"; A s]) ;
pflag ["cppo"] "cppo_I" (fun s ->
if Pathname.is_directory s then S [A "-I"; P s]
else S [A "-I"; P (Pathname.dirname s)]
) ;
pdep ["cppo"] "cppo_I" (fun s ->
if Pathname.is_directory s then [] else [s]) ;
flag ["cppo"; "cppo_q"] (A "-q") ;
flag ["cppo"; "cppo_s"] (A "-s") ;
flag ["cppo"; "cppo_n"] (A "-n") ;
pflag ["cppo"] "cppo_x" (fun s -> S [A "-x"; A s]);
(* end replace *)
let major, minor = Scanf.sscanf Sys.ocaml_version "%d.%d.%d"
(fun major minor patchlevel -> major, minor)
in
let ocaml_major = "OCAML_MAJOR " ^ string_of_int major in
let ocaml_minor = "OCAML_MINOR " ^ string_of_int minor in
flag ["cppo"] & S[A"-D"; A ocaml_major; A"-D"; A ocaml_minor]
| _ -> ()
end;
dispatch_default
])