# -*- 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           compilers 1.0
PortGroup           compiler_blacklist_versions 1.0
PortGroup           muniversal 1.0
PortGroup           legacysupport 1.1

name                postgresql17
version             17.4
revision            0

categories          databases
maintainers         {gmail.com:davidgilman1 @dgilman} \
                    {@barracuda156 gmail.com:vital.had} \
                    openmaintainer
license             Permissive
description         The most advanced open-source database available anywhere.
long_description    PostgreSQL is Object-Relational Database Management System.\
                    It supports almost all SQL constructs, including transactions, \
                    subselects, and user-defined types and functions. Write-ahead \
                    logging means increased performance while retaining data \
                    integrity.
conflicts           postgresql96-doc postgresql10-doc postgresql11-doc postgresql12-doc \
                    postgresql13-doc postgresql14-doc postgresql15-doc

homepage            https://www.postgresql.org/
master_sites        postgresql:source/v${version}/
distname            postgresql-${version}

checksums           rmd160  693312ec10edb2c21f565e736fef0c1e0529800b \
                    sha256  c4605b73fea11963406699f949b966e5d173a7ee0ccaef8938dec0ca8a995fe7 \
                    size    21519810

use_bzip2           yes

# https://trac.macports.org/ticket/66060
# https://trac.macports.org/ticket/67365
# https://postgrespro.ru/list/thread-id/2551610
# The problem is specific to PPC: https://github.com/macports/macports-ports/pull/16460
platform darwin powerpc {
    patchfiles-append  patch-icu.diff \
                       patch-fix-ppc-asm.diff
}

depends_lib         port:readline path:lib/libssl.dylib:openssl port:zlib \
                    port:libxml2 port:libxslt \
                    path:lib/pkgconfig/icu-uc.pc:icu \
                    path:lib/libgssapi_krb5.dylib:kerberos5 \
                    path:lib/libzstd.dylib:zstd \
                    path:lib/liblz4.dylib:lz4
depends_build       port:bison port:pkgconfig \
                    port:docbook-xml-4.5 port:docbook-xsl-nons \
                    path:bin/perl:perl5
depends_run         port:postgresql_select-17 \
                    path:share/curl/curl-ca-bundle.crt:certsync

legacysupport.newest_darwin_requires_legacy \
                    15
worksrcdir          postgresql-${version}

if {${universal_possible} && [variant_isset universal]} {
    set zicpath     ${worksrcpath}-${build_arch}/src/timezone/zic
} else {
    set zicpath     ${worksrcpath}/src/timezone/zic
}
set libdir          ${prefix}/lib/${name}
set mandir          ${prefix}/share/doc/${name}/man
configure.args      PG_SYSROOT=disabled \
                    ZIC=${zicpath} \
                    --sysconfdir=${prefix}/etc/${name} \
                    --bindir=${libdir}/bin \
                    --libdir=${libdir} \
                    --includedir=${prefix}/include/${name} \
                    --datadir=${prefix}/share/${name} \
                    --docdir=${prefix}/share/doc/${name} \
                    --mandir=${mandir} \
                    --with-includes=${prefix}/include \
                    --with-libraries=${prefix}/lib \
                    --with-openssl \
                    --with-bonjour \
                    --with-readline \
                    --with-zlib \
                    --with-lz4 \
                    --with-zstd \
                    --with-libxml \
                    --with-libxslt \
                    --with-gssapi \
                    --with-uuid=e2fs \
                    --with-icu

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

# building psql with clang from Xcode prior to 4.4 causes segfault on query; see #31717
compiler.blacklist-append {clang < 421}
compilers.choose          cc cxx
compilers.setup           -gcc -fortran -clang33 -clang34 -clang37 -clang90
notes "To use the postgresql server as a startup item install the ${name}-server port."

if {${universal_possible} && [variant_isset universal]} {
    configure.cflags-append    -DAC_APPLE_UNIVERSAL_BUILD
}

build.type          gnu
build.target        world

destroot.target     install-world

test.run            yes
test.target         check

# remember to change livecheck with first proper release
livecheck.type      regex
#livecheck.regex    (17\\.\[.0-9\]*\[a-z\]+\[0-9\])
#livecheck.regex    (17\[a-z\]+\[0-9\])
livecheck.regex    alt="v(17\\.\[.0-9\]+)"
livecheck.url       ${homepage}/ftp/source/

post-destroot {
    ln -s ${libdir}/bin/psql ${destroot}${prefix}/bin/psql17

    reinplace -E "s#^CFLAGS =#CFLAGS +=#g" \
        ${destroot}${prefix}/lib/${name}/pgxs/src/Makefile.global
    reinplace -E "s#^MKDIR_P.*#MKDIR_P = /bin/mkdir -p#g" \
        ${destroot}${prefix}/lib/${name}/pgxs/src/Makefile.global

    set gzip [findBinary gzip ${portutil::autoconf::gzip_path}]
    foreach manpage [glob -type f ${destroot}${mandir}/man\[1-9\]/*] {
        system "$gzip -9vf ${manpage}"
    }
}

if {!${universal_possible} || ![variant_isset universal]} {
    post-destroot {
        reinplace -E "s#-arch\[\[:space:\]\]+\[\[:alnum:\]_\]+##g" \
            ${destroot}${prefix}/lib/${name}/pgxs/src/Makefile.global
    }
} else {
    merger-post-destroot {
        foreach arch ${configure.universal_archs} {
            reinplace -E "s#-arch\[\[:space:\]\]+\[\[:alnum:\]_\]+##g" \
                ${destroot}-${arch}${prefix}/lib/${name}/pgxs/src/Makefile.global

            reinplace -E "s#${worksrcpath}-${arch}#${worksrcpath}#g" \
                ${destroot}-${arch}${prefix}/lib/${name}/pgxs/src/Makefile.global
        }
    }
}

variant python3 description {add support for python 3.x} {
    depends_lib-append      port:python312
    configure.args-append   --with-python
    configure.python        ${prefix}/bin/python3.12
}

variant perl description {add Perl support} {
    depends_lib-append      bin:perl:perl5
    configure.args-append   --with-perl
}

variant tcl description {add Tcl support} {
    depends_lib-append      port:tcl
    configure.args-append   --with-tcl --with-tclconfig=${prefix}/lib
    configure.env-append    TCLSH=${prefix}/bin/tclsh
}

variant llvm description {add support for JIT compilation} {
    set llvm_ver 19

    foreach clang ${compilers.clang_variants} {
        if { [variant_exists ${clang}] && [variant_isset ${clang}] } {
            set clang_port_ver [string range ${clang} 5 6]
            set llvm_ver ${clang_port_ver}
        }
    }

    depends_lib-append      port:llvm-${llvm_ver}
    configure.args-append   --with-llvm
    configure.env-append    LLVM_CONFIG=${prefix}/libexec/llvm-${llvm_ver}/bin/llvm-config \
                            CLANG=${configure.cc}
}