#!/usr/bin/env ocaml
#use "myocamlbuild_config.ml"
-let valid_targets = [ "distclean"; "clean"; "all" ]
+let valid_targets = [ "distclean"; "clean"; "all" ]
module Cmdline =
struct
open Arg
let set r s () = r := s
+ let cons r s () = r := s :: !r
let targets = ref []
+ let tags = ref []
let flavor = ref "native"
- let debug = ref ""
- let profile = ref ""
let verbose = ref ""
let jobs = ref 0
let specs = align
- [ "-verbose", Unit (set verbose "-classic-display"),
+ [ "-verbose", Unit (set verbose " -classic-display"),
" Display compilation commands";
- "-debug", Unit (set debug "-tag debug"),
+ "-debug", Unit (cons tags "-tag debug"),
" Build with debugging code";
- "-profile", Unit (set profile "-tag profile"),
+ "-profile", Unit (cons tags "-tag profile"),
" Build with profiling code";
+ "-trace", Unit (cons tags "-tag trace"),
+ " Build with tracing code enabled";
+
"-byte", Unit (set flavor "byte"),
" Produce bytecode instead of native code";
"-j", Int (fun i -> if i < 0 || i > 1024
let () = Cmdline.parse ()
let cmd_list =
let ocamlbuild =
- Printf.sprintf "ocamlbuild %s %s %s -j %i "
- !Cmdline.verbose !Cmdline.profile !Cmdline.debug !Cmdline.jobs
+ Printf.sprintf "ocamlbuild %s %s -j %i "
+ !Cmdline.verbose (String.concat " " !Cmdline.tags) !Cmdline.jobs
in
List.map begin function
- | "distclean" -> "rm myocamlbuild_config.ml; ocamlbuild -clean"
+ | "distclean" -> "rm -f myocamlbuild_config.ml; ocamlbuild -clean"
| "clean" -> "ocamlbuild -clean"
| "all" -> ocamlbuild ^ (List.assoc !Cmdline.flavor main_targets)
| test ->