# -*- 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           github 1.0
PortGroup           python 1.0

github.setup        pyca cryptography 38.0.3
name                py-${github.project}
revision            0
categories-append   devel
platforms           darwin
license             BSD

python.versions     27 36 37 38 39 310
python.pep517       yes

maintainers         {stromnov @stromnov} openmaintainer

description         cryptography is a package designed to expose \
                    cryptographic primitives and recipes to Python developers.

long_description    {*}${description}

checksums           ${distname}${extract.suffix} \
                    rmd160  54a360f30102c0eeff95592a754f020aae9da2a4 \
                    sha256  d07247b0f24f6a70002d7ea0268cd5a72910ffc8c7e60ad6712b3c861a06961f \
                    size    35900586

# See:
# * https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst
# * https://ports.macports.org/port/rust/summary
set cryptography_darwin_min_ver 13

if {${name} ne ${subport}
    && [string match "py*-${github.project}" ${subport}]} {
    depends_build-append \
                    port:py${python.version}-setuptools

    depends_lib-append \
                    port:py${python.version}-cffi

    # legacy support
    if {${python.version} eq 27
        || ${os.platform} eq "darwin" && ${os.major} < ${cryptography_darwin_min_ver}} {
        PortGroup       openssl 1.0
        github.setup    pyca cryptography 3.3.2
        revision        0

        python.pep517   no

        # Build fails with OpenSSL 3; use 1.1 for now
        openssl.branch  1.1

        description     Legacy support of Python cryptography.

        long_description    {*}${description}

        checksums       rmd160  13380349b4a5559153c1e8a328fd4629b81e134d \
                        sha256  2c8af64316fa1c09162c6e99dba9c23c76a07c3466dbbf62db8df970b45f935f \
                        size    35729139

        if {${os.platform} eq "darwin" && ${os.major} < 11} {
            # https://trac.macports.org/ticket/54519
            patchfiles-append   patch-src__cffi_src_build_openssl.py.diff
        }

        compiler.cpath-prepend \
                        [openssl::include_dir]

        depends_lib-append \
                        port:py${python.version}-six

        if {${python.version} eq 27} {
            depends_lib-append \
                        port:py${python.version}-enum34 \
                        port:py${python.version}-ipaddress
        }
    } elseif {${python.version} eq 36} {
        PortGroup       rust 1.0

        github.setup    pyca cryptography 36.0.2
        revision        0

        python.pep517   no

        openssl.branch  1.1

        checksums   ${distname}${extract.suffix} \
                    rmd160  6513816850a696909886ebab1e562b1150d7ef5f \
                    sha256  db5b8ad6b9d3cd099e543dc70826946e61282d920126c43bc4534dea174df537 \
                    size    35821161

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

        cargo.crates \
                    Inflector 0.11.4 fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3 \
                    aliasable 0.1.3 250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd \
                    asn1 0.8.7 cfffb35195feaeffb071af0f7a643405667813dd8629c27cb0c310fb76654ab1 \
                    asn1_derive 0.8.7 bc894fa05f786b6481065514e6ff5e1838a3362f543f71f6e1a92ff27b051c25 \
                    autocfg 1.0.1 cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a \
                    base64 0.13.0 904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd \
                    bitflags 1.3.2 bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a \
                    cfg-if 1.0.0 baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd \
                    chrono 0.4.19 670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73 \
                    indoc 0.3.6 47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8 \
                    indoc-impl 0.3.6 ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0 \
                    instant 0.1.12 7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c \
                    lazy_static 1.4.0 e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646 \
                    libc 0.2.107 fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219 \
                    lock_api 0.4.5 712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109 \
                    num-integer 0.1.44 d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db \
                    num-traits 0.2.14 9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290 \
                    once_cell 1.8.0 692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56 \
                    ouroboros 0.13.0 f357ef82d1b4db66fbed0b8d542cbd3c22d0bf5b393b3c257b9ba4568e70c9c3 \
                    ouroboros_macro 0.13.0 44a0b52c2cbaef7dffa5fec1a43274afe8bd2a644fa9fc50a9ef4ff0269b1257 \
                    parking_lot 0.11.2 7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99 \
                    parking_lot_core 0.8.5 d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216 \
                    paste 0.1.18 45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880 \
                    paste-impl 0.1.18 d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6 \
                    pem 1.0.1 06673860db84d02a63942fa69cd9543f2624a5df3aea7f33173048fa7ad5cf1a \
                    proc-macro-error 1.0.4 da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c \
                    proc-macro-error-attr 1.0.4 a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869 \
                    proc-macro-hack 0.5.19 dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5 \
                    proc-macro2 1.0.32 ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43 \
                    pyo3 0.15.1 7cf01dbf1c05af0a14c7779ed6f3aa9deac9c3419606ac9de537a2d649005720 \
                    pyo3-build-config 0.15.1 dbf9e4d128bfbddc898ad3409900080d8d5095c379632fbbfbb9c8cfb1fb852b \
                    pyo3-macros 0.15.1 67701eb32b1f9a9722b4bc54b548ff9d7ebfded011c12daece7b9063be1fd755 \
                    pyo3-macros-backend 0.15.1 f44f09e825ee49a105f2c7b23ebee50886a9aee0746f4dd5a704138a64b0218a \
                    quote 1.0.10 38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05 \
                    redox_syscall 0.2.10 8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff \
                    regex 1.5.4 d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461 \
                    regex-syntax 0.6.25 f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b \
                    scopeguard 1.1.0 d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd \
                    smallvec 1.7.0 1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309 \
                    stable_deref_trait 1.2.0 a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3 \
                    syn 1.0.81 f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966 \
                    unicode-xid 0.2.2 8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3 \
                    unindent 0.1.7 f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7 \
                    version_check 0.9.3 5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe \
                    winapi 0.3.9 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419 \
                    winapi-i686-pc-windows-gnu 0.4.0 ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 \
                    winapi-x86_64-pc-windows-gnu 0.4.0 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
    } else {
        PortGroup   rust 1.0

        # Needs to use the same openssl version as python itself was built with...
        # https://trac.macports.org/ticket/63968
        if { ${python.version} < 38 } {
            openssl.branch  1.1
        } else {
            openssl.branch  3
        }

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

        depends_test-append \
                    port:py${python.version}-cryptography_vectors \
                    port:py${python.version}-pytest \
                    port:py${python.version}-pytest-benchmark \
                    port:py${python.version}-pytest-cov \
                    port:py${python.version}-pytest-subtests \
                    port:py${python.version}-pytest-xdist \
                    port:py${python.version}-pretend \
                    port:py${python.version}-iso8601 \
                    port:py${python.version}-tz \
                    port:py${python.version}-hypothesis

        # cd ${worksrcpath}/src/rust
        # sudo cargo update
        # egrep -e '^(name|version|checksum) = ' Cargo.lock | perl -pe 's/^(?:name|version|checksum) = "(.+)"/$1/' | tr '\n' ' ' | perl -pe 's|([0-9a-f]{64})|\1 \\\n|g' | pbcopy
        cargo.crates \
                    Inflector 0.11.4 fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3 \
                    aliasable 0.1.3 250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd \
                    android_system_properties 0.1.5 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311 \
                    asn1 0.12.2 22c27c85cd71c1bf4373c7c1aa752b73d2df799277c0930af16fffbf3444f210 \
                    asn1_derive 0.12.2 d48d1854a01241e8d22f8f5ae4e2dc332f66c5946e1772f5576886d83e18e1b7 \
                    autocfg 1.1.0 d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa \
                    base64 0.13.0 904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd \
                    bitflags 1.3.2 bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a \
                    bumpalo 3.10.0 37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3 \
                    cfg-if 1.0.0 baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd \
                    chrono 0.4.22 bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1 \
                    core-foundation-sys 0.8.3 5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc \
                    iana-time-zone 0.1.47 4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7 \
                    indoc 0.3.6 47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8 \
                    indoc-impl 0.3.6 ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0 \
                    instant 0.1.12 7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c \
                    js-sys 0.3.59 258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2 \
                    libc 0.2.132 8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5 \
                    lock_api 0.4.8 9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390 \
                    log 0.4.17 abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e \
                    num-integer 0.1.45 225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9 \
                    num-traits 0.2.15 578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd \
                    once_cell 1.14.0 2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0 \
                    ouroboros 0.15.4 7f56a2b0aa5fc88687aaf63e85a7974422790ce3419a2e1a15870f8a55227822 \
                    ouroboros_macro 0.15.4 6c40641e27d0eb38cae3dee081d920104d2db47a8e853c1a592ef68d33f5ebf4 \
                    parking_lot 0.11.2 7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99 \
                    parking_lot_core 0.8.5 d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216 \
                    paste 0.1.18 45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880 \
                    paste-impl 0.1.18 d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6 \
                    pem 1.1.0 03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4 \
                    proc-macro-error 1.0.4 da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c \
                    proc-macro-error-attr 1.0.4 a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869 \
                    proc-macro-hack 0.5.19 dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5 \
                    proc-macro2 1.0.43 0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab \
                    pyo3 0.15.2 d41d50a7271e08c7c8a54cd24af5d62f73ee3a6f6a314215281ebdec421d5752 \
                    pyo3-build-config 0.15.2 779239fc40b8e18bc8416d3a37d280ca9b9fb04bda54b98037bb6748595c2410 \
                    pyo3-macros 0.15.2 00b247e8c664be87998d8628e86f282c25066165f1f8dda66100c48202fdb93a \
                    pyo3-macros-backend 0.15.2 5a8c2812c412e00e641d99eeb79dd478317d981d938aa60325dfa7157b607095 \
                    quote 1.0.21 bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179 \
                    redox_syscall 0.2.16 fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a \
                    scopeguard 1.1.0 d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd \
                    smallvec 1.9.0 2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1 \
                    syn 1.0.99 58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13 \
                    unicode-ident 1.0.3 c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf \
                    unindent 0.1.10 58ee9362deb4a96cef4d437d1ad49cffc9b9e92d202b6995674e928ce684f112 \
                    version_check 0.9.4 49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f \
                    wasm-bindgen 0.2.82 fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d \
                    wasm-bindgen-backend 0.2.82 662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f \
                    wasm-bindgen-macro 0.2.82 b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602 \
                    wasm-bindgen-macro-support 0.2.82 5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da \
                    wasm-bindgen-shared 0.2.82 6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a \
                    winapi 0.3.9 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419 \
                    winapi-i686-pc-windows-gnu 0.4.0 ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 \
                    winapi-x86_64-pc-windows-gnu 0.4.0 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f

        pre-test {
            test.env-append \
                    PYTHONPATH=[glob -nocomplain ${worksrcpath}/build/lib*]
        }

        test.run    yes
        test.cmd    py.test-${python.branch}
        test.target tests
    }

    livecheck.type  none
}

# package cryptography_vectors
regsub 27 ${python.versions} "" python_versions_no27
foreach python_version ${python_versions_no27} {
    subport py${python_version}-cryptography_vectors {
        supported_archs noarch

        depends_build-append \
                    port:py${python_version}-setuptools

        if {${os.platform} eq "darwin" && ${os.major} < ${cryptography_darwin_min_ver}} {
            known_fail yes
            pre-fetch {
                ui_error "${subport} requires macOS 10.[expr ${cryptography_darwin_min_ver} - 4] or later"
                return -code error "unsupported macOS version"
            }
        }

        build.dir   ${worksrcpath}/vectors

        livecheck.type  none
    }
}
