# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           github 1.0
PortGroup           legacysupport 1.1

# faccessat
legacysupport.newest_darwin_requires_legacy 13

github.setup        ocaml opam 2.5.1

name                opam
revision            0
categories          ocaml sysutils
license             LGPL-2
maintainers         {@pmetzger pmetzger} openmaintainer
homepage            http://opam.ocaml.org/
description         OPAM is a package manager for OCaml
long_description    OPAM is a source-based package manager for OCaml.\
                    It supports multiple simultaneous compiler installations,\
                    flexible package constraints, and a Git-friendly\
                    development workflow.

github.tarball_from releases
distname            opam-full-${version}

checksums           rmd160  c284bd981a8b1662d66ac027a5644a591160641b \
                    sha256  48c5bfaf5f5c4048cc5f40025de7385f5bad3a8269756216cd6dd2f2150033ed \
                    size    14466379

depends_build       port:ocaml

# This prevents configure from trying to use a program to fetch dependencies.
# We don't need or want one.
configure.env-append  FETCH=no

# * patch-stop-fetch-check.diff dikes out a test that will prevent us
#   from disabling fetch. Otherwise FETCH=no will fail and we'll need to
#   depend on curl or wget.
# * patch-makefile.diff is a kludge to put documentation files into
#   share/doc/opam-installer -- without this, they'd end up in
#   doc/opam-installer, and there is no /opt/local/doc.
patchfiles          patch-stop-fetch-check.diff \
                    patch-makefile.diff

# If ocaml-dune is activated (or a new dune version is found), build would
# fail as vendored re library benchmarks use %{env:CI=false} in enabled_if
# that chokes it. Disable benchmarks entirely.
post-configure {
    reinplace "s|%{env:CI=false}|false|g" \
        ${worksrcpath}/src_ext/re/benchmarks/dune
}

use_parallel_build  no
build.target        all
configure.args-append --with-vendored-deps

# Match OCaml settings:
compiler.blacklist  *gcc-4.0 *gcc-4.2 {clang < 400}

if {[string match *gcc* ${configure.compiler}]} {
    # Temporary fix for:
    # https://github.com/ocaml-opam/ocaml-mccs/issues/51
    # https://github.com/ocaml/dune/issues/949
    configure.args-append \
                    --without-mccs
}

platform darwin {
    if {${os.major} < 14} {
        patchfiles-append \
                    patch-link-legacysupport.diff

        post-patch {
            reinplace "s|@PREFIX@|${prefix}|" ${worksrcpath}/src/core/dune
        }
    }

    if {${os.major} < 11} {
        # Matching ocaml 1.1 PG setting.
        # See: https://github.com/ocaml/dune/issues/8941
        build.env-append \
                    DUNE_CONFIG__COPY_FILE=portable
    }
}
