# $Id$

PortSystem 1.0

name                ocaml3-findlib
version             1.4
distname            findlib-${version}
categories          devel ml
maintainers         mww openmaintainer
platforms           darwin
license             MIT
description         Objective Caml library management system
long_description    The findlib library provides a scheme to manage reusable \
                    software components (packages), and includes tools that support \
                    this scheme. Packages are collections of OCaml modules for which \
                    metainformation can be stored. The packages are kept in the filesystem \
                    hierarchy, but with strict directory structure. The library contains \
                    functions to look the directory up that stores a package, to query \
                    metainformation about a package, and to retrieve dependency information \
                    about multiple packages. There is also a tool that allows the user to \
                    enter queries on the command-line. In order to simplify compilation and \
                    linkage, there are new frontends of the various OCaml compilers that \
                    can directly deal with packages.
homepage            http://projects.camlcity.org/projects/findlib.html
master_sites        http://download.camlcity.org/download/
checksums           rmd160  ab81e1521fe51ab69427d791347ad21ad404855a \
                    sha256  6e4065e5d79d31176ec213ff94599c4eae17c3904c2896e845d0379a99f1bdf8

livecheck.type      regex
livecheck.regex     "findlib-(.*?).tar.gz"

depends_lib         port:ocaml3

patchfiles          patch-site-lib-src-camlp4.310-META.in.diff

configure.env-append PATH=${prefix}/libexec/ocaml3:$env(PATH)
configure.args      -bindir ${prefix}/libexec/ocaml3 \
                    -mandir ${prefix}/share/man \
                    -sitelib ${prefix}/lib/ocaml3/site-lib \
                    -config ${prefix}/etc/ocaml3/findlib.conf

configure.pre_args  ""

use_parallel_build  no
build.env-append    PATH=${prefix}/libexec/ocaml3:$env(PATH)
build.target        all opt

destroot.destdir    prefix=${destroot}

universal_variant   no

# `ocamlfind printconf destdir` returns nothing if the dir isn't in place
# but we know it's the same as our site-lib dir
set ocamlfind_destdir ${prefix}/lib/ocaml3/site-lib/stublibs
destroot.keepdirs   ${destroot}${ocamlfind_destdir}
post-destroot {
    xinstall -m 755 -d ${destroot}${ocamlfind_destdir}
    xinstall -m 755 ${filespath}/camlp4find ${destroot}${prefix}/libexec/ocaml3/camlp4find
    delete ${destroot}${prefix}/share/man
}

post-activate {
        # Add our stublibs dir path to ld.conf
        set ldconfpath [exec ${prefix}/libexec/ocaml3/ocamlfind printconf ldconf]
        # ld.conf should exist since ocaml is installed, but lets just be safe anyway
        if {[file exists $ldconfpath]} then {
          # make sure ld.conf doesn't already have this line, so if the user installs,
          # uninstalls, then installs again, we won't duplicate it
          set has_line 0
          set ldconf [open $ldconfpath r+]
          while {[gets $ldconf line] != -1 && !$has_line} {
            if {[string equal $line $ocamlfind_destdir]} then {
              set has_line 1
            }
          }
          if {!$has_line} {
            if {${registry.format} == "receipt_flat"} {
                ui_msg "## Adding line `${ocamlfind_destdir}' to file ${ldconfpath}"
                ui_msg "## Be sure to remove this line if you uninstall ${name}"
            }
            puts $ldconf $ocamlfind_destdir
          }
          close $ldconf
        } else {
          ui_warn "File ${ldconfpath} doesn't seem to be installed."
          ui_warn "Is ocaml installed properly?"
        }
}

pre-deactivate {
        # remove our stublibs dir path from ld.conf
        set ocamlfind_destdir [file normalize ${prefix}/lib/ocaml3/site-lib/stublibs]
        set ldconfpath [exec ${prefix}/libexec/ocaml3/ocamlfind printconf ldconf]
        set ldconfoutpath [file dirname $ldconfpath]/.[file tail $ldconfpath]~
        if {[file exists $ldconfpath]} then {
          set ldconf [open $ldconfpath r]
          set ldconfout [open $ldconfoutpath w]
          while {[gets $ldconf line] != -1} {
            if {![string equal $line $ocamlfind_destdir]} {
              puts $ldconfout $line
            }
          }
          close $ldconfout
          close $ldconf
          file rename -force $ldconfoutpath $ldconfpath
        }
}

variant toolbox description {build the toolbox wizard, requires labltk} {
        configure.args-append -with-toolbox
        depends_lib bin:lablgtk:lablgtk
}