# -*- 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                 2
# Needed for change to meta-versioning
epoch                   1
name                    py-clang
python.versions         27 34 35 36 37
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           https://llvm.org/
    use_xz                  yes

    checksums \
     cfe-3.7.1.src.tar.xz \
      rmd160  185b0f75970bc50682766a21794440578db87b5d \
      sha256  56e2164c7c2a1772d5ed2a3e57485ff73ff06c97dff12edbeea1acc4412b0674 \
     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.2.src.tar.xz \
      rmd160  e4aa04b8aaa39d7c222d33b0e95b8d06c423d229 \
      sha256  fa9ce9724abdb68f166deea0af1f71ca0dfa9af8f7e1261f2cae63c280282800 \
     cfe-6.0.1.src.tar.xz \
      rmd160  c280cd2037b19f9bd733944b765f9ca23b35e0a4 \
      sha256  7c243f1485bddfdfedada3cd402ff4792ea82362ff91fbdac2dae67c6026b667 \
     cfe-7.0.1.src.tar.xz \
      rmd160  914adafed7c97e5ebab15a437670906c404cb8bd \
      sha256  a45b62dde5d7d5fdcdfa876b0af92f164d434b06e9e89b5d0b1cbc65dfe3f418 \
     cfe-8.0.0.src.tar.xz \
      rmd160  bd4dd523edcde136156b773cc66bfad1fc52dbc4 \
      sha256  084c115aab0084e63b23eee8c233abb6739c399e29966eaeccfc6e088e0b736b \

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

    set clanglist       {37    39    40    50    60    70    80}
    set clangvlist      {3.7.1 3.9.1 4.0.1 5.0.2 6.0.1 7.0.1 8.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        https://releases.llvm.org/${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 clang39] && 
        ![variant_isset clang40] && 
        ![variant_isset clang50] && 
        ![variant_isset clang60] && 
        ![variant_isset clang70] && 
        ![variant_isset clang80]} {
        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 clang39] && 
            ![variant_isset clang40] && 
            ![variant_isset clang50] && 
            ![variant_isset clang60] && 
            ![variant_isset clang70] && 
            ![variant_isset clang80]} {
            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)().
    }
}