<pre style='margin:0'>
Landon Fuller (landonf) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/a91041afdf6232bf5aee55b8c449dbde443c3b29">https://github.com/macports/macports-ports/commit/a91041afdf6232bf5aee55b8c449dbde443c3b29</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a91041afdf6232bf5aee55b8c449dbde443c3b29
</span>Author: Landon Fuller <landonf@macports.org>
AuthorDate: Wed Sep 25 20:26:59 2019 -0600
<span style='display:block; white-space:pre;color:#404040;'> ocaml-1.1: New OCaml port group
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This adds support for additional build tools (dune, topkg), and
</span><span style='display:block; white-space:pre;color:#404040;'> simplifies destroot configuration of ocamlfind.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Ports for dune and topkg will be committed shortly.
</span>---
_resources/port1.0/group/ocaml-1.1.tcl | 582 +++++++++++++++++++++++++++++++++
1 file changed, 582 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/ocaml-1.1.tcl b/_resources/port1.0/group/ocaml-1.1.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..b218ab5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/ocaml-1.1.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,582 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; truncate-lines: t -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This PortGroup provides support for building most OCaml projects, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# will automatically register a build and runtime dependency on port:ocaml.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Usage:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# PortGroup ocaml 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Common Options:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.build_type <oasis|dune|topkg|none>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The OCaml build system used by the project. If 'none' (or empty),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the standard MacPorts build target will be used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The necessarily build dependencies will be registered automatically.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: none (empty)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.destroot_type <oasis|dune|topkg|opam|none>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The OCaml tool used to perform installation, if it differs from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the project's build system. If 'none' (or empty), the standard
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# MacPorts destroot target will be used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Any necessarily build dependencies will be registered automatically.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${ocaml.build_type}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.bin <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to the ocaml(1) binary.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${prefix}/bin/ocaml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.package_dir <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to the OCaml site-lib directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${prefix}/lib/ocaml/site-lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.stublib_dir <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to the OCaml site-lib stublib directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${ocaml.package_dir}/stublibs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml.use_findlib <bool>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If set to yes, `port:ocamlfind` will be appended
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to `depends_lib`, and the `OCAMLFIND_DESTDIR` and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# `OCAMLFIND_LDCONF` environmental variables will be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# configured appropriately prior to execution of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# build and destroot targets.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is particularly useful with OCaml projects that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# use `ocamlfind` in combination with make(1) or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# another non-OCaml build system.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: Automatically determined based on the value of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ${ocaml.build_type}.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## Oasis Options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# oasis.setup <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to the Oasis setup.ml file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${worksrcpath}/setup.ml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# oasis.build_docs <bool>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If set to yes, documentation will be built using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Oasis' '-doc' step.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## Dune Options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# dune.root <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The dune project root.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# dune.packages <string...>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If set to a non-empty value, restricts the set of packages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# visible to dune (using --only-package)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: (empty)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# dune.profile <string>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Build profile.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# dune.build.target <string>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Build target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: @install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## 'topkg' Options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# topkg.setup <path>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to the topkg pkg.ml file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Default: ${worksrcpath}/pkg/pkg.ml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespace eval ocaml {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set configs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib ocaml-findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build ocaml-ocamlbuild
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ findlib_env yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib ocaml-findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build ocaml-dune
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib ocaml-findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml-topkg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml-ocamlbuild
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ findlib_env yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ opam {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib ocaml-findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml-ocamlbuild
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ opam
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ findlib_env yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ alias_for opam
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ findlib {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib ocaml-findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ findlib_env yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocamlbuild {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build ocaml-ocamlbuild
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc get_configs {type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get ${ocaml::configs} ${type}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc resolve_config {type name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set path [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while {true} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists [get_configs $type] ${name}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If no destroot configuration is found, default to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # corresponding build configuration
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$type eq "destroot"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set type "build"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If not performing alias resolution, just return the original path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[llength $path] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [list ${type} ${name}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Report the alias resolution error
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "No such $type configuration: ${name} (resolved from [join ${path} "->"])"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Handle alias resolution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg [dict get [get_configs $type] ${name}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $cfg alias_for]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set alias_for [dict get $cfg alias_for]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Must only contain a single 'alias_for' key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict size ${cfg}] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "The $type alias for $name contains additional configuration keys"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Must not introduce an alias loop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[lsearch $path $alias_for] != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "The $type alias for $name contains a loop ($alias_for)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Search for the alias target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend path $name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set name $alias_for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [list ${type} ${name}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc has_config {type name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict exists ${ocaml::configs} {*}[resolve_config $type $name]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc get_config {type name {required no}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$required eq "required"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set required yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![string is bool "$required"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Invalid `required` argument: $required"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set path [resolve_config $type $name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists ${ocaml::configs} {*}${path}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get ${ocaml::configs} {*}${path}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {!$required} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Unknown ocaml $type type: $name"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc get_deps {config dep_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $config $dep_type]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $config $dep_type]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc get_bool {config default_value args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $config {*}$args]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $config {*}$args]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $default_value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc get_needs_findlib {config} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [get_bool $config no findlib_env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc register_depends {config} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dt {build lib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set deps [get_deps $config depends_$dt]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dep ${deps} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Some of our dependencies can use their own ocaml.(build|destroot)_type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to bootstrap themselves; make sure we don't register a circular dependency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # should they do so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${dep} eq ${subport}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_${dt}-delete port:${dep}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_${dt}-append port:${dep}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc register_depends_callback {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.build_type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.destroot_type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.use_findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ register_depends [get_config build ${ocaml.build_type} required]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ register_depends [get_config destroot ${ocaml.destroot_type} required]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach name {findlib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[set ocaml.use_${name}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ register_depends [get_config use ${name}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Everyone gets an OCaml dependency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-delete port:ocaml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append port:ocaml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+port::register_callback ocaml::register_depends_callback
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ocaml is not universal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+universal_variant no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options ocaml.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.build_type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.destroot_type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.package_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.stublib_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ocaml.use_findlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.bin {${prefix}/bin/ocaml}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.package_dir {${prefix}/lib/ocaml/site-lib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.stublib_dir {${ocaml.package_dir}/stublibs}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.build_type none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.destroot_type {[ocaml::get_default_destroot_type]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default ocaml.use_findlib {[ocaml::get_needs_findlib [ocaml::get_config build ${ocaml.build_type}]]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+option_proc ocaml.build_type ocaml::set_target_type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+option_proc ocaml.destroot_type ocaml::set_target_type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc ocaml::get_default_destroot_type {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global ocaml.build_type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # topkg relies on opam to perform installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- ${ocaml.build_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return "opam"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ${ocaml.build_type}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc ocaml::set_target_type {option action args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We're only interested in mutations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- $action {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unset {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ read { return }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Invalid ${option} option_proc action: \"$action\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- $option {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "ocaml.build_type" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set type "build"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "ocaml.destroot_type" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set type "destroot"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Unsupported ${option}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Normalize and validate the (build|destroot) type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -regexp -- $args {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "^[\s]*$" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rewrite empty values to "none"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${option} none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![has_config $type ${args}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Invalid value for ${option}: $args"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Oasis builds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options oasis.setup \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis.build_docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.setup {${worksrcpath}/setup.ml}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build_docs no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commands oasis.configure \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis.build \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis.build_docs \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.configure.cmd {${ocaml.bin} ${oasis.setup}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.configure.env {${configure.env}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.configure.dir {${configure.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.configure.nice {${configure.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.configure.pre_args {-configure --prefix ${prefix} --destdir ${destroot}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build.cmd {${oasis.configure.cmd}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build.env {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build.dir {${build.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build.nice {${build.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.build.pre_args {-build}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.docs.cmd {${oasis.build.cmd}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.docs.env {${oasis.build.env}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.docs.dir {${oasis.build.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.docs.nice {${oasis.build.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.docs.pre_args {-doc}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.destroot.cmd {${oasis.build.cmd}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.destroot.env {${oasis.build.env}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.destroot.dir {${destroot.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.destroot.nice {${destroot.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default oasis.destroot.pre_args {-install}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Dune builds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options dune.root \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune.packages \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune.profile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.root {${worksrcpath}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.packages {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.profile {release}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commands dune.build \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options dune.build.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.cmd {${prefix}/bin/dune}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.env {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.dir {${build.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.nice {${build.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.target {@install}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.pre_args {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -j ${build.jobs}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --root=${dune.root}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --profile=${dune.profile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [ocaml::dune_get_only_packages_param]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --default-target=${dune.build.target}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.build.post_args {${dune.build.target}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.destroot.cmd {${dune.build.cmd}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.destroot.env {${dune.build.env}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.destroot.dir {${destroot.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.destroot.nice {${destroot.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.destroot.pre_args {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -j ${build.jobs}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --root=${dune.root}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --destdir=${destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${dune.packages}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.cmd {${dune.build.cmd}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.env {${dune.build.env}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.dir {${test.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.nice {${build.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.pre_args {${dune.build.pre_args}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dune.test.post_args {@runtest}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc ocaml::dune_get_only_packages_param {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global dune.packages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${dune.packages} eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return "--only-packages=[join ${dune.packages} ","]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 'topkg' build support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options topkg.setup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.setup {${worksrcpath}/pkg/pkg.ml}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commands topkg.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.build.cmd {${ocaml.bin} ${topkg.setup}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.build.env {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.build.dir {${build.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.build.nice {${build.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default topkg.build.pre_args {build}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 'opam' destroot support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commands opam.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default opam.destroot.cmd {${prefix}/bin/opam-installer}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default opam.destroot.env {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default opam.destroot.dir {${destroot.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default opam.destroot.nice {${destroot.nice}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default opam.destroot.pre_args {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --prefix=${destroot}${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --docdir=share/doc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --libdir=${destroot}${ocaml.package_dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --mandir=share/man
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Target overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch ${ocaml.build_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec oasis.configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do-configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Unsupported ocaml.build_type: ${ocaml.build_type}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- ${ocaml.build_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec oasis.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[tbool oasis.build_docs]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec oasis.docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec dune.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec topkg.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do-build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pre-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${ocaml.package_dir} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${ocaml.stublib_dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Environmental variables required by ocamlfind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc ocaml::findlib_env {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global destroot ocaml.package_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ OCAMLFIND_DESTDIR "${destroot}/${ocaml.package_dir}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ OCAMLFIND_LDCONF "ignore"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Save the environment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global env
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set saved_env [array get env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[tbool ocaml.use_findlib]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set env [ocaml::findlib_env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- ${ocaml.destroot_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec oasis.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec dune.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ opam {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec opam.destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do-destroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Restore the environment.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array unset env *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set env [array get saved_env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- ${ocaml.build_type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dune {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command_exec dune.test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ oasis -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ topkg -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do-test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span>\ No newline at end of file
</pre><pre style='margin:0'>
</pre>