# $Id: Portfile 120341 2014-05-23 19:41:42Z mmoll@macports.org $

PortSystem 1.0
PortGroup           cmake 1.0
PortGroup           active_variants 1.1
PortGroup           compiler_blacklist_versions 1.0

name                ompl
version             0.14.2
categories          science
maintainers         mmoll
description         The Open Motion Planning Library (OMPL)
long_description    The Open Motion Planning Library (OMPL) consists of a set \
                    of sampling-based motion planning algorithms.
homepage            http://ompl.kavrakilab.org
platforms           darwin
license             BSD
master_sites        https://bitbucket.org/ompl/ompl/downloads
dist_subdir         ${name}/${version}_1
checksums           md5     43ea02ca9ffff1719a87edf570874eaf \
                    sha1    8410ea13e5b58c790cbfff7f369a09c6a0ea3a8f \
                    rmd160  51dddb685f100bd9ce2772f860f610d5dcf428ef
distname            ${name}-${version}-Source
depends_lib-append  port:boost port:ode port:flann port:triangle

# We "inherit" the compiler fallback and blacklist from the Boost port,
# since OMPL depends heavily on Boost.
compiler.fallback-append macports-clang-3.3
compiler.blacklist {clang < 421} macports-clang-2.9 macports-clang-3.0 llvm-gcc-4.2 macports-llvm-gcc-4.2 apple-gcc-4.2 gcc-4.2 gcc-4.0 apple-gcc-4.0 gcc-3.3

# no universal of gccxml-devel
universal_variant   no
configure.args-append   -DOMPL_BUILD_DEMOS=OFF
# generate the extra C++ code needed for Python bindings. This code seems
# somewhat dependent on compiler and/or boost version, so we can't
# pre-generate them and make them available as an extra download.
post-configure {
    # enable parallel build on at most 2 cores. Generating the bindings
    # uses large amounts of memory, so don't use more cores.
    if { ${use_parallel_build} } { set cj "-j 2" } else { set cj "" }
    system "cd ${worksrcpath}; ${build.cmd} ${cj} update_bindings"
}

# The +app variant includes all the content of the regular OMPL version, but
# adds a simple GUI and an extra library with bindings to the assimp and fcl
# libraries. The cascade of dependencies due to pyqt4 is rather large, so by
# default the +app variant is not enabled. Also, the additions to OMPL in
# this variant are distributed under a slightly different license than the
# regular OMPL version.
variant app description {Include GUI and extra demo code} {
    distname            omplapp-${version}-Source
    license             noncommercial
    pre-extract {
        ui_warn "The +app variant causes some extra code to be compiled that is
distributed under the Rice University Software Distribution License. For
details, please read:
http://ompl.kavrakilab.org/license.html#ricelicense"
    }
    depends_build-append port:pkgconfig
    depends_lib-append  port:assimp port:fcl
    configure.args-append -DOMPLAPP_PQP=OFF -DOMPLAPP_RESOURCE_DIR=${prefix}/share/ompl/resources
    checksums           md5     c4cd3527630156f284b06d4a33690601 \
                        sha1    6b43ac91d1c2881be48eea4e22f90b3f4677cfd7 \
                        rmd160  d834e4322c04ae587c1101fc868336483095067e
}

set pythons_suffixes {26 27 31 32 33 34}

set pythons_ports {}
foreach s ${pythons_suffixes} {
    lappend pythons_ports python${s}
}

proc python_dir {} {
    global pythons_suffixes
    foreach s ${pythons_suffixes} {
        if {[variant_isset python${s}]} {
            set p python[string index ${s} 0].[string index ${s} 1]
            return [file normalize [exec ${p} -c "import sys; print(sys.prefix)"]/lib/${p}/site-packages]
        }
    }
    error "Python support not enabled."
}

foreach s ${pythons_suffixes} {
    set p python${s}
    set v [string index ${s} 0].[string index ${s} 1]
    set i [lsearch -exact ${pythons_ports} ${p}]
    set c [lreplace ${pythons_ports} ${i} ${i}]
    eval [subst {
        variant ${p} description "Use Python ${v} for python bindings" conflicts ${c} debug {
            depends_build-append    port:py${s}-pyplusplus-devel
            depends_lib-append      port:${p}
            configure.args-append   -DPYTHON_EXEC=${prefix}/bin/python${v}

            # the python bindings rely on Boost.Python, so make sure it is installed.
            require_active_variants boost ${p}

            if { [variant_isset app] } {
                # Can use either py*-pyqt4 or py*-pyqt4-devel.
                depends_lib-append \
                    path:share/py${s}-sip/PyQt4:py${s}-pyqt4 \
                    port:py${s}-opengl
                post-destroot {
                    reinplace "s|#!/usr/bin/env python|#!${prefix}/bin/python${v}|g" \
                        ${destroot}${prefix}/bin/ompl_app
                    # extra copy of libs not needed in site_packages and causes problems with rpaths
                    set site_packages \[python_dir\]
                    delete ${destroot}\${site_packages}/ompl/util/libompl.dylib \
                           ${destroot}\${site_packages}/ompl/app/libompl_app.dylib
                }
            } else {
                post-destroot {
                    # extra copy of libs not needed in site_packages and causes problems with rpaths
                    set site_packages \[python_dir\]
                    delete ${destroot}\${site_packages}/ompl/util/libompl.dylib
                }
            }
        }
    }]
}

# enable one python variant so that the python bindings can be compiled
set selected_python python27
foreach s ${pythons_suffixes} {
    if {[variant_isset python${s}]} {
        set selected_python python${s}
    }
}
default_variants +${selected_python}

livecheck.type  regex
livecheck.url   http://ompl.kavrakilab.org/download.html
livecheck.regex (\[0-9.\]+), released
