(library
  (public_name elpi)
  (preprocess (per_module
    ((pps ppx_deriving.std) API data compiler)
    ((pps ppx_deriving.std elpi.trace.ppx -- --cookie "elpi_trace=\"true\"") runtime)
    ((pps ppx_deriving.std elpi.trace.ppx -- --cookie "elpi_trace=\"false\"") runtime_trace_off)
    ))
  (libraries re.str unix stdlib-shims elpi.parser elpi.util
    (select legacy_parser_proxy.ml from
      (elpi.legacy_parser -> legacy_parser_proxy.real.ml)
      (-> legacy_parser_proxy.dummy.ml)))
  ; (flags -linkall)
  (modules
    ; ----- public API ---------------------------------
    elpi API builtin builtin_checker
    ; ----- internal stuff -----------------------------
    compiler data ptmap runtime_trace_off runtime
    builtin_stdlib builtin_map builtin_set
    legacy_parser_proxy)
  (private_modules
    compiler data ptmap runtime_trace_off runtime
    builtin_stdlib builtin_map builtin_set
    legacy_parser_proxy)
)

(rule (with-stdout-to builtin_stdlib.ml (progn
  (echo "let code = {code|#line 0 \"builtin_stdlib.elpi\"\n")
  (cat builtin_stdlib.elpi)
  (echo "|code};;")
)))
(rule (with-stdout-to builtin_map.ml (progn
  (echo "let code = {code|#line 0 \"builtin_map.elpi\"\n")
  (cat builtin_map.elpi)
  (echo "|code};;")
)))
(rule (with-stdout-to builtin_set.ml (progn
  (echo "let code = {code|#line 0 \"builtin_set.elpi\"\n")
  (cat builtin_set.elpi)
  (echo "|code};;")
)))
(rule (with-stdout-to builtin_checker.ml (progn
  (echo "let code = {code|")
  (echo "#line 0 \"elpi-quoted_syntax.elpi\"\n")
  (cat elpi-quoted_syntax.elpi)
  (echo "#line 0 \"elpi-checker.elpi\"\n")
  (cat elpi-checker.elpi)
  (echo "|code};;")
)))


(install
  (section lib)
  (files builtin.elpi elpi-quoted_syntax.elpi elpi2html.elpi trace_atd.ts trace.atd)
  (package elpi))

(rule
  (targets builtin.elpi)
  (mode promote)
  (action (with-stdout-to %{targets}
    (progn
      (echo "% File generated by elpi -document-builtins, do not edit")
      (run elpi -document-builtins))))
)

(executable
  (name elpi_trace_elaborator)
  (public_name elpi-trace-elaborator)
  (libraries yojson atdgen re)
  (modules elpi_trace_elaborator trace_atd)
  (package elpi)
)

(rule
  (targets trace_atd.ml trace_atd.mli)
  (action (run atdgen -o trace_atd -j-std %{dep:trace.atd})))

(rule
  (targets trace_atd.ts)
  (mode promote)
  (action (copy %{dep:trace.ts} trace_atd.ts)))

(rule
  (targets trace.ts)
  (action (run atdts %{dep:trace.atd})))

(include dune.config)
