# -*- 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 41.0.5
name                py-${github.project}
revision            0
categories-append   devel
license             BSD

python.versions     27 36 37 38 39 310 311 312
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  cab5815616789fa61d97fb6765fd42704bebdb20 \
                    sha256  2ce803648ad47efeb1531eed6e026bd518f004aace1b21c1e16fce958a9a7e7b \
                    size    35947970

# 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-xdist \
                    port:py${python.version}-pretend

        # 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 \
                    asn1 0.15.2 28c19b9324de5b815b6487e0f8098312791b09de0dbf3d5c2db1fe2d95bab973 \
                    asn1_derive 0.15.2 a045c3ccad89f244a86bd1e6cf1a7bf645296e7692698b056399b6efd4639407 \
                    autocfg 1.1.0 d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa \
                    base64 0.13.1 9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8 \
                    bitflags 1.3.2 bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a \
                    cc 1.0.79 50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f \
                    cfg-if 1.0.0 baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd \
                    foreign-types 0.3.2 f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1 \
                    foreign-types-shared 0.1.1 00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b \
                    indoc 1.0.9 bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306 \
                    libc 0.2.144 2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1 \
                    lock_api 0.4.9 435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df \
                    memoffset 0.8.0 d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1 \
                    once_cell 1.17.2 9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b \
                    openssl 0.10.54 69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019 \
                    openssl-macros 0.1.1 a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c \
                    openssl-sys 0.9.88 c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617 \
                    ouroboros 0.15.6 e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db \
                    ouroboros_macro 0.15.6 5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7 \
                    parking_lot 0.12.1 3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f \
                    parking_lot_core 0.9.7 9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521 \
                    pem 1.1.1 a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8 \
                    pkg-config 0.3.27 26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964 \
                    proc-macro-error 1.0.4 da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c \
                    proc-macro-error-attr 1.0.4 a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869 \
                    proc-macro2 1.0.64 78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da \
                    pyo3 0.18.3 e3b1ac5b3731ba34fdaa9785f8d74d17448cd18f30cf19e0c7e7b1fdb5272109 \
                    pyo3-build-config 0.18.3 9cb946f5ac61bb61a5014924910d936ebd2b23b705f7a4a3c40b05c720b079a3 \
                    pyo3-ffi 0.18.3 fd4d7c5337821916ea2a1d21d1092e8443cf34879e53a0ac653fbb98f44ff65c \
                    pyo3-macros 0.18.3 a9d39c55dab3fc5a4b25bbd1ac10a2da452c4aca13bb450f22818a002e29648d \
                    pyo3-macros-backend 0.18.3 97daff08a4c48320587b5224cc98d609e3c27b6d437315bd40b605c98eeb5918 \
                    quote 1.0.28 1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488 \
                    redox_syscall 0.2.16 fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a \
                    scopeguard 1.1.0 d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd \
                    smallvec 1.10.0 a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0 \
                    syn 1.0.109 72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237 \
                    syn 2.0.18 32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e \
                    target-lexicon 0.12.7 fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5 \
                    unicode-ident 1.0.9 b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0 \
                    unindent 0.1.11 e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c \
                    vcpkg 0.2.15 accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426 \
                    version_check 0.9.4 49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f \
                    windows-sys 0.45.0 75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0 \
                    windows-targets 0.42.2 8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071 \
                    windows_aarch64_gnullvm 0.42.2 597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8 \
                    windows_aarch64_msvc 0.42.2 e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43 \
                    windows_i686_gnu 0.42.2 c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f \
                    windows_i686_msvc 0.42.2 44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060 \
                    windows_x86_64_gnu 0.42.2 8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36 \
                    windows_x86_64_gnullvm 0.42.2 26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3 \
                    windows_x86_64_msvc 0.42.2 9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0

        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
        platforms       "darwin any >= ${cryptography_darwin_min_ver}"

        build.dir   ${worksrcpath}/vectors

        livecheck.type  none
    }
}
