# $Id: Portfile 59356 2009-10-13 22:25:22Z avsm@macports.org $

PortSystem          1.0
name                caml-findlib
version             1.2.5
distname            findlib-${version}
categories          devel ml
maintainers         avsm
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
platforms           darwin
master_sites        http://download.camlcity.org/download/
build.target        all opt
use_parallel_build  no
checksums           md5     db12a92903c2869bb89e1a6446db269e \
                    sha1    e0c6da48f9ea40c67f1d4857b428d20335b0c847 \
                    rmd160  a122ce8ef60fce12c2b30f7275a4f1480d0833bc

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

universal_variant   no

destroot.destdir    prefix=${destroot}

# `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 ${destroot}${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} {
            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 doesn't actually exist
# which annoys me, because it means I can't remove the line I added to ld.conf
#pre-deactivate {
#        # remove our stublibs dir path from ld.conf
#        set ocamlfind_destdir [file normalize ${prefix}/lib/ocaml/site-lib/stublibs]
#        set ldconfpath ${destroot}[exec ${destroot}${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 {
        configure.args-append -with-toolbox
        depends_lib bin:lablgtk:lablgtk
}
