;; Some files must be preprocessed by cppo.
(rule
  (targets cloud.ml)
  (deps cloud.cppo.ml)
  (action (run %{bin:cppo} -V OCAML:%{ocaml_version} %{deps} -o %{targets})))
(rule
  (targets test02.ml)
  (deps test02.cppo.ml)
  (action (run %{bin:cppo} -V OCAML:%{ocaml_version} %{deps} -o %{targets})))
(rule
  (targets testallprims.ml)
  (deps testallprims.cppo.ml)
  (action (run %{bin:cppo} -V OCAML:%{ocaml_version} %{deps} -o %{targets})))
(rule
  (targets VisitorsRuntimeBootstrap.ml)
  (deps VisitorsRuntimeBootstrap.cppo.ml)
  (action (run %{bin:cppo} -V OCAML:%{ocaml_version} %{deps} -o %{targets})))

(executable
  (name bench)
  (modules bench)
  (preprocess (pps visitors.ppx))
  (libraries core_bench)
)

(library
  (name snippets_basic)
  (preprocess (pps visitors.ppx))
  (flags -w A-4-34-44)
  (modules
    point build
    cloud
    delayed_tree
    dictionary
    expr00
    expr00endo
    expr00fold
    expr00fold2
    expr01
    expr01use
    expr01use_variant
    expr02
    expr03
    expr04
    expr05lexico
    expr05lexico_test
    expr05
    expr06
    expr11
    expr15b
    expr15c
    expr15
    expr16
    expr17
    expr_info_mapreduce
    expr_info_mapreduce_test
    expr_info_mapreduce_use
    expr_info
    expr_info_polymorphic
    expr_info_polymorphic_use
    expr_info_polymorphic_use_test
    expr_info_use
    expr
    expr_redef
    fold
    map_from_fold
    mapReduce
    monomorphic
    monopoly
    oexpr_polymorphic
    OOinferfixedagaincheck
    OOinferfixedagain
    OOinferfixed
    OOinfer
    OOinferself
    OOinfervirtual
    opaque
    polyclass
    prefixes
    test00
    test01
    test02
    test03
    test04
    test05
    test06
    test07
    testallprims
    VisitorsRuntimeBootstrap
  )
)

(library
  (name snippets_that_need_hashcons)
  (preprocess (pps visitors.ppx))
  (flags -w A-4-34-44)
  (libraries hashcons)
  (modules
    expr08
    expr08double
    expr08extra
    expr12
    expr13double
    expr13extra
    expr13
    expr14
    hexpr_polymorphic
  )
)

;; (library
;;   (name snippets_that_need_ppx_import)
;;   (preprocess (pps visitors.ppx))
;;   (flags -w A-4-34-44)
;;   (libraries ppx_import)
;;   (modules
;;     expr_import
;;     expr_import_opaque
;;   )
;; )

(library
  (name cil)
  (modules cil_types cil_types_polymorphic)
  (preprocess (pps visitors.ppx))
)
