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

name                sqlite3
# don't forget to update the checksums for sqlite3-tools when updating sqlite3
version             3.49.0
revision            1
categories          databases
license             public-domain

maintainers         {mps @Schamschula} openmaintainer

description         an embedded SQL database engine

long_description    SQLite3 is an SQL database engine in a C library. \
                    Programs that link the SQLite3 library can have SQL \
                    database access without running a separate RDBMS \
                    process. The distribution comes with a standalone \
                    command-line access program (sqlite3) that can be used \
                    to administer an SQLite3 database and which serves as \
                    an example of how to use the SQLite3 library.

homepage            https://www.sqlite.org/
master_sites        ${homepage}2025

set padded_ver      [string range [subst [regsub -all {\.([0-9]+)} "${version}.0.0" {[format %02d \1]}]] 0 6]
distname            sqlite-autoconf-${padded_ver}

checksums           rmd160  c995ca11de72db8d55fdccda0a6b0cf7d9ed766f \
                    sha256  4d8bfa0b55e36951f6e5a9fb8c99f3b58990ab785c57b4f84f37d163a0672759 \
                    size    3222148

depends_lib         port:libedit \
                    port:ncurses \
                    port:zlib

if {${os.platform} eq "darwin" && ${os.major} < 11 && ${cxx_stdlib} eq "libc++"} {
    # This port is in the dependency chain for clang 3.7 and later
    clang_dependency.extra_versions 3.7
}

if {${subport} ne "${name}-tools"} {
    configure.checks.implicit_function_declaration.whitelist-append strchr

    patchfiles      patch-sqlite3_fix-atomic-clang-4.diff
} else {
    patchfiles      patch-sqlite3-tools_fix-atomic-clang-4.diff
}

configure.args      --enable-threadsafe \
                    --disable-readline \
                    --enable-editline \
                    AWK=/usr/bin/awk

build.type          gnu

livecheck.type      regex
livecheck.url       https://www.sqlite.org/news.html
livecheck.regex     (3(?:\\.\[0-9\]+)+)

platform darwin 8 {
    # See http://trac.macports.org/ticket/32930 for why this is needed.
    configure.cppflags-append -DSQLITE_WITHOUT_ZONEMALLOC
}

if {${subport} eq ${name}} {
    post-patch {
        # See https://sqlite.org/forum/forumpost/566126d8c7 this should not
        # be needed for future versions
        file copy -force ${filespath}/auto.def ${worksrcpath}
        file copy -force ${filespath}/Makefile.in ${worksrcpath}
        file copy -force ${filespath}/sqlite-config.tcl ${worksrcpath}/autosetup
    }

    # search in worksrcpath for sqlite3.h first -- don't pick up an installed one!
    configure.cppflags-prepend  -DSQLITE_DISABLE_INTRINSIC \
                                -DSQLITE_ENABLE_COLUMN_METADATA \
                                -DSQLITE_ENABLE_FTS3_PARENTHESIS \
                                -DSQLITE_ENABLE_FTS4 \
                                -DSQLITE_ENABLE_FTS5 \
                                -DSQLITE_ENABLE_JSON1 \
                                -DSQLITE_ENABLE_RTREE \
                                -DSQLITE_SECURE_DELETE \
                                -DSQLITE_ENABLE_STAT4 \
                                -DSQLITE_ENABLE_UNLOCK_NOTIFY \
                                -DSQLITE_SOUNDEX \
                                -I${worksrcpath}

    post-destroot {
        xinstall -m 644 ${worksrcpath}/${name}.1 ${destroot}${prefix}/share/man/man1
        system "install_name_tool -id \"${prefix}/lib/libsqlite3.dylib\" \"${destroot}${prefix}/lib/libsqlite3.${version}.dylib\""
    }
}

subport ${name}-tcl {
    depends_lib     port:tcl

    configure.dir   ${worksrcpath}/tea
    build.dir       ${configure.dir}
    patch.dir       ${configure.dir}

    configure.args  --exec-prefix=${prefix} \
                    --with-tcl=${prefix}/lib \
                    --with-tclinclude=${prefix}/include

    configure.cppflags-prepend  -I${worksrcpath}

    patchfiles      patch-tea-generic-tclsqlite3.c.diff

    platform darwin {
        if {${os.major} < 11} {
            patchfiles-append \
                        patch-tea-configure.diff
        }
    }
}

subport ${name}-tools {
    revision                0

    distname                sqlite-src-${padded_ver}

    description             A bundle of command-line tools for managing SQLite \
                            database files
    long_description        {*}${description}, including the sqldiff program and the \
                            sqlite3_analyzer program.

    checksums       rmd160  2a589a057c28bbafbd049d622beff582cbb90807 \
                    sha256  bec0262d5b165b133d6f3bdb4339c0610f4ac3d50dee53e8ad148ece54a129d0 \
                    size    14371111

    use_zip                 yes
    depends_lib             port:tcl \
                            port:zlib

    configure.args          --with-tcl=${prefix}/lib
    build.target            sqldiff sqlite3_analyzer
    destroot {
        xinstall -m 755 ${worksrcpath}/sqldiff ${destroot}${prefix}/bin
        xinstall -m 755 ${worksrcpath}/sqlite3_analyzer ${destroot}${prefix}/bin
    }
}
