# -*- 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
# $Id$

PortSystem              1.0
PortGroup               cmake 1.0
PortGroup               muniversal 1.0
PortGroup               compiler_blacklist_versions 1.0
PortGroup               github 1.0

name                    libomp
maintainers             eborisch openmaintainer
homepage                http://openmp.llvm.org
description             The OpenMP subproject of LLVM
long_description        ${description} is intended to contain all of the\
                        components required to build an executing OpenMP\
                        program that are outside the compiler itself. \
                        This port works with MacPorts' clang-3.7+ (optionally \
                        with +openmp variant for clang-3.7.)

categories              lang
platforms               darwin
supported_archs         i386 x86_64
license                 {MIT NCSA}

subport                 libomp-devel {}

if {${subport} ne ${name}} {
    conflicts               libomp
    github.setup            llvm-mirror openmp 88b2b1c
    worksrcdir              openmp-${version}/runtime
    version                 283577 
    revision                1
    name                    ${subport}
    checksums \
        rmd160  18f048f0a620646d24bb75000cce97c41e3003be \
        sha256  7ecb37997e32a39fbeb5a98719f532db0c9a5969ba8c7aca040545c64fb60128

    livecheck.url \
        http://llvm.org/viewvc/llvm-project/openmp/trunk/?view=log
    livecheck.version       ${version}
    livecheck.regex         revision=(\[0-9\]+)
} else {
    conflicts               libomp-devel
    if {${os.platform} eq "darwin" && ${os.major} > 12} {
        github.setup            llvm-mirror openmp 390 svn-tags/RELEASE_
        worksrcdir              openmp-${version}/rc1/runtime
        version                 3.9.0
        revision                1
        checksums \
            rmd160  d161143863e9440dac76da8e2b1a424e2f042026 \
            sha256  dbd72561753cfab8a39590bc3c30974d3e8a6d8e358fc90b1e0f2f87a80b1e98
    } else {
        github.setup            llvm-mirror openmp 381 svn-tags/RELEASE_
        worksrcdir              openmp-${version}/rc1/runtime
        version                 3.8.1
        revision                2
        checksums \
            rmd160  a41054068a127ef84610afef8090109078cb6c46 \
            sha256  4c46b5946fe9b2a701661746d11c7c85c51a7f18673194a7ebd2a43470948a34
    }
    # Moved to epoch 1 for svn # -> version # change.
    epoch                   1
    name                    libomp
    livecheck.url           https://github.com/llvm-mirror/openmp/branches
    livecheck.regex         svn-tags/RELEASE_(\[0-9\]+)
}

cmake.out_of_source     yes

# According to documentation builds with clang >= 3.3
compiler.blacklist-append {clang < 500} *gcc*

default_variants        +universal

# Do actual install into ${prefix}/(install|lib)/libomp
# A little unorthodox, but to have clang automatically find the includes and
# lib, with -fopenmp, it is nice to have them their own directories. Not
# exactly a config cmake supports directly; install into dummy location and
# move post-install
configure.pre_args      -DCMAKE_INSTALL_PREFIX=${prefix}/tmp

configure.args-delete   -DCMAKE_INSTALL_RPATH=${prefix}/lib \
                        -DCMAKE_INSTALL_NAME_DIR=${prefix}/lib \

# With this, cmake sets the correct library name in the dylibs for the
# final destination we move them to
configure.args-append   -DCMAKE_INSTALL_RPATH=${prefix}/lib/libomp \
                        -DCMAKE_INSTALL_NAME_DIR=${prefix}/lib/libomp \

variant top_level description \
    "Install (links to) omp.h and libs into ${prefix}/(include|lib)" {}

post-extract {
    # Patch tool for build with CMAKE_INSTALL_PREFIX
    reinplace "/bulk.*compatibility/s/s\+/s+.*/" \
        tools/check-depends.pl
}

post-destroot {
    set instdest ${destroot}${prefix}
    xinstall -d ${instdest}/share/doc/libomp
    file copy ${worksrcpath}/README.txt ${worksrcpath}/../LICENSE.txt \
        ${worksrcpath}/../www ${instdest}/share/doc/libomp/
    xinstall -d ${instdest}/include/libomp
    move ${instdest}/tmp/include/omp.h ${instdest}/include/libomp/
    xinstall -d ${instdest}/lib/libomp
    foreach p {libiomp5.dylib libomp.dylib libgomp.dylib} {
        move ${instdest}/tmp/lib/${p} ${instdest}/lib/libomp/
    }
    if [variant_isset top_level] {
        system -W ${instdest}/include \
          "ln -s libomp/omp.h"
        foreach p {libiomp5.dylib libomp.dylib libgomp.dylib} {
            system -W ${instdest}/lib/ \
              "ln -s libomp/${p}"
        }
    }
}

notes "
  Use with clang-3.7 and up by adding \"-fopenmp\" during compilation / linking.
   * For clang-3.7 without +openmp variant, use:
     \"-I${prefix}/include/libomp -L${prefix}/lib/libomp -fopenmp\"
"

test.run                yes
test.target             libomp-micro-tests