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