(library
  (public_name elpi)
  (preprocess (per_module
    ((pps ppx_deriving.std) API)
    ))
  (libraries re.str unix stdlib-shims elpi.parser elpi.util elpi.compiler elpi.runtime)
  (modules API builtin builtin_stdlib builtin_map builtin_set)
  (private_modules builtin_stdlib builtin_map builtin_set )
)

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

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

(rule
  (targets builtin.elpi)
  (mode promote)
  (action (with-stdout-to %{targets}
      (run elpi -document-builtins)))
)

(executable
  (name elpi_trace_elaborator)
  (public_name elpi-trace-elaborator)
  (libraries yojson atdgen-runtime 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})))
