# $Id: Portfile 92817 2012-05-07 17:31:14Z mww@macports.org $

PortSystem 1.0

name                ocaml-findlib
version             1.3.1
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           md5     e632bad87f1c7be9414a6b754232ba01 \
                    sha1    996d8ff4372e178a9fb18b690bb9746847763d82 \
                    rmd160  c8a609d74df7dd87850ae34c88307af3636b20bc

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

depends_lib         port:ocaml

configure.args      -bindir ${prefix}/bin \
                    -mandir ${prefix}/share/man \
                    -sitelib ${prefix}/lib/ocaml/site-lib

configure.pre_args  ""

use_parallel_build  no
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 [file normalize ${prefix}/lib/ocaml/site-lib/stublibs]
destroot.keepdirs   ${destroot}${ocamlfind_destdir}
post-destroot {
        file mkdir ${destroot}${ocamlfind_destdir}
}

post-activate {
        # Add our stublibs dir path to ld.conf
        set ldconfpath [exec ${prefix}/bin/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/ocaml/site-lib/stublibs]
        set ldconfpath [exec ${prefix}/bin/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
}
