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

name                py-sip4
categories-append   devel
maintainers         {michaelld @michaelld} openmaintainer
license             {GPL-2 GPL-3 PSF}
platforms           macosx

description         create Python bindings for C and C++ libraries
long_description \
    SIP is a tool that makes it very easy to create \
    Python bindings for C and C++ libraries. \
    It was originally developed to create PyQt, \
    the Python bindings for the Qt toolkit, \
    but can be used to create bindings for any \
    C or C++ library.

homepage            https://www.riverbankcomputing.com/software/sip/intro

version             4.19.25

# from siplib/sip.h[.in]:
#
# Define the current API version number.  SIP must handle modules with
# the same major number and with the same or earlier minor number.
# Whenever data structure elements are added they must be appended and
# the minor number incremented.  Whenever data structure elements are
# removed or the order changed then the major number must be
# incremented and the minor number set to 0.
#
# SIP 4.19.[19-25] provides SIP API 12.7
# SIP 4.19.[14-18] provides SIP API 12.6
# SIP 4.19.[12-13] provides SIP API 12.5
# SIP 4.19.[9-11] do not work with MacPorts
# -> see the "epoch" note above for more info
# SIP 4.19.8 provides SIP API 12.4
# SIP 4.19.[4-7] provides SIP API 12.3
# SIP 4.19.3 provides SIP API 12.2
# SIP 4.19.[1-2] provides SIP API 12.1
# SIP 4.19.0 provides SIP API 12.0
# SIP 4.18.[0-1] provides SIP API 11.3
# SIP 4.17.0 provides SIP API 11.2
# SIP 4.16.[8-9] provides SIP API 11.2
#  -> BUT: the change is to the private API, not the public one.
#  -> SO: no rev-bumps are be needed.
# SIP 4.16.[1-7] provides SIP API 11.1.
# SIP 4.15.5 provided SIP API 11.0.

python.versions     27 35 36 37 310

if {${name} ne ${subport}} {
    master_sites        https://www.riverbankcomputing.com/static/Downloads/sip/${version}

    set branch          [join [lrange [split ${version} .] 0 1] .]
    set patch           [lindex [split ${version} .] 2]

    if {${patch} == 0} {
        distname        sip-${branch}
    } else {
        distname        sip-${version}
    }

    checksums           rmd160 9709eda79d7e0a73eca82e25cbbfd0af6da074c8 \
                        sha256 b39d93e937647807bac23579edbff25fe46d16213f708370072574ab1f1b4211 \
                        size   1056384
    revision            2

    patchfiles          patch-siputils.py.diff \
                        patch-specs_macx-g++.diff \
                        patch-configure.py.diff \
                        patch-add_ppc64.diff

    # https://trac.macports.org/ticket/68643
    python.pep517       no

    use_configure       yes

    pre-configure {
        # Ensure correct compilers are used
        reinplace "s|@CC@|${configure.cc}|" \
            ${worksrcpath}/specs/macx-g++
        reinplace "s|@CXX@|${configure.cxx}|" \
            ${worksrcpath}/specs/macx-g++
    }

    configure.cmd       ${python.bin} configure.py
    configure.pre_args  -b ${python.prefix}/bin \
                        -d ${python.pkgd} \
                        -e ${python.include} \
                        -v ${python.prefix}/share/sip \
                        -p macx-g++ \
                        --no-dist-info

    # always add some arch flags, since the user might have overridden
    # the default arch build (e.g., ticket #44086).
    python.add_archflags    no
    if {${universal_possible} && [variant_isset universal]} {

        foreach arch ${configure.universal_archs} {
            configure.args-append   "--arch=${arch}"
        }
        configure.universal_args
        configure.post_args LFLAGS="-F${frameworks_dir} -L${prefix}/lib \
                                    ${configure.universal_ldflags}"
        configure.post_args-append  CFLAGS="${configure.universal_cflags}"
        configure.post_args-append  CXXFLAGS="${configure.universal_cxxflags}"

    } else {

        configure.args-append       "--arch=${configure.build_arch}"
        configure.post_args LFLAGS="-F${frameworks_dir} -L${prefix}/lib \
                                    ${configure.ld_archflags}"
        configure.post_args-append  CFLAGS="${configure.cc_archflags}"
        configure.post_args-append  CXXFLAGS="${configure.cxx_archflags}"

    }

    if {${configure.sdkroot} eq ""} {
        set configure.sdkroot "/"
    }

    configure.args-append --sdk=${configure.sdkroot}

    build.cmd           make
    build.target        all

    test.run            yes
    python.test_framework
    test.cmd            cd siplib && ${python.bin} -c 'import sip'

    destroot.cmd        make
    destroot.destdir    DESTDIR=${destroot}

    post-destroot {
        xinstall -m 755 -d ${destroot}${prefix}/share/doc
        file copy ${worksrcpath}/doc ${destroot}${prefix}/share/doc/${subport}
        xinstall -m 644 -W ${worksrcpath} LICENSE LICENSE-GPL2 LICENSE-GPL3 NEWS README \
            ${destroot}${prefix}/share/doc/${subport}
        system "${python.bin} ${python.libdir}/compileall.py ${destroot}${prefix}"
        system "${python.bin} -O ${python.libdir}/compileall.py ${destroot}${prefix}"
    }

    notes "${subport} is available under a PSF license with one addition: \n
    4. Licensee may not use SIP to generate Python bindings for any C or
       C++ library for which bindings are already provided by Riverbank. \n
GPL-2 or GPL-3 licenses are also available. For details see
${prefix}/share/doc/${subport}/LICENSE \[-GPL2 -GPL3\]\n\n"

    livecheck.type   none

    # deactivate hack to have a smooth transition from the original py-pip
    # (providing version 4.x) to the legacy py-pip4 port
    pre-activate {
        if {![catch {set installed [lindex [registry_active py${python.version}-sip] 0]}]} {
            set _version [lindex $installed 1]
            if {[vercmp $_version ${version}] >= 0} {
                registry_deactivate_composite py${python.version}-sip "" [list ports_nodepcheck 1]
                }
            }
        }
    } else {
    livecheck.type   regex
    livecheck.url    https://www.riverbankcomputing.com/software/sip/download
    livecheck.regex  sip-(4(\\.\\d+)+)${extract.suffix}
}
