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

PortSystem              1.0
PortGroup               python 1.0
# meta-version; bump whenever underlying clangs are updated. Needed to support
# portindex (variants can't have different versions.)
version                 0
# Needed for change to meta-versioning
epoch                   1
name                    py-clang
python.versions         27 34 35 36
python.default_version  27
platforms               darwin
license                 NCSA
maintainers             {eborisch @eborisch} \
                        openmaintainer
description             Python bindings for clang
long_description        ${description}
homepage \
    https://github.com/llvm-mirror/clang/tree/master/bindings/python

supported_archs         noarch

if {${name} ne ${subport}} {
    # Share llvm's downloads
    dist_subdir             llvm
    livecheck.url           http://llvm.org/
    use_xz                  yes

    checksums \
     cfe-3.7.1.src.tar.xz \
      rmd160  185b0f75970bc50682766a21794440578db87b5d \
      sha256  56e2164c7c2a1772d5ed2a3e57485ff73ff06c97dff12edbeea1acc4412b0674 \
     cfe-3.8.1.src.tar.xz \
      rmd160  a280504a3ba3aa59274120305f68fc8f8b3aca9c \
      sha256  4cd3836dfb4b88b597e075341cae86d61c63ce3963e45c7fe6a8bf59bb382cdf \
     cfe-3.9.1.src.tar.xz \
      rmd160  51930c2d55eacd44df28b49a84565771c94f418e \
      sha256  e6c4cebb96dee827fa0470af313dff265af391cb6da8d429842ef208c8f25e63 \
     cfe-4.0.1.src.tar.xz \
      rmd160  4f30f077c6c39489720ec43a748d04dab0fbff79 \
      sha256  61738a735852c23c3bdbe52d035488cdb2083013f384d67c1ba36fabebd8769b \
     cfe-5.0.1.src.tar.xz \
      rmd160  205adf6bdc9252b7b891157904befa28f40c9e9a \
      sha256  135f6c9b0cd2da1aff2250e065946258eb699777888df39ca5a5b4fe5e23d0ff \
     cfe-6.0.0.src.tar.xz \
      rmd160  5e9383a4608d42781fa47fa3cdefc1f7adfebd98 \
      sha256  e07d6dd8d9ef196cfc8e8bb131cbd6a2ed0b1caf1715f9d05b0f0eeaddb6df32 \

    depends_build-append    port:py${python.version}-setuptools

    set clanglist       {37    38    39    40    50    60}
    set clangvlist      {3.7.1 3.8.1 3.9.1 4.0.1 5.0.1 6.0.0}

    foreach cvnum $clanglist {
        # Explictly use (and depend on) the libclang we select during install
        set cvidx [lsearch $clanglist $cvnum]
        set clang_version [lindex $clangvlist $cvidx]
        set cflist {}
        foreach v [lreplace $clanglist $cvidx $cvidx] {lappend cflist clang$v}
        set cvstr [string index $cvnum 0].[string index $cvnum 1]
        set substr \
          "library_path = '${prefix}/libexec/llvm-${cvstr}/lib'"
        variant clang${cvnum} description {
               Use clang${cvnum}'s libclang
        } conflicts {*}${cflist} "
            master_sites        http://llvm.org/releases/${clang_version}
            depends_lib-append  port:clang-${cvstr}
            distfiles           cfe-${clang_version}.src.tar.xz
            worksrcdir          cfe-${clang_version}.src/bindings/python
            post-patch {reinplace {s^library_path = None^$substr^} \
                                  clang/cindex.py}
            livecheck.version   ${clang_version}
            # Yes, I didn't bother escaping the '.'s
            livecheck.regex \
                \" ([string range $clang_version 0 2].\\\[0-9\\\]+): \"
        "
    }

    if {![variant_isset clang37] && 
        ![variant_isset clang38] && 
        ![variant_isset clang39] && 
        ![variant_isset clang40] && 
        ![variant_isset clang50] && 
        ![variant_isset clang60]} {
        default_variants +clang50
    }

    pre-extract {
        # Will never hit this when installing from packages, which is OK, as
        # they will have the default variant set above.
        if {![variant_isset clang37] && 
            ![variant_isset clang38] && 
            ![variant_isset clang39] && 
            ![variant_isset clang40] && 
            ![variant_isset clang50] && 
            ![variant_isset clang60]} {
            ui_error "At least one of the clangNN variants must be active."
            return -code error "Unsupported (no) variants selected."
        }
    }
    
    post-extract {
        file copy ${filespath}/setup.py ${worksrcpath}/
    }

    post-destroot {
        set DOCDIR ${destroot}${prefix}/share/doc/${subport}
        xinstall -d ${DOCDIR}
        file copy ${worksrcpath}/README.txt ${DOCDIR}
    }

    notes {
        The path to the selected libclang variant has been recorded in the\
        installed package. It can be overridden with:\
        cindex.set_library_(path|file)().
    }
}