# -*- 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               openssl 1.0
PortGroup               php 1.1

# Disable by default adding openssl support.
# Specific sub-ports below enable as required.
openssl.branch          no_version

name                    php
categories              lang php
platforms               darwin freebsd
maintainers             {mathiesen.info:macintosh @BjarneDMat} {ryandesign @ryandesign}
license                 PHP-3.01
master_sites            https://www.php.net/distributions/
livecheck.type          none
description             PHP: Hypertext Preprocessor
long_description        PHP is a widely-used general-purpose scripting \
                        language that is especially suited for developing \
                        web sites, but can also be used for command-line \
                        scripting.

# The list of PHP branches this port provides.
php.branches            5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5 8.6

# Fix for users specifying the subport name with the wrong case.
set subport             [string tolower ${subport}]

# Get rootname from subport.
regexp {^php\d+-(.+)$} ${subport} -> php.rootname

# Returns true if the subport is a SAPI, false otherwise (extension, stub port).
proc is_sapi_subport {} {
    global name subport php.rootname
    if {${name} eq ${subport}} {
        return no
    }
    if {[regexp {^php\d+$} ${subport}]} {
        return yes
    }
    return [expr {-1 != [lsearch -exact [list apache2handler cgi fpm] ${php.rootname}]}]
}

# Returns true if the subport is an extension, false otherwise (SAPI, stub port).
proc is_extension_subport {} {
    global name subport
    if {${name} eq ${subport}} {
        return no
    }
    return [expr {![is_sapi_subport]}]
}

if {![is_extension_subport]} {
    categories          lang www
    homepage            https://www.php.net
}

set subport_branch      [php.branch_from_subport]

# Remember to increment revision of ${php}-eaccelerator when updating version of ${php}.
switch ${subport_branch} {
    5.2 {
        version         5.2.17
        master_sites    https://museum.php.net/php5/
        use_bzip2       yes
        set suhosin_available       yes
        set suhosin_patch_version   5.2.16-0.9.7
        set suhosin_patch           suhosin-patch-${suhosin_patch_version}.patch.gz
        checksums       ${distname}${extract.suffix} \
                        md5     b27947f3045220faf16e4d9158cbfe13 \
                        rmd160  567fa8d718b93fb83a89494c83a8bec224ac99e9 \
                        sha256  e81beb13ec242ab700e56f366e9da52fd6cf18961d155b23304ca870e53f116c \
                        size    9092312 \
                        ${suhosin_patch} \
                        rmd160  b28b70faf136b3e04c5b483da0f4c2279378f43a \
                        sha256  aae115a318d80b3f32cedf876e7a8e4b932febb1b0c743c0b398003ebe122f91 \
                        size    23069
    }
    5.3 {
        version         5.3.29
        use_bzip2       yes
        set suhosin_available       yes
        set suhosin_patch_version   5.3.9-0.9.10
        set suhosin_patch           suhosin-patch-${suhosin_patch_version}.patch.gz
        checksums       ${distname}${extract.suffix} \
                        md5     9469e240cbe6ac865aeaec89b253dd30 \
                        rmd160  e57beb4fdda41bca81b5856161bc97f3c5e3e9da \
                        sha256  c4e1cf6972b2a9c7f2777a18497d83bf713cdbecabb65d3ff62ba441aebb0091 \
                        size    11396771 \
                        ${suhosin_patch} \
                        rmd160  ce43921fd9b183b154713ecda98294f6c68d5f22 \
                        sha256  4438caeab0a10c6c94aee9f7eaa703f5799f97d4e0579f43a947bb7314e38317 \
                        size    40967
    }
    5.4 {
        epoch           1
        version         5.4.45
        use_bzip2       yes
        checksums       rmd160  352a0ea8fb75a447301c1434609ac0e4b96acc0c \
                        sha256  4e0d28b1554c95cfaea6fa2b64aac85433f158ce72bb571bcd5574f98f4c6582 \
                        size    12703324
    }
    5.5 {
        epoch           2
        version         5.5.38
        use_xz          yes
        checksums       rmd160  08d200f9458f37ffd69a2daf30436c5f25fc948f \
                        sha256  cb527c44b48343c8557fe2446464ff1d4695155a95601083e5d1f175df95580f \
                        size    11077780
    }
    5.6 {
        epoch           2
        version         5.6.40
        use_xz          yes
        checksums       rmd160  43b648cf24cdea59765a1d12c247f83f60af283f \
                        sha256  1369a51eee3995d7fbd1c5342e5cc917760e276d561595b6052b21ace2656d1c \
                        size    12472236
    }
    7.0 {
        epoch           2
        version         7.0.33
        use_xz          yes
        checksums       rmd160  621c2459c182de0a071f591eec45e4a3c32d8bdd \
                        sha256  ab8c5be6e32b1f8d032909dedaaaa4bbb1a209e519abb01a52ce3914f9a13d96 \
                        size    12033040
    }
    7.1 {
        epoch           2
        version         7.1.33
        use_xz          yes
        checksums       rmd160  378d66957d3488ce92c74745c4bc799b7b04105a \
                        sha256  bd7c0a9bd5433289ee01fd440af3715309faf583f75832b64fe169c100d52968 \
                        size    12370228
    }
    7.2 {
        epoch           2
        version         7.2.34
        use_xz          yes
        checksums       rmd160  52a993c201241e2dce521bad225f07330505b2cc \
                        sha256  409e11bc6a2c18707dfc44bc61c820ddfd81e17481470f3405ee7822d8379903 \
                        size    12309432
    }
    7.3 {
        epoch           2
        version         7.3.33
        use_xz          yes
        checksums       rmd160  b35e975ea04ab1a86a95d17a4f8048d295ab1475 \
                        sha256  166eaccde933381da9516a2b70ad0f447d7cec4b603d07b9a916032b215b90cc \
                        size    12143820
    }
    7.4 {
        epoch           2
        version         7.4.33
        use_xz          yes
        checksums       rmd160  60d30e6ae3e711d1cdc2623a9ca4354018194299 \
                        sha256  924846abf93bc613815c55dd3f5809377813ac62a9ec4eb3778675b82a27b927 \
                        size    10420144
    }
    8.0 {
        epoch           2
        version         8.0.30
        use_xz          yes
        checksums       rmd160  ef96103dc367a7ffbac94eb239fde4939ee83ddd \
                        sha256  216ab305737a5d392107112d618a755dc5df42058226f1670e9db90e77d777d9 \
                        size    10821076
    }
    8.1 {
        epoch           2
        version         8.1.34
        use_xz          yes
        checksums       rmd160  74139cb0606ee200dd3912284adcb103d7d166dd \
                        sha256  ffa9e0982e82eeaea848f57687b425ed173aa278fe563001310ae2638db5c251 \
                        size    11903896
    }
    8.2 {
        epoch           2
        version         8.2.32
        use_xz          yes
        checksums       rmd160  5926548f71926d4ab37dd21cac9e07b2cdcefa2f \
                        sha256  e02aa173c236c12791696254d607da680e6d5516f8f5c2339642de7c4f944bd2 \
                        size    12162364
    }
    8.3 {
        epoch           2
        version         8.3.32
        use_xz          yes
        checksums       rmd160  83608a2cc2bf333d77b56e669ed6661dfe3cc512 \
                        sha256  8698ec1f9402fa5e5e872ae3d0916b62f5f27503c1fbfc9cc3521e113355ea92 \
                        size    12606844
    }
    8.4 {
        epoch           1
        version         8.4.23
        use_xz          yes
        checksums       rmd160  7b25cac54279dc52ed101714a350318f79bdfa3b \
                        sha256  1ab9f52008414e43bb2427ffa288eff2a4de39e1a830f957e800ba368d887a72 \
                        size    13741236
    }
    8.5 {
        epoch           2
        version         8.5.8
        use_xz          yes
        checksums       rmd160  07c9a6946e95e9b7e3f7f509514f716b1a72d84e \
                        sha256  58910198d19e873048fe87cdfe16bc790025417ede3d1651bfa1c4b533d573f2 \
                        size    14410156
    }
    8.6 {
        # When this becomes a stable version, remove the overrides for homepage,
        # master_sites and livecheck, and update php.latest_stable_branch in the
        # php-1.1 portgroup.
        epoch           0
        version         8.6.0alpha2
        homepage        https://www.php.net/pre-release-builds.php
        master_sites    https://downloads.php.net/~mbeccati/ \
                        https://downloads.php.net/~svpernova09
        use_xz          yes
        checksums       rmd160  bfb428029ee04f6fce5e5a60c0986da3cc97a399 \
                        sha256  27f0d92f7fc945ef962b2a71049632a1c4c061c6318c136a1e62f84b7d240603 \
                        size    14595984
        livecheck.url   ${homepage}
        livecheck.regex php-([strsed ${subport_branch} {g/\\./\\./}](?:\\.\[0-9.\]+)*(?:(?:alpha|beta|RC)\\d+|-latest))\\.tar
    }
}
#### RCstart template
#    RCbranch {
#        # When this becomes a stable version, remove the overrides for homepage,
#        # master_sites and livecheck, and update php.latest_stable_branch in the
#        # php-1.1 portgroup.
#        epoch           0
#        version         RCversion
#        homepage        https://www.php.net/pre-release-builds.php
#        master_sites    https://downloads.php.net/~mbeccati/ \
#                        https://downloads.php.net/~svpernova09
#        use_xz          yes
#        checksums       rmd160  d78af388868bc0a1ca36955971c21ad77da81cf4 \
#                        sha256  5c42173cbde7d0add8249c2e8a0c19ae271f41d8c47d67d72bdf91a88dcc7e4b \
#                        size    13569728
#        livecheck.url   ${homepage}
#        livecheck.regex php-([strsed ${subport_branch} {g/\\./\\./}](?:\\.\[0-9.\]+)*(?:(?:alpha|beta|RC)\\d+|-latest))\\.tar
#    }
#### RCend template

# https://www.php.net/eol.php
set php.oldest_supported_branch 8.2

# Iterate through branches in reverse order, so that the list of subports in
# "port info" will show newer versions before older versions.
set i [llength ${php.branches}]
while {[incr i -1] >= 0} {

set branch              [lindex ${php.branches} ${i}]
set major               [lindex [split ${branch} .] 0]
set php                 php[php.suffix_from_branch ${branch}]

if {[regexp "^${php}" ${subport}]} {

if {${major} > 5} {
    dist_subdir         ${php}
} else {
    dist_subdir         php${major}
}

configure.checks.implicit_function_declaration.whitelist-append strchr

# At least for type redefinitions.
if {[vercmp ${branch} >= 8.0]} {
    compiler.c_standard 2011
} else {
    compiler.c_standard 1999
    configure.cflags-append -std=gnu99
}

if {[is_sapi_subport]} {
    if {${php.branch} in ${phpknownfails}} {
        known_fail          yes
    }

    platform darwin {
        if {[vercmp ${branch} < 7.0] && [vercmp ${xcodeversion} >= 12.0]} {
            # Implicit function declarations. Need to backport upstream fixes from php73+.
            # https://bugs.php.net/80176
            # https://trac.macports.org/ticket/60988
            known_fail      yes
            pre-fetch {
                ui_error "${subport} @${version} cannot currently be compiled with Xcode 12 or later"
                return -code error "incompatible Xcode version"
            }
        }
    }

    if {[vercmp ${branch} >= 8.0]} {
        PortGroup       legacysupport 1.1
        # clock_gettime
        legacysupport.newest_darwin_requires_legacy 15
    }

    depends_build       path:bin/pkg-config:pkgconfig

    if {${subport} ne ${php}} {
        depends_lib     port:${php}
    }

    depends_lib-append  port:bzip2 \
                        path:bin/gsed:gsed \
                        port:libiconv \
                        port:libxml2 \
                        port:mhash \
                        port:zlib

    if {[vercmp ${branch} < 7.3]} {
        depends_lib-append  port:pcre
    } else {
        depends_lib-append  port:pcre2
    }

    # Use -p1 to accommodate the Suhosin patch
    patch.pre_args-replace  -p0 -p1
    patchfiles-append   patch-${php}-scripts-php-config.in.diff

    if {[vercmp ${branch} >= 8.2]} {
        patchfiles-append \
                        patch-${php}-atomic.diff
    }
    if {[vercmp ${branch} >= 8.0]} {
        if {[vercmp ${branch} < 8.2]} {
            patchfiles-append \
                        patch-${php}-conditional-Wno-implicit-fallthrough.diff
        }
        use_autoreconf  yes
        autoreconf.cmd  ./buildconf
        autoreconf.args --debug --force
        autoreconf.env  "PHP_AUTOCONF=${prefix}/bin/autoconf" \
                        "PHP_AUTOHEADER=${prefix}/bin/autoheader"
        depends_build-append \
                        port:autoconf \
                        port:libtool
    }
    # this has to be done for <7.4 too
    if {[vercmp ${branch} >= 7.4] && [vercmp ${branch} <= 8.0]} {
        patchfiles-append \
                        patch-${php}-libxml.diff \
                        patch-${php}-ext-xml-compat.c.diff \
                        ext-xml-tests-gh14834.phpt
    }
    # https://trac.macports.org/ticket/70468
    if {[vercmp ${branch} <= 7.4]} {
        configure.cflags-append     "-Os -Wno-error=implicit-int"
    }
    if {[vercmp ${branch} < 7.4]} {
        patchfiles-append \
                        patch-${php}-libxml2-overlinking.diff
    }
    if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} <= 7.4]} {
        patchfiles-append \
                        patch-${php}-implicit.diff
    }
    if {[vercmp ${branch} <= 5.3]} {
        patchfiles-append \
                        patch-${php}-configure.diff
    }
    if {[vercmp ${branch} <= 5.2]} {
        patchfiles-append \
                        patch-${php}-libxml2-2.9.diff \
                        patch-${php}-pcre-8.30.diff
    }
    if {[vercmp ${branch} >= 7.3] && [vercmp ${branch} < 8.1]} {
        patchfiles-append \
                        patch-${php}-zend_string_equal_val.diff
    }
    # https://github.com/php/php-src/issues/15701
    if {[vercmp ${branch} >= 8.3]} {
        patchfiles-append \
                        patch-php8x-cast.diff
    }

    # https://trac.macports.org/ticket/31590
    # Tested all subports (except oracle) and they built with clang-425. The reported failure was with Xcode 4.2.
    # Xcode 4.3 may work, but leaving it blacklisted due to lack of testing
    compiler.blacklist  {clang < 400}

    set phpinidir       ${prefix}/etc/${php}
    set extraphpinidir  ${prefix}/var/db/${php}

    configure.args      --mandir=${prefix}/share/man \
                        --infodir=${prefix}/share/info \
                        --program-suffix=[php.suffix_from_branch ${branch}] \
                        --includedir=${prefix}/include/${php} \
                        --libdir=${prefix}/lib/${php} \
                        --with-config-file-path=${phpinidir} \
                        --with-config-file-scan-dir=${extraphpinidir} \
                        --disable-all \
                        --enable-bcmath \
                        --enable-ctype \
                        --enable-dom \
                        --enable-filter \
                        --enable-pdo \
                        --enable-session \
                        --enable-simplexml \
                        --enable-tokenizer \
                        --enable-xml \
                        --enable-xmlreader \
                        --enable-xmlwriter \
                        --with-bz2=${prefix} \
                        --with-mhash=${prefix} \
                        --with-zlib=${prefix} \
                        --disable-cgi \
                        --disable-cli

    if {[vercmp ${branch} < 8.0]} {
        # JSON support is always on as of PHP 8.
        # https://github.com/php/php-src/pull/5495
        configure.args-append   --enable-json
    }

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --enable-hash \
                                --enable-libxml \
                                --with-libxml-dir=${prefix} \
                                --with-pcre-regex=${prefix} \
                                --without-pear
    } else {
        configure.args-append   --with-libxml \
                                --with-external-pcre=${prefix}
    }

    # Ensure we don't regenerate the parsers even if flex/re2c/bison are installed.
    configure.env       LEX=true \
                        RE2C=true \
                        YACC=true

    if {[vercmp ${branch} == 7.3]} {
        # Regenerate datetime parsers with re2c < 0.16 to avoid
        # miscompilation by clang > 700.1.81 < 802.0.38 that results in
        # a runtime hang. See https://bugs.php.net/80376.
        depends_build-append \
                        port:re2c-0.15

        pre-configure {
            foreach parser {parse_date parse_iso_intervals} {
                # See https://github.com/derickr/timelib/blob/2018.04/Makefile#L32-L36
                system -W ${worksrcpath}/ext/date/lib "${prefix}/bin/re2c-0.15 -d -b ${parser}.re > ${parser}.c"
            }
        }
    }

    if {[vercmp ${branch} >= 5.3]} {
        configure.args-append \
                        --enable-fileinfo \
                        --enable-phar \
                        --disable-fpm

        # ${php}-mysql +mysqlnd needs mysqlnd support compiled into the SAPI
        configure.env-append \
                        PHP_MYSQLND_ENABLED=yes
    }

    if {[vercmp ${branch} == 5.4]} {
        # https://bugs.php.net/bug.php?id=68114
        configure.args-append ac_cv_decimal_fp_supported=no
    }

    if {[vercmp ${branch} >= 7.2]} {
        depends_lib-append \
                        port:argon2

        configure.args-append \
                        --with-password-argon2=${prefix} \
                        --without-valgrind
    }

    configure.universal_args-delete --disable-dependency-tracking

    test.run            yes

    destroot.destdir    INSTALL_ROOT=${destroot}

    variant debug description {Enable debug support (useful to analyze a PHP-related core dump)} {
        configure.args-append   --enable-debug
    }

    variant pear description {Enable pear support} {
        if {[vercmp ${branch} < 7.4]} {
            configure.args-replace  --without-pear --with-pear
        } else {
            configure.args-append   --with-pear
        }
    }

    if {[vercmp ${branch} <= 5.3]} {
    variant suhosin description {Add Suhosin patch} {
        pre-fetch {
            if {${os.platform} eq "darwin" && ${os.major} < 9} {
                ui_error "The suhosin variant requires Mac OS X 10.5 or greater."
                return -code error "incompatible Mac OS X version"
            }
            if {!${suhosin_available}} {
                ui_error "There is no suhosin patch for PHP ${version} yet. Please check back later."
            }
            if {![file exists ${extraphpinidir}/suhosin.ini]} {
                ui_msg "You may also be interested in the suhosin extension, a related but different piece of software. See the ${php}-suhosin port."
            }
            if {!${suhosin_available}} {
                return -code error "unavailable variant"
            }
        }
        patch_sites-append          http://download.suhosin.org/
        if {${suhosin_available}} {
            if {[vercmp ${branch} >= 5.3]} {
                patchfiles-append   patch-${php}-suhosin-before.diff
            }
            patchfiles-append       ${suhosin_patch}
            if {[vercmp ${branch} >= 5.3]} {
                patchfiles-append   patch-${php}-suhosin-after.diff
            }
        }
    }
    }

    if {${subport} ne ${php}} {
        notes-append "If this is your first install, you need to enable ${subport} in your web server."
    }
}

}

### CLI SAPI ###

subport ${php} {
    PortGroup               muniversal 1.0
    PortGroup               select 1.0

    switch -- ${version} {
        5.2.17              {revision 18}
        5.3.29              {revision 9}
        5.4.45              {revision 8}
        5.5.38              {revision 9}
        5.6.40              {revision 7}
        7.0.33              {revision 7}
        7.1.33              {revision 5}
        7.2.34              {revision 6}
        7.3.33              {revision 4}
        7.4.33              {revision 3}
        8.0.30              {revision 2}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    depends_run             port:php_select

    select.group            php
    select.file             ${filespath}/${subport}

    if {[vercmp ${branch} == 5.3]} {
        patchfiles-append   patch-${php}-C++11.diff
    }

    if {[vercmp ${branch} >= 5.5] && [vercmp ${branch} < 7.0]} {
        patchfiles-append   patch-${php}-Zend-EX_TMP_VAR.diff
    }

    if {[vercmp ${branch} >= 5.3] && [vercmp ${branch} < 7.2]} {
        patchfiles-append   patch-${php}-icu-61.diff
    }

    if {[vercmp ${branch} < 7.4]} {
        patchfiles-append   dynamic_lookup-11.patch
    }

    if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} < 7.4]} {
        patchfiles-append   patch-${php}-icu-71.diff
    }

    if {[vercmp ${branch} < 8.0]} {
    post-patch {
        # Ensure the build date is the same for all universal archs.
        reinplace "s|^PHP_BUILD_DATE=.*$|PHP_BUILD_DATE=[clock format [clock seconds] -format {%Y-%m-%d}]|g" ${worksrcpath}/configure
    }
    }

    configure.args-replace  --disable-cli --enable-cli

    destroot.target         install-cli install-build install-headers install-programs

    destroot.keepdirs       ${destroot}${extraphpinidir}

    post-destroot {
        # Copy the default php.ini files.
        xinstall -m 755 -d ${destroot}${phpinidir}
        if {[vercmp ${branch} >= 5.3]} {
            xinstall -m 644 -W ${worksrcpath} \
                php.ini-development \
                php.ini-production \
                ${destroot}${phpinidir}
        } else {
            xinstall -m 644 -W ${worksrcpath} \
                php.ini-dist \
                php.ini-recommended \
                ${destroot}${phpinidir}
        }

        if {[vercmp ${branch} >= 5.3]} {
            # Copy mysqlnd headers.
            xinstall -d ${destroot}${prefix}/include/${php}/php/ext/mysqlnd
            xinstall -m 644 {*}[glob ${worksrcpath}/ext/mysqlnd/*.h] ${destroot}${prefix}/include/${php}/php/ext/mysqlnd
        }

        # Verify the executable works.
        system -W ${destroot}${prefix}/bin "./${php} -n -v"
    }

    # Include the readline extension https://www.php.net/readline directly in
    # the PHP CLI SAPI because until PHP 6 the interactive mode "php -a" won't
    # work with a separately built readline extension.
    # https://bugs.php.net/bug.php?id=53878
    # Users might prefer readline over libedit because only readline supports
    # readline_list_history() (https://www.php.net/readline-list-history).
    # On the other hand we want libedit to be the default because its license
    # is compatible with PHP's which means PHP can be distributable.
    variant libedit conflicts readline description {Build readline extension using libedit library} {
        depends_lib-append      port:libedit port:ncurses
        if {[vercmp ${branch} < 7.4]} {
            configure.args-append   --with-libedit=${prefix}
        } else {
            configure.args-append   --with-libedit
        }
    }
    variant readline conflicts libedit description {Build readline extension using readline library} {
        depends_lib-append      port:ncurses port:readline
        configure.args-append   --with-readline=${prefix}
    }
    if {![variant_isset readline]} {
        default_variants +libedit
    }

    if {[vercmp ${branch} < ${php.oldest_supported_branch}]} {
        notes-append "
PHP ${branch} has reached end-of-life. Please upgrade to PHP ${php.oldest_supported_branch} or newer. The newest stable version is ${php.latest_stable_branch}.

To learn how to update your code, please read the following guide:

    https://www.php.net/manual/en/migration[php.suffix_from_branch ${php.latest_stable_branch}].php


"
    }

    if {[vercmp ${branch} > ${php.latest_stable_branch}]} {
        notes-append "${php} @${version} is a development preview—do not use it in production!\n\n\n"
    }

    if {![file exists ${phpinidir}/php.ini]} {
        if {[vercmp ${branch} >= 5.3]} {
            notes-append "
To customize ${php}, copy\
${phpinidir}/php.ini-development (if this is a development server) or\
${phpinidir}/php.ini-production (if this is a production server) to\
${phpinidir}/php.ini and then make changes.
"
        } else {
            notes-append "
To customize ${php}, copy ${phpinidir}/php.ini-recommended to\
${phpinidir}/php.ini and then make changes.
"
        }
    } else {
        if {[vercmp ${branch} >= 5.3]} {
            notes-append "
You may need to update your php.ini for any changes that have been made\
in this version of ${php}. Compare ${phpinidir}/php.ini with\
${phpinidir}/php.ini-development (if this is a development server) or\
${phpinidir}/php.ini-production (if this is a production server).
"
        } else {
            notes-append "
You may need to update your php.ini for any changes that have been made\
in this version of ${php}. Compare ${phpinidir}/php.ini with\
${phpinidir}/php.ini-recommended.
"
        }
    }

    # Enable livecheck for all supported PHP branches and the development branch.
    if {[vercmp ${branch} >= ${php.oldest_supported_branch}]} {
        livecheck.type      regex
        default livecheck.url   ${homepage}/downloads.php?source=Y
        default livecheck.regex {[quotemeta /php-([quotemeta ${branch}](?:\\.\[0-9.\]+)*)\\.tar]}
    }
}

### Apache 2 handler SAPI ###

subport ${php}-apache2handler {
    PortGroup               active_variants 1.1

    switch -- ${version} {
        5.2.17              {revision 4}
        5.3.29              {revision 4}
        5.4.45              {revision 4}
        5.5.38              {revision 4}
        5.6.40              {revision 2}
        7.0.33              {revision 2}
        7.1.33              {revision 2}
        7.2.34              {revision 3}
        7.3.33              {revision 2}
        7.4.33              {revision 2}
        8.0.30              {revision 2}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    description             ${php} Apache 2 Handler SAPI

    long_description        ${description}

    homepage                https://www.php.net/install.unix.apache2

    depends_lib-append      port:apache2

    require_active_variants apache2 preforkmpm

    set apxs ${prefix}/bin/apxs
    set confdir ${prefix}/etc/apache2
    set moduledir ${prefix}/lib/apache2/modules

    configure.args-append   --with-apxs2=${apxs}

    # https://trac.macports.org/ticket/70468
    if {[vercmp ${branch} <= 7.4]} {
        configure.cflags-append     "-Os -Wno-error=implicit-int"
    }

    if {[vercmp ${branch} < 8.0]} {
        set bundle_major    ${major}
    } else {
        set bundle_major    {}
    }

    build.target            libs/libphp${bundle_major}.bundle

    if {[vercmp ${branch} < 5.3]} {
        patchfiles-append   patch-${php}-apache24.diff
    }

    destroot {
        xinstall -m 755 -d ${destroot}${moduledir} ${destroot}${confdir}/extra
        xinstall -m 644 ${worksrcpath}/libs/libphp${bundle_major}.so ${destroot}${moduledir}/mod_${php}.so
        xinstall -m 644 ${filespath}/mod_php.conf.in ${destroot}${confdir}/extra/mod_${php}.conf
        reinplace s/@MAJOR@/${bundle_major}/g ${destroot}${confdir}/extra/mod_${php}.conf
    }

    notes-append "

To enable ${subport}, run:

    cd ${moduledir}
    sudo ${apxs} -a -e -n php${bundle_major} mod_${php}.so
"
}

### CGI SAPI ###

subport ${php}-cgi {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 3}
        7.3.33              {revision 2}
        7.4.33              {revision 2}
        8.0.30              {revision 2}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    description             ${php} CGI SAPI

    long_description        ${description}

    homepage                https://www.php.net/install.unix.commandline

    configure.args-delete   --disable-cgi
    if {[vercmp ${branch} >= 5.3]} {
        configure.args-append --enable-cgi
    } else {
        configure.args-append --enable-fastcgi --enable-force-cgi-redirect
    }

    if {[vercmp ${branch} >= 5.4]} {
        build.target        cgi
        destroot.target     install-cgi
    } else {
        destroot {
            xinstall ${worksrcpath}/sapi/cgi/php-cgi ${destroot}${prefix}/bin/php-cgi[php.suffix_from_branch ${branch}]
        }
    }

}

### FPM SAPI ###

if {[vercmp ${branch} >= 5.3]} {
subport ${php}-fpm {
    switch -- ${version} {
        5.3.29              {revision 2}
        5.4.45              {revision 2}
        5.5.38              {revision 2}
        5.6.40              {revision 2}
        7.0.33              {revision 2}
        7.1.33              {revision 2}
        7.2.34              {revision 3}
        7.3.33              {revision 2}
        7.4.33              {revision 2}
        8.0.30              {revision 2}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    description             ${php} FPM SAPI

    long_description        ${description}

    homepage                https://www.php.net/install.fpm

    set fpmuser             nobody
    set fpmgroup            nobody

    patchfiles-append       patch-${php}-sapi-fpm-php-fpm.conf.in.diff

    post-patch {
        reinplace "s|@PHP@|${php}|g" ${worksrcpath}/sapi/fpm/php-fpm.conf.in
    }

    configure.args-replace  --disable-fpm --enable-fpm
    configure.args-append   --datadir=${prefix}/share/examples/${php} \
                            --sysconfdir=${phpinidir} \
                            --with-fpm-user=${fpmuser} \
                            --with-fpm-group=${fpmgroup}

    build.target            fpm

    destroot.target         install-fpm

    destroot.keepdirs       ${destroot}${prefix}/var/log/${php} \
                            ${destroot}${prefix}/var/run/${php}

    post-destroot {
        xinstall -d -o ${fpmuser} -g ${fpmgroup} ${destroot}${prefix}/var/log/${php} ${destroot}${prefix}/var/run/${php}
    }

    startupitem.create      yes
    startupitem.executable  ${prefix}/sbin/php-fpm[php.suffix_from_branch ${branch}]

    if {![file exists ${phpinidir}/php-fpm.conf]} {
        notes-append "

To use ${subport}, copy\
${phpinidir}/php-fpm.conf.default to\
${phpinidir}/php-fpm.conf and make changes if desired.
"
    } else {
        notes-append "

You may need to update your php-fpm.conf for any changes that have been made\
in this version of ${subport}. Compare ${phpinidir}/php-fpm.conf with\
${phpinidir}/php-fpm.conf.default.
"
    }
}
}

### Bundled extensions ###

subport ${php}-calendar {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    description             a PHP extension for converting between different \
                            calendar formats

    long_description        ${description}
}

subport ${php}-curl {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       net www

    description             a PHP interface to the curl library, which lets you \
                            download files from servers with a variety of protocols

    long_description        ${description}

    depends_lib-append      port:curl

    if {[vercmp ${branch} < 7.4]} {
        if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} <= 7.1]} {
            patchfiles-append \
                                patch-${php}-ext-curl-config.m4.diff
        }
        configure.args-append   --with-curl=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-curl
    }
}

subport ${php}-dba {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       databases

    description             a PHP interface for accessing DBM databases such as \
                            BerkeleyDB

    long_description        ${description}

    variant gdbm conflicts qdbm description {Add GDBM support} {
        depends_lib-append      port:gdbm
        configure.args-append   --with-gdbm=${prefix}
    }

    variant qdbm conflicts gdbm description {Add QDBM support} {
        depends_lib-append      port:qdbm
        configure.args-append   --with-qdbm=${prefix}
    }
}

if {[vercmp ${branch} >= 5.3]} {
subport ${php}-enchant {
    switch -- ${version} {
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 1}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       textproc devel

    description             a PHP interface to enchant

    long_description        ${name} is ${description}, a common API for many spell libraries.

    if {[vercmp ${branch} >= 8.0]} {
        depends_lib-append  port:enchant2

        extract.post_args-append ${worksrcdir}/ext/spl
    } else {
        depends_lib-append  port:enchant
    }

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-enchant=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-enchant
    }

    post-destroot {
        set docdir ${prefix}/share/doc/${subport}
        xinstall -d ${destroot}${docdir}
        xinstall -m 644 -W ${destroot.dir} CREDITS ${destroot}${docdir}

        if {[vercmp ${branch} < 7.3]} {
        set examplesdir ${prefix}/share/examples/${subport}
        xinstall -d ${destroot}${examplesdir}
        xinstall -m 644 ${destroot.dir}/docs/examples/example1.php \
            ${destroot}${examplesdir}
        }
    }
}
}

subport ${php}-exif {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       graphics

    description             a PHP interface to the EXIF image metadata functions

    long_description        ${description}
}

if {[vercmp ${branch} >= 7.4]} {
subport ${php}-ffi {
    switch -- ${version} {
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       devel

    description             a PHP interface to allow loading of shared libraries

    long_description        ${description}

    depends_build-append    path:bin/pkg-config:pkgconfig

    depends_lib-append      port:libffi

    configure.args-append   --with-ffi
}
}

subport ${php}-ftp {
    switch -- ${version} {
        5.2.17              {revision 3}
        5.3.29              {revision 3}
        5.4.45              {revision 3}
        5.5.38              {revision 3}
        5.6.40              {revision 3}
        7.0.33              {revision 2}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       net

    description             a PHP extension for accessing file servers using the \
                            File Transfer Protocol

    long_description        {*}${description}

    if {[vercmp ${branch} >= 7.4]} {
        depends_build-append \
                            path:bin/pkg-config:pkgconfig
    }

    if {[vercmp ${branch} < 7.0]} {
        patchfiles-append   patch-${php}-ext-ftp-ftp_ssl_connect.diff
    }

    openssl.branch          3
    configure.args-append   --with-openssl-dir=[openssl::install_area]
}

subport ${php}-gd {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       graphics

    description             a PHP interface to the gd library

    long_description        ${description}

    depends_lib-append      port:freetype \
                            path:include/turbojpeg.h:libjpeg-turbo \
                            port:libpng \
                            port:zlib

    if {[vercmp ${branch} <= 5.2]} {
        patchfiles-append   patch-${php}-jpeg-9.diff
    }

    if {[vercmp ${branch} < 5.5]} {
        # This flag was removed in PHP 7.2.0 and does nothing in PHP >= 5.5.0.
        # https://github.com/php/php-src/commit/494c5dc77ae92d21db915abada2ecefaca620543
        configure.args-append   --enable-gd-native-ttf
    }

    if {[vercmp ${branch} >= 7.0]} {
        depends_lib-append  port:webp
    }

    if {[vercmp ${branch} == 8.1]} {
        patchfiles-append       patch-${php}-ext-gd.diff
    }

    if {[vercmp ${branch} < 7.4]} {
        patchfiles-append       patch-${php}-ext-gd-config.m4.diff

        configure.args-append   --with-freetype-dir=${prefix} \
                                --with-jpeg-dir=${prefix} \
                                --with-png-dir=${prefix} \
                                --with-zlib-dir=${prefix}

        if {[vercmp ${branch} >= 7.0]} {
            configure.args-append --with-webp-dir=${prefix}
        }
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-freetype \
                                --with-jpeg \
                                --with-webp
    }

    if {[vercmp ${branch} < 7.0]} {
    variant t1lib description {Add PostScript Type 1 font support with t1lib} {
        depends_lib-append      port:t1lib
        configure.args-append   --with-t1lib=${prefix}
    }
    }
}

subport ${php}-gettext {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       devel

    description             a PHP interface to the gettext natural language \
                            support functions

    long_description        ${description}

    depends_lib-append      port:gettext

    configure.args-append   --with-gettext=${prefix}
}

subport ${php}-gmp {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       devel math

    description             a PHP interface to GMP, the GNU multiprocessing \
                            library through which you can work with \
                            arbitrary-length integers

    long_description        ${description}

    depends_lib-append      port:gmp

    if {[vercmp ${branch} <= 5.2]} {
        patchfiles-append   patch-${php}-ext-gmp-gmp.c.diff
    }

    configure.args-append   --with-gmp=${prefix}
}

subport ${php}-iconv {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       textproc

    description             a PHP interface to the libiconv character encoding \
                            conversion functions

    long_description        ${description}

    depends_lib-append      port:libiconv

    configure.args-append   --with-iconv=${prefix}
}

if {[vercmp ${branch} < 8.3]} {
# imap was evicted from PHP core in version 8.4;
# php83-imap and later subports are found in the separate php-imap Portfile.
subport ${php}-imap {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
    }

    categories-append       mail

    description             a PHP interface to the IMAP protocol

    long_description        ${description}

    depends_build-append    port:cclient

    depends_lib-append      port:kerberos5 \
                            port:libcomerr

    configure.args-append   --with-imap=${prefix} \
                            --with-imap-ssl=${prefix} \
                            --with-kerberos=${prefix}

    if {[vercmp ${branch} >= 7.4]} {
        depends_build-append    path:bin/pkg-config:pkgconfig

        # https://bugs.php.net/bug.php?id=79112
        configure.env-append    PHP_OPENSSL=yes
    }
}
}

if {[vercmp ${branch} >= 5.3]} {
subport ${php}-intl {
    switch -- ${version} {
        5.3.29              {revision 11}
        5.4.45              {revision 9}
        5.5.38              {revision 9}
        5.6.40              {revision 8}
        7.0.33              {revision 8}
        7.1.33              {revision 7}
        7.2.34              {revision 6}
        7.3.33              {revision 6}
        7.4.33              {revision 4}
        8.0.30              {revision 3}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       devel

    description             internationalization extension for PHP

    long_description        Internationalization extension implements ICU \
                            library functionality in PHP.

    depends_build-append    path:bin/pkg-config:pkgconfig

    depends_lib-append      path:lib/pkgconfig/icu-uc.pc:icu

    if {[vercmp ${branch} >= 5.3] && [vercmp ${branch} < 7.0]} {
        patchfiles-append   patch-${php}-ext-intl-icu-68.diff
    }

    if {[vercmp ${branch} >= 5.5] && [vercmp ${branch} < 7.4]} {
        patchfiles-append   patch-${php}-ext-intl-icu-71.diff
    }

    if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} < 7.3]} {
        patchfiles-append   patch-${php}-ext-intl-icu-56.diff
    }

    if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} < 8.0]} {
        patchfiles-append   patch-${php}-ext-intl-icu-68.diff
    }

    if {[vercmp ${branch} < 7.1]} {
        patchfiles-append   patch-${php}-ext-intl-config.m4.diff
    }

    # icu >= 75 requires C++17
    compiler.cxx_standard   2017

    if {[vercmp ${branch} < 8.2]} {
    post-patch {
        reinplace "s|PHP_CXX_COMPILE_STDCXX(11,|PHP_CXX_COMPILE_STDCXX(17,|" \
            ${worksrcpath}/ext/intl/config.m4
    }
    }

    platform darwin {
        if {(${os.major} == 10 || ${os.major} == 11) && [vercmp ${branch} >= 7.1] && [vercmp ${branch} < 7.4]} {
            # Need to investigate how this was fixed for php 7.4 and
            # possibly backport the fix.
            # https://bugs.php.net/bug.php?id=76826
            known_fail          yes
        }
    }
}
}

subport ${php}-ipc {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          shmop sysvmsg sysvsem sysvshm

    description             interprocess communication extensions for PHP

    long_description        PHP extensions for interprocess communication (IPC), including the \
                            shmop, sysvmsg, sysvsem, and sysvshm extensions.
}

subport ${php}-ldap {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       databases

    description             a PHP interface to LDAP

    long_description        ${subport} is ${description}, the Lightweight Directory \
                            Access Protocol, which is used to access Directory \
                            Servers.

    depends_lib-append      path:lib/libldap.dylib:openldap \
                            port:cyrus-sasl2

    configure.args-append   --with-ldap=${prefix}

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-ldap-sasl=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-ldap-sasl
    }
}

subport ${php}-mbstring {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       textproc

    description             a PHP extension for manipulating strings in multibyte \
                            encodings

    long_description        ${description}

    if {[vercmp ${branch} >= 7.4]} {
        depends_build-append    path:bin/pkg-config:pkgconfig

        depends_lib-append      port:oniguruma6
    } else {
        configure.cppflags-replace -I${prefix}/include -isystem${prefix}/include
    }
}

if {[vercmp ${branch} < 7.2]} {
# mcrypt was evicted from PHP core in version 7.2; php72-mcrypt and later
# subports are found in the separate php-mcrypt Portfile.
subport ${php}-mcrypt {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
    }

    categories-append       security

    description             a PHP interface to the mcrypt library, which offers \
                            a wide variety of algorithms

    long_description        ${description}

    depends_lib-append      port:libmcrypt

    # The mcrypt extension may be using libtool unnecessarily; monitor
    # https://bugs.php.net/bug.php?id=54500
    depends_lib-append      port:libtool

    configure.args-append   --with-mcrypt=${prefix}
}
}

if {[vercmp ${branch} < 7.0]} {
subport ${php}-mssql {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
    }

    php.extensions          mssql pdo_dblib

    categories-append       databases

    description             a PHP interface to MSSQL using FreeTDS, including \
                            the mssql and pdo_dblib extensions

    long_description        ${description}

    depends_lib-append      port:freetds

    configure.args-append   --with-mssql=${prefix} \
                            --with-pdo-dblib=${prefix}
}
}

subport ${php}-mysql {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          mysqli pdo_mysql
    if {[vercmp ${branch} < 7.0]} {
        php.extensions-prepend mysql
    }

    categories-append       databases

    description             a PHP interface to MySQL databases, including the
    if {[vercmp ${branch} < 7.0]} {
        description-append  mysql,
    }
    description-append      mysqli and pdo_mysql extensions

    long_description        ${description}

    depends_lib-append      port:zlib

    configure.args-append   --with-zlib-dir=${prefix}

    if {[vercmp ${branch} >= 5.3]} {
    variant mysqlnd conflicts mysql57 mysql8 mariadb10 mariadb11 mariadb12 description {Use MySQL Native Driver} {
        configure.args-append   --with-pdo-mysql=mysqlnd

        if {[vercmp ${branch} < 7.0]} {
            configure.args-append   --with-mysql=mysqlnd
        }

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=mysqlnd
        } else {
            configure.args-append   --with-mysqli
        }

        configure.cppflags-append   -I${worksrcpath}

        set phpini ${prefix}/etc/${php}/php.ini
        notes "
To use mysqlnd with a local MySQL server, edit ${phpini} and set\
mysql.default_socket, mysqli.default_socket and pdo_mysql.default_socket\
to the path to your MySQL server's socket file.

For mysql57, use ${prefix}/var/run/mysql57/mysqld.sock
For mysql8, use ${prefix}/var/run/mysql8/mysqld.sock
For mariadb10, use ${prefix}/var/run/mariadb-10.11/mysqld.sock
For mariadb11, use ${prefix}/var/run/mariadb-11.8/mysqld.sock
For mariadb12, use ${prefix}/var/run/mariadb-12.3/mysqld.sock
"
    }
    }

    variant mysql57 conflicts mysqlnd mysql8 mariadb10 mariadb11 mariadb12 description {Use MySQL 5.7 libraries} {
        depends_lib-append      port:mysql57

        configure.args-append   --with-mysql-sock=${prefix}/var/run/mysql57/mysqld.sock \
                                --with-pdo-mysql=${prefix}/lib/mysql57/bin/mysql_config

        if {[vercmp ${branch} < 7.0]} {
            post-extract {
                file mkdir ${workpath}/mysql57
                file link -symbolic ${workpath}/mysql57/lib ${prefix}/lib/mysql57
                file link -symbolic ${workpath}/mysql57/include ${prefix}/include/mysql57
            }

            configure.args-append   --with-mysql=${workpath}/mysql57
        }

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=${prefix}/lib/mysql57/bin/mysql_config
        } else {
            configure.args-append   --with-mysqli
        }
    }

    if {[vercmp ${branch} >= 7.3]} {
    variant mysql8 conflicts mysqlnd mysql57 mariadb10 mariadb11 mariadb12 description {Use MySQL 8 libraries} {
        depends_lib-append      port:mysql8

        configure.args-append   --with-mysql-sock=${prefix}/var/run/mysql8/mysqld.sock \
                                --with-pdo-mysql=${prefix}/lib/mysql8/bin/mysql_config

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=${prefix}/lib/mysql8/bin/mysql_config
        } else {
            configure.args-append   --with-mysqli
        }
    }
    }

    variant mariadb10 conflicts mysqlnd mysql57 mysql8 mariadb11 mariadb12 description {Use MariaDB 10 libraries} {
        set my_db 10.11
        depends_lib-append      port:mariadb-${my_db}

        configure.args-append   --with-mysql-sock=${prefix}/var/run/mariadb-${my_db}/mysqld.sock \
                                --with-pdo-mysql=${prefix}/lib/mariadb-${my_db}/bin/mysql_config

        if {[vercmp ${branch} < 7.0]} {
            post-extract {
                file mkdir ${workpath}/mariadb
                file link -symbolic ${workpath}/mariadb/lib ${prefix}/lib/mariadb-${my_db}
                file link -symbolic ${workpath}/mariadb/include ${prefix}/include/mariadb-${my_db}
            }

            configure.args-append   --with-mysql=${workpath}/mariadb
        }

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=${prefix}/lib/mariadb/bin-${my_db}/mysql_config
        } else {
            configure.args-append   --with-mysqli
        }
    }

    variant mariadb11 conflicts mysqlnd mysql57 mysql8 mariadb10 mariadb12 description {Use MariaDB 11 libraries} {
        set my_db 11.8
        depends_lib-append      port:mariadb-${my_db}

        configure.args-append   --with-mysql-sock=${prefix}/var/run/mariadb-${my_db}/mysqld.sock \
                                --with-pdo-mysql=${prefix}/lib/mariadb-${my_db}/bin/mysql_config

        if {[vercmp ${branch} < 7.0]} {
            post-extract {
                file mkdir ${workpath}/mariadb
                file link -symbolic ${workpath}/mariadb/lib ${prefix}/lib/mariadb-${my_db}
                file link -symbolic ${workpath}/mariadb/include ${prefix}/include/mariadb-${my_db}
            }

            configure.args-append   --with-mysql=${workpath}/mariadb
        }

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=${prefix}/lib/mariadb/bin-${my_db}/mysql_config
        } else {
            configure.args-append   --with-mysqli
        }
    }

    variant mariadb12 conflicts mysqlnd mysql57 mysql8 mariadb10 mariadb11 description {Use MariaDB 12 libraries} {
        set my_db 12.3
        depends_lib-append      port:mariadb-${my_db}

        configure.args-append   --with-mysql-sock=${prefix}/var/run/mariadb-${my_db}/mysqld.sock \
                                --with-pdo-mysql=${prefix}/lib/mariadb-${my_db}/bin/mysql_config

        if {[vercmp ${branch} < 7.0]} {
            post-extract {
                file mkdir ${workpath}/mariadb
                file link -symbolic ${workpath}/mariadb/lib ${prefix}/lib/mariadb-${my_db}
                file link -symbolic ${workpath}/mariadb/include ${prefix}/include/mariadb-${my_db}
            }

            configure.args-append   --with-mysql=${workpath}/mariadb
        }

        if {[vercmp ${branch} < 8.2]} {
            configure.args-append   --with-mysqli=${prefix}/lib/mariadb/bin-${my_db}/mysql_config
        } else {
            configure.args-append   --with-mysqli
        }
    }

    if {![variant_isset mysql57] && ![variant_isset mysql8] && ![variant_isset mariadb10] && ![variant_isset mariadb11] && ![variant_isset mariadb12]} {
        if {[vercmp ${branch} < 5.3]} {
            default_variants +mariadb10
        } else {
            default_variants +mysqlnd
        }
    }
}

subport ${php}-odbc {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          odbc pdo_odbc

    categories-append       databases

    if {[vercmp ${branch} <= 8.0]} {
        patchfiles-append \
                        patch-${php}-odbc-stmt_get_col.diff
    }

    description             a PHP interface for accessing databases via Open \
                            DataBase Connectivity (ODBC)

    long_description        ${description}

    if {[vercmp ${branch} >= 5.3]} {
        variant iodbc conflicts unixodbc description {Use iODBC} {
            depends_lib-append      port:libiodbc

            patchfiles-append       patch-${php}-iODBC.diff

            configure.args-append   --with-pdo-odbc=iODBC,${prefix}
            if {[vercmp ${branch} < 7.4]} {
                configure.args-append   --with-iODBC=${prefix}
            } else {
                depends_build-append    path:bin/pkg-config:pkgconfig

                configure.args-append   --with-iODBC
            }
        }

        variant unixodbc conflicts iodbc description {Use unixODBC} {}

        if {![variant_isset iodbc] && ![variant_isset unixodbc]} {
            default_variants +unixodbc
        }
    }

    if {[variant_isset unixodbc] || [vercmp ${branch} < 5.3]} {
        depends_lib-append      port:unixODBC

        patchfiles-append       patch-${php}-unixODBC.diff

        configure.args-append   --with-pdo-odbc=unixODBC,${prefix}
        if {[vercmp ${branch} < 7.4]} {
            configure.args-append   --with-unixODBC=${prefix}
        } else {
            depends_build-append    path:bin/pkg-config:pkgconfig

            configure.args-append   --with-unixODBC
        }
    }
}

if {[vercmp ${branch} >= 5.5] && [vercmp ${branch} < 8.5]} {
# OPcache is integrated in php >= 8.5
# https://wiki.php.net/rfc/make_opcache_required
subport ${php}-opcache {
    switch -- ${version} {
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 2}
        7.1.33              {revision 2}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
    }

    php.extensions.zend opcache

    description         OPcache improves PHP performance by storing precompiled \
                        script bytecode in shared memory, thereby removing the \
                        need for PHP to load and parse scripts on each request.

    long_description    ${description}

    configure.args-append   --enable-opcache

    # File-based opcode cache was added in 7.0 (3abde432) and can no longer
    # be disabled as of 7.4 (c32da66e).
    if {[vercmp ${branch} >= 7.0] && [vercmp ${branch} < 7.4]} {
        # Chained fixups cause this error at runtime on Ventura:
        # symbol not found in flat namespace '_zend_file_cache_invalidate'
        if {[vercmp ${macosx_deployment_target} >= 11]} {
            configure.ldflags-append -Wl,-no_fixup_chains
        }

        configure.args-append   --enable-opcache-file
    }

    if {[vercmp ${branch} == 8.1]} {
        patchfiles-append patch-${php}-opcache.diff
    }

    post-destroot {
        set docdir ${destroot}${prefix}/share/doc/${subport}
        xinstall -d ${docdir}
        if {[vercmp ${branch} < 7.4]} {
            xinstall -W ${destroot.dir} -m 644 README ${docdir}
        }
    }
}
}

subport ${php}-openssl {
    switch -- ${version} {
        5.2.17              {revision 3}
        5.3.29              {revision 3}
        5.4.45              {revision 3}
        5.5.38              {revision 3}
        5.6.40              {revision 3}
        7.0.33              {revision 2}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       devel security

    description             a PHP interface to OpenSSL signature-generation \
                            and -verification and data-encryption and \
                            -decryption functions

    long_description        {*}${description}

    depends_lib-append      port:kerberos5 \
                            port:libcomerr

    post-extract {
        move ${php.build_dirs}/config0.m4 ${php.build_dirs}/config.m4
    }

    configure.args-append   --with-kerberos=${prefix}

    # Look in OpenSSL directories before the main include directory.
    configure.cppflags-replace -I${prefix}/include -isystem${prefix}/include

    if {[vercmp ${branch} <= 5.6]} {
        openssl.branch          1.0
    } elseif {[vercmp ${branch} <= 8.0]} {
        openssl.branch          1.1
    } else {
        openssl.branch          3
    }

    if {[vercmp ${branch} <= 5.6]} {
        configure.args-append   --with-openssl=shared
    } elseif {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-openssl=[openssl::install_area]
    } else {
        configure.args-append   --with-openssl
    }
}

if {[vercmp ${branch} < 8.4]} {
# oracle was evicted from PHP core in version 8.4;
subport ${php}-oracle {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.31              {revision 0}
        8.3.31              {revision 0}
    }

    php.extensions          oci8 pdo_oci

    categories-append       databases

    description             a PHP interface to Oracle, including the oci8 and \
                            pdo_oci extensions

    long_description        ${description}

    # port:oracle-instantclient has to be manually installed
    known_fail              yes
    depends_lib-append      port:oracle-instantclient

    patch.pre_args-replace  -p0 -p1
    if {[vercmp ${branch} <= 7.4]} {
        patchfiles-append   patch-${php}-ext-pdo_oci-oci_statement.c.diff
    }
    if {[vercmp ${branch} <= 5.2]} {
        patchfiles-append   patch-${php}-ext-pdo_oci-config.m4.diff
    }

    set lib_dir             ${prefix}/lib/oracle
    pre-configure {
        regexp {\.dylib\.(.+)$} [glob -directory ${lib_dir} libclntsh.dylib.*] -> library_version
        configure.args-append \
                            --with-oci8=instantclient,${lib_dir} \
                            --with-pdo-oci=instantclient,${lib_dir},${library_version}
    }
}
}

subport ${php}-pcntl {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       sysutils

    description             a PHP interface to Unix-style process creation, \
                            program execution, signal handling and process \
                            termination functions

    long_description        ${description}

    patch.pre_args-replace  -p0 -p1
    if {[vercmp ${branch} <= 8.0]} {
        patchfiles-append   patch-${php}-ext-pcntl-pcntl.c.diff
    }

    notes "
${subport} should not be enabled within a web server environment.\
Unexpected results may occur if any process control functions are used within\
a web server environment.
"
}

subport ${php}-posix {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       sysutils

    description             a PHP interface to additional POSIX functions

    long_description        a PHP interface to those functions defined in the \
                            IEEE 1003.1 (POSIX.1) standards document which are \
                            not accessible through other means
}

subport ${php}-postgresql {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          pgsql pdo_pgsql

    categories-append       databases

    homepage                https://www.php.net/pgsql

    description             a PHP interface to PostgreSQL, including \
                            the pgsql and pdo_pgsql extensions

    long_description        ${description}

    variant postgresql13 requires postgresql14 description "Legacy compatibility variant" {}

    variant postgresql14 conflicts postgresql15 postgresql16 postgresql17 postgresql18 description {Use PostgreSQL 14 libraries} {
        set pg_ver 14
        depends_lib-append      port:postgresql${pg_ver}
        configure.args-append   --with-pgsql=${prefix}/lib/postgresql${pg_ver}/bin \
                                --with-pdo-pgsql=${prefix}/lib/postgresql${pg_ver}/bin
    }

    variant postgresql15 conflicts postgresql14 postgresql16 postgresql17 postgresql18 description {Use PostgreSQL 15 libraries} {
        set pg_ver 15
        depends_lib-append      port:postgresql${pg_ver}
        configure.args-append   --with-pgsql=${prefix}/lib/postgresql${pg_ver}/bin \
                                --with-pdo-pgsql=${prefix}/lib/postgresql${pg_ver}/bin
    }

    variant postgresql16 conflicts postgresql14 postgresql15 postgresql17 postgresql18 description {Use PostgreSQL 16 libraries} {
        set pg_ver 16
        depends_lib-append      port:postgresql${pg_ver}
        configure.args-append   --with-pgsql=${prefix}/lib/postgresql${pg_ver}/bin \
                                --with-pdo-pgsql=${prefix}/lib/postgresql${pg_ver}/bin
    }

    variant postgresql17 conflicts postgresql14 postgresql15 postgresql16 postgresql18 description {Use PostgreSQL 17 libraries} {
        set pg_ver 17
        depends_lib-append      port:postgresql${pg_ver}
        configure.args-append   --with-pgsql=${prefix}/lib/postgresql${pg_ver}/bin \
                                --with-pdo-pgsql=${prefix}/lib/postgresql${pg_ver}/bin
    }

    variant postgresql18 conflicts postgresql14 postgresql15 postgresql16 postgresql17 description {Use PostgreSQL 18 libraries} {
        set pg_ver 18
        depends_lib-append      port:postgresql${pg_ver}
        configure.args-append   --with-pgsql=${prefix}/lib/postgresql${pg_ver}/bin \
                                --with-pdo-pgsql=${prefix}/lib/postgresql${pg_ver}/bin
    }

    if {![variant_isset postgresql14] && ![variant_isset postgresql15] && ![variant_isset postgresql16] && ![variant_isset postgresql17] && ![variant_isset postgresql18]} {
        default_variants +postgresql18
    }
}

if {[vercmp ${branch} < 8.1]} {
# pspell was evicted from PHP core in version 8.4
# php81-pspell and later
# subports are found in the separate php-pspell Portfile.
subport ${php}-pspell {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
    }

    categories-append       textproc

    description             a PHP interface to the aspell library, which lets you \
                            check spelling and offer spelling suggestions

    long_description        ${description}

    depends_lib-append      port:aspell

    configure.args-append   --with-pspell=${prefix}
}
}

subport ${php}-snmp {
    switch -- ${version} {
        5.2.17              {revision 2}
        5.3.29              {revision 2}
        5.4.45              {revision 2}
        5.5.38              {revision 2}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       sysutils

    description             a PHP interface to the Simple Network Management \
                            Protocol (SNMP)

    long_description        ${description}

    depends_lib-append      port:net-snmp

    configure.args-append   --with-snmp=${prefix}
}

subport ${php}-soap {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 1}
        8.0.30              {revision 1}
        8.1.34              {revision 1}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       net

    description             a PHP extension for writing SOAP clients and servers

    long_description        ${description}

    depends_lib-append      port:libxml2

    if {[vercmp ${branch} < 8.1]} {
        patchfiles-append \
                        patch-${php}-ext-soap.diff
    }

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-libxml-dir=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig
    }
}

subport ${php}-sockets {
    switch -- ${version} {
        5.2.17              {revision 0}
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       net

    description             a PHP interface to BSD socket communication \
                            functions

    long_description        ${description}
}

if {[vercmp ${branch} >= 7.2]} {
subport ${php}-sodium {
    switch -- ${version} {
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 1}
        8.0.30              {revision 1}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          sodium

    categories-append       security

    description             a PHP interface to libsodium, a modern and \
                            easy-to-use crypto library

    long_description        ${description}

    depends_lib-append      port:libsodium

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-sodium=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-sodium
    }
}
}

if {[vercmp ${branch} >= 5.3]} {
subport ${php}-sqlite {
    switch -- ${version} {
        5.3.29              {revision 0}
        5.4.45              {revision 0}
        5.5.38              {revision 0}
        5.6.40              {revision 0}
        7.0.33              {revision 0}
        7.1.33              {revision 0}
        7.2.34              {revision 0}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    php.extensions          sqlite sqlite3 pdo_sqlite

    categories-append       databases

    description             a PHP interface to SQLite, including the sqlite, sqlite3 \
                            and pdo_sqlite extensions

    if {[vercmp ${branch} >= 5.4]} {
        php.extensions-delete sqlite
        description-delete "sqlite,"
    }

    long_description        ${description}

    depends_lib-append      port:sqlite3

    post-extract {
        move ${worksrcpath}/ext/sqlite3/config0.m4 ${worksrcpath}/ext/sqlite3/config.m4
    }

    configure.args-append   --enable-sqlite-utf8

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-sqlite3=${prefix} \
                                --with-pdo-sqlite=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-sqlite3 \
                                --with-pdo-sqlite
    }
}
}

subport ${php}-tidy {
    switch -- ${version} {
        5.2.17              {revision 3}
        5.3.29              {revision 3}
        5.4.45              {revision 2}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 0}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       www

    description             a PHP interface to tidy, the HTML cleaning and \
                            repair utility

    long_description        ${description}

    depends_lib-append      port:tidy

    if {[vercmp ${branch} <= 7.0]} {
        patchfiles-append   patch-${php}-ext-tidy-tidy.c.diff
    }

    configure.args-append   --with-tidy=${prefix}
}

if {[vercmp ${branch} < 7.4]} {
subport ${php}-wddx {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
    }

    categories-append       textproc

    description             a PHP interface to Web Distributed Data Exchange

    long_description        ${description}

    depends_build-append    port:expat \
                            port:libxml2

    configure.args-append   --with-libexpat-dir=${prefix} \
                            --with-libxml-dir=${prefix}
}
}

if {[vercmp ${branch} < 8.0]} {
subport ${php}-xmlrpc {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 1}
    }

    categories-append       textproc

    description             a PHP extension for writing XML-RPC clients and servers

    long_description        ${description}

    depends_build-append    port:libiconv \
                            port:libxml2

    depends_lib-append      port:expat

    configure.args-append   --with-iconv-dir=${prefix}

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-libexpat-dir=${prefix} \
                                --with-libxml-dir=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-expat
    }

    pre-configure {
        configure.cppflags-append [exec ${prefix}/bin/xml2-config --cflags]
    }
}
}

subport ${php}-xsl {
    switch -- ${version} {
        5.2.17              {revision 1}
        5.3.29              {revision 1}
        5.4.45              {revision 1}
        5.5.38              {revision 1}
        5.6.40              {revision 1}
        7.0.33              {revision 1}
        7.1.33              {revision 1}
        7.2.34              {revision 1}
        7.3.33              {revision 1}
        7.4.33              {revision 0}
        8.0.30              {revision 0}
        8.1.34              {revision 0}
        8.2.32              {revision 0}
        8.3.32              {revision 0}
        8.4.23              {revision 0}
        8.5.8               {revision 0}
        8.6.0alpha2         {revision 0}
    }

    categories-append       textproc

    description             a PHP interface to libxslt, which implements the XSL \
                            standard and lets you perform XSL transformations

    long_description        ${description}

    depends_lib-append      port:libxslt

    if {[vercmp ${branch} < 7.4]} {
        configure.args-append   --with-xsl=${prefix}
    } else {
        depends_build-append    path:bin/pkg-config:pkgconfig

        configure.args-append   --with-xsl
    }

    configure.cppflags-append   -I${prefix}/include/${php}/php/ext/dom
}

}

# These variables are not only required by the subsequent code but also by
# preceding code in phase blocks.
set branch              ${subport_branch}
set major               [lindex [split ${branch} .] 0]
set php                 php[php.suffix_from_branch ${branch}]

if {${name} eq ${subport}} {
    PortGroup           stub 1.0

    version             ${branch}
    revision            0
    supported_archs     noarch
    platforms           any
    depends_run         port:${php}
} else {
    # Set an explicit distname so the default from the php portgroup doesn't get used.
    distname            ${name}-${version}
}

proc get_default_php_extensions {} {
    global php.extensions.zend php.rootname
    if {0 < [llength ${php.extensions.zend}]} {
        return
    }
    return ${php.rootname}
}

# Set up the php portgroup, for extension subports.
if {[is_extension_subport]} {
    default php.extensions {[get_default_php_extensions]}
    default homepage    https://www.php.net/${php.rootname}

    php.build_dirs
    set pdo no
    foreach extension [concat ${php.extensions} ${php.extensions.zend}] {
        if {[regexp {^pdo_} ${extension}]} {
            # The PDO extensions need the PDO headers.
            set pdo yes
            post-extract {
                file mkdir ${worksrcpath}/ext/${extension}/ext
                ln -s ${worksrcpath}/ext/pdo ${worksrcpath}/ext/${extension}/ext
            }
        }

        # Speed up extraction by extracting only the modules we're going to be building.
        extract.post_args-append ${worksrcdir}/ext/${extension}

        # Run phpize, configure, build and destroot in each extension's directory.
        php.build_dirs-append ${worksrcpath}/ext/${extension}
    }

    if {${pdo}} {
        # The PDO extensions need the PDO headers.
        extract.post_args-append ${worksrcdir}/ext/pdo
    }

    pre-configure {
        set php_version [exec ${php.config} --version 2>/dev/null]
        if {${version} ne ${php_version}} {
            ui_error "${subport} @${version} requires ${php} @${version} but you have ${php} @${php_version}."
            return -code error "incompatible ${php} installation"
        }
    }

    destroot.target     install-modules install-headers

    php.add_port_code
}
