description = "Eliom: client-server Web and mobile applications"
version = "6.3.0"

package "server" (
  description = "Eliom: server-side"
  version = "[distributed with Eliom]"
  directory = "server"

  requires = "ocsigenserver,
              ocsigenserver.ext,
              ppx_deriving.runtime,
              js_of_ocaml.deriving,
              react,
              reactiveData,
              tyxml,
              lwt_react,
              cryptokit,
              reactiveData"
  archive(byte) = "server.cma"
  archive(native) = "server.cmxa"

  package "monitor" (
    directory = "monitor"
    description = "Eliom: monitoring"
    version = "[distributed with Eliom]"
    archive(byte) = "eliom_monitor.cma"
    archive(native) = "eliom_monitor.cmxa"
    package "start" (
      description = "Eliom: monitoring"
      version = "[distributed with Eliom]"
      require = "eliom.server.monitor"
      archive(byte) = "eliom_monitor_main.cma"
      archive(native) = "eliom_monitor_main.cmxa"
    )
  )
)

package "client" (
  description = "Eliom: client-side"
  version = "[distributed with Eliom]"
  directory = "client"

  requires = "ocsigenserver.cookies,
              ocsigenserver.polytables,
              ocsigenserver.baselib.base,
              ppx_deriving.runtime,
              js_of_ocaml,
              js_of_ocaml.deriving,
              js_of_ocaml-tyxml,
              js_of_ocaml-lwt,
              js_of_ocaml-lwt.logger,
              js_of_ocaml.weak,
              lwt_react,
              react,
              reactiveData,
              tyxml.functor"
  archive(byte) = "client.cma eliom_client_main.cmo"

  linkopts(javascript) = "+eliom.client/eliom_client.js"
)

package "syntax" (
  directory = "syntax"
  package "common" (
    description = "Syntax extension: spliting client and server code (base)"
    version = "[distributed with Eliom]"
    requires = "camlp4, bytes"
    requires(preprocessor, syntax, pkg_type_conv) = "type_conv"
    archive(syntax, preprocessor) = "pa_eliom_seed.cmo"
  )

  package "client" (
    description = "Syntax extension: spliting client and server code (client side)"
    version = "[distributed with Eliom]"
    requires(syntax, preprocessor) = "eliom.syntax.common"
    requires(syntax, toploop) = "eliom.syntax.common"
    archive(syntax, preprocessor) = "pa_eliom_client_client.cmo"
    archive(syntax, toploop) = "pa_eliom_client_client.cmo"
  )

  package "server" (
    description = "Syntax extension: spliting client and server code (server side)"
    version = "[distributed with Eliom]"
    requires(syntax, preprocessor) = "eliom.syntax.common"
    requires(syntax, toploop) = "eliom.syntax.common"
    archive(syntax, preprocessor) = "pa_eliom_client_server.cmo"
    archive(syntax, toploop) = "pa_eliom_client_server.cmo"
  )

  package "type" (
    description = "Syntax extension: spliting client and server code (type inference)"
    version = "[distributed with Eliom]"
    requires(syntax, preprocessor) = "eliom.syntax.common"
    archive(syntax, preprocessor) = "pa_eliom_type_filter.cmo"
  )

  package "predef" (
    description = "Syntax extension: predefined commonly use syntaxes"
    version = "[distributed with Eliom]"

    requires(syntax, preprocessor) = "lwt_camlp4"
    requires(syntax, toploop) = "lwt_camlp4"
    archive(syntax, preprocessor) = "-ignore dummy"
  )

)

package "ppx" (
  directory = "ppx"
  package "server" (
    description = "Ppx syntax extension: server side"
    ppx = "ppx_eliom_server"
  )
  package "client" (
    description = "Ppx syntax extension: client side"
    ppx = "ppx_eliom_client"
  )
  package "type" (
    description = "Ppx syntax extension: type inference"
    ppx = "ppx_eliom_types"
  )
)


package "templates" (
  directory = "templates"
)

package "ocamlbuild" (
  description = "Eliom ocamlbuild plugin (js_of_ocaml part included)"
  version = "[distributed with Eliom]"
  directory = "ocamlbuild"
  requires = "js_of_ocaml.ocamlbuild"
  archive(byte) = "ocamlbuild_eliom.cma"
  archive(byte, plugin) = "ocamlbuild_eliom.cma"
  archive(native) = "ocamlbuild_eliom.cmxa"
  archive(native, plugin) = "ocamlbuild_eliom.cmxs"
)
