(library
  (name elpi)
  (public_name elpi)
  (preprocess (per_module
    ((pps ppx_deriving.std) API ast 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)
    ((action (run camlp5o -I . -I +camlp5 pa_extend.cmo pa_lexer.cmo %{input-file})) parser)
    ))
  (libraries re.str camlp5.gramlib unix stdlib-shims)
  (flags -linkall)
  (modules elpi util parser ast compiler data ptmap builtin builtin_checker builtin_stdlib builtin_map builtin_set API runtime_trace_off runtime)
  (private_modules util parser ast compiler data ptmap builtin_stdlib builtin_map builtin_set runtime runtime_trace_off)
)

(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)
)

(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))))
)
