(executables
 (names toplevel)
 (libraries
  js_of_ocaml-compiler
  js_of_ocaml-tyxml
  js_of_ocaml-toplevel
  lwt
  js_of_ocaml-lwt
  ;; not used directly
  graphics
  js_of_ocaml.deriving
  react
  reactiveData
  str
  dynlink
  (select
   ocp_indent.ml
   from
   (ocp-indent.lib -> ocp_indent.ok.ml)
   (-> ocp_indent.fake.ml))
  (select
   colorize.ml
   from
   (higlo -> colorize.higlo.ml)
   (!higlo -> colorize.fake.ml))
  (select
   graphics_support.ml
   from
   (js_of_ocaml-lwt.graphics -> graphics_support.enabled.ml)
   (-> graphics_support.disabled.ml))
  (select
   ppx_support.ml
   from
   (js_of_ocaml-ppx -> ppx_support.enabled.ml)
   (-> ppx_support.disabled.ml)))
 (flags
  (:standard -rectypes))
 (link_flags
  (:standard -linkall))
 (modes byte js)
 (js_of_ocaml
  ; We use the generated file in the doc. Let's not bloat it with sourcemap.
  ; Plus, the source map would be too large on 32-bit architectures
  (sourcemap no)
  (build_runtime_flags
   (:standard
    --file
    %{dep:examples.ml}
    --file
    %{dep:test_dynlink.cmo}
    --file
    %{dep:test_dynlink.js}
    --file
    %{dep:test_lib_jsoo.js}
    --file
    (:include html_types_path.txt)))
  (flags
   (:standard --toplevel)))
 (modules
  (:standard \ test_dynlink examples effects_flags))
 (preprocess
  (pps js_of_ocaml-ppx)))

(rule
 (target html_types_path.txt)
 (action
  (with-stdout-to
   %{target}
   (run
    ocamlfind
    query
    tyxml.functor
    -format
    "%d/html_types.cmi:/static/cmis/"))))

(rule
 (targets test_dynlink.cmo test_dynlink.cmi)
 (action
  (run ocamlc -c %{dep:test_dynlink.ml})))

(rule
 (targets test_dynlink.js)
 (action
  (run
   %{bin:js_of_ocaml}
   --pretty
   --toplevel
   %{read-strings:effects_flags.txt}
   %{dep:test_dynlink.cmo})))

(rule
 (target test_lib_jsoo.js)
 (action
  (run
   %{bin:js_of_ocaml}
   --pretty
   --toplevel
   --include-runtime
   %{read-strings:effects_flags.txt}
   %{dep:test_lib/stubs.js}
   %{dep:test_lib/test_lib_jsoo.cma}
   -o
   %{target})))

(rule
 (targets export.txt)
 (deps
  (package js_of_ocaml-ppx)
  (package js_of_ocaml)
  (package js_of_ocaml-compiler)
  (package js_of_ocaml-lwt)
  (package js_of_ocaml-tyxml)
  (package js_of_ocaml-toplevel))
 (action
  (run
   jsoo_listunits
   -o
   %{targets}
   stdlib
   graphics
   str
   dynlink
   js_of_ocaml-compiler.runtime
   js_of_ocaml-lwt.graphics
   js_of_ocaml-ppx.as-lib
   js_of_ocaml.deriving
   lwt
   tyxml.functor
   tyxml.functor:html_types.cmi
   react
   reactiveData
   js_of_ocaml
   js_of_ocaml-lwt
   js_of_ocaml-tyxml
   js_of_ocaml-toplevel)))

(executable
 (name effects_flags)
 (modules effects_flags))

(rule
 (target effects_flags.txt)
 (action
  (with-stdout-to
   %{target}
   (run ./effects_flags.exe txt %{profile}))))

(rule
 (targets toplevel.js)
 (action
  (run
   %{bin:js_of_ocaml}
   compile
   --pretty
   %{read-strings:effects_flags.txt}
   --Werror
   --target-env
   browser
   --file
   %{dep:examples.ml}
   --file
   %{dep:test_dynlink.cmo}
   --file
   %{dep:test_dynlink.js}
   --file
   %{dep:test_lib_jsoo.js}
   --export
   %{dep:export.txt}
   --toplevel
   --disable
   shortvar
   %{dep:toplevel.bc}
   -o
   %{targets})))

(alias
 (name default)
 (deps toplevel.js toplevel.bc.js index.html))
