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

name                msodbcsql
categories          databases
maintainers         {jann @roederja} {mathiesen.info:macintosh @BjarneDMat} openmaintainer
license             Restrictive

description         ODBC Driver for Microsoft(R) SQL Server(R).
long_description    ${description}

homepage            https://learn.microsoft.com/en-us/sql/connect/odbc/microsoft-odbc-driver-for-sql-server

depends_run         port:unixODBC \
                    port:openssl3

use_configure       no

set workpathdir     ""
set major           ""
set master_base     "https://download.microsoft.com/download"

proc set_defaults args {
    global  name workpath version
    upvar   workpathdir     s_wpd
    upvar   major           s_m
    set s_wpd   "${workpath}/${name}-${version}"
    set s_m     [lindex [split ${version} "."] 0]
}

# https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/system-requirements
if { ${os.major} >= 23 } {
    version             18.7.1.1
    revision            0
    epoch               1
    set_defaults
    supported_archs     x86_64 arm64
    master_sites        ${master_base}/28977c7a-6a67-4e76-aaf6-7d8516ef91d8/
    switch ${configure.build_arch} {
        x86_64 {
            distname                msodbcsql${major}-${version}-amd64
            checksums               rmd160  a3a4e9ac9f2c803ce56e79cd5cd640a39688af88 \
                                    sha256  4cc7d917aebc81c17be7e7c09c3c3cab63646970903a42555a8115878078d7e0 \
                                    size    870280
        }
        arm64 {
            distname                msodbcsql${major}-${version}-arm64
            checksums               rmd160  4941a88120941ac305208ad71ca8be8539a8b8c9 \
                                    sha256  2baaf65fa40ab6221f62ce759fb53b7ce00c2786beffdc9348c18a463e7ddf08 \
                                    size    779420
        }
    }
} elseif { ${os.major} >= 22 } {
    version             18.5.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64 arm64
    master_sites        ${master_base}/fae28b9a-d880-42fd-9b98-d779f0fdd77f/
    switch ${configure.build_arch} {
        x86_64 {
            distname                msodbcsql${major}-${version}-amd64
            checksums               rmd160  92ce1fadd39c44599c105249d8ccc3ea61d4333b \
                                    sha256  c0db485b006aed4a160526781b910a35ab6002a9336e8bafc4d314f291f979d4 \
                                    size    858198
        }
        arm64 {
            distname                msodbcsql${major}-${version}-arm64
            checksums               rmd160  aa6aca9de3941aee3d0bebc210b8b91c0370fecc \
                                    sha256  b92d00a71b1193bd18def562a0864325a197f2ffeb565e3862cf8db2474d17a0 \
                                    size    771221
        }
    }
} elseif { ${os.major} >= 20 } {
    version             18.4.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64 arm64
    master_sites        ${master_base}/7/6/d/76de322a-d860-4894-9945-f0cc5d6a45f8/
    switch ${configure.build_arch} {
        x86_64 {
            distname                msodbcsql${major}-${version}-amd64
            checksums               rmd160  92ce1fadd39c44599c105249d8ccc3ea61d4333b \
                                    sha256  c0db485b006aed4a160526781b910a35ab6002a9336e8bafc4d314f291f979d4 \
                                    size    858198
        }
        arm64 {
            distname                msodbcsql${major}-${version}-arm64
            checksums               rmd160  aa6aca9de3941aee3d0bebc210b8b91c0370fecc \
                                    sha256  b92d00a71b1193bd18def562a0864325a197f2ffeb565e3862cf8db2474d17a0 \
                                    size    771221
        }
    }
} elseif { ${os.major} >= 19 } {
    version             18.1.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64 arm64
    master_sites        ${master_base}/8/6/8/868e5fc4-7bfe-494d-8f9d-115cbcdb52ae/
    switch ${configure.build_arch} {
        x86_64 {
            distname                msodbcsql${major}-${version}-amd64
            checksums               rmd160  92ce1fadd39c44599c105249d8ccc3ea61d4333b \
                                    sha256  c0db485b006aed4a160526781b910a35ab6002a9336e8bafc4d314f291f979d4 \
                                    size    858198
        }
        arm64 {
            distname                msodbcsql${major}-${version}-arm64
            checksums               rmd160  aa6aca9de3941aee3d0bebc210b8b91c0370fecc \
                                    sha256  b92d00a71b1193bd18def562a0864325a197f2ffeb565e3862cf8db2474d17a0 \
                                    size    771221
        }
    }
} elseif { ${os.major} >= 18 } {
    version             17.8.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64 arm64
    master_sites        ${master_base}/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/
    switch ${configure.build_arch} {
        x86_64 {
            distname                msodbcsql${major}-${version}-amd64
            checksums               rmd160  92ce1fadd39c44599c105249d8ccc3ea61d4333b \
                                    sha256  c0db485b006aed4a160526781b910a35ab6002a9336e8bafc4d314f291f979d4 \
                                    size    858198
        }
        arm64 {
            distname                msodbcsql${major}-${version}-arm64
            checksums               rmd160  aa6aca9de3941aee3d0bebc210b8b91c0370fecc \
                                    sha256  b92d00a71b1193bd18def562a0864325a197f2ffeb565e3862cf8db2474d17a0 \
                                    size    771221
        }
    }
} elseif { ${os.major} >= 17 } {
    version             17.6.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64
    master_sites        ${master_base}/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/
    distname            msodbcsql${major}-${version}-amd64
    checksums           rmd160  92ce1fadd39c44599c105249d8ccc3ea61d4333b \
                        sha256  c0db485b006aed4a160526781b910a35ab6002a9336e8bafc4d314f291f979d4 \
                        size    858198
} elseif { ${os.major} >= 15 } {
    version             17.4.1.1
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64
    master_sites        ${master_base}/1/9/A/19AF548A-6DD3-4B48-88DC-724E9ABCEB9A/
    distname            msodbcsql${major}-${version}-amd64
    checksums           rmd160  56ea30fa0861d76d222f1428baa9d6e11a90fd84 \
                        sha256  0bfa5c3d2599e6a284add3d1d49b713e1fe2637433403135a7e931518201fbb5 \
                        size    843627
} else {
    version             13.1.9.2
    revision            0
    epoch               0
    set_defaults
    supported_archs     x86_64
    master_sites        ${master_base}/4/9/5/495639C0-79E4-45A7-B65A-B264071C3D9A/
    distname            msodbcsql${major}-${version}-amd64
    checksums           rmd160  c3f5763dda0e8b6b65fe79a043906be1c504afd1 \
                        sha256  06f4f45bbf16438d681227c6eeada89cbf03a78c61338bdc5eda51ab0e314e5d \
                        size    906899
}

switch ${configure.build_arch} {
    x86_64 {
        set old_prefix  "/usr/local"
    }
    arm64 {
        set old_prefix  "/opt/homebrew"
    }
}

patch {
    reinplace "s|${old_prefix}|${prefix}|g"    ${workpathdir}/odbcinst.ini
}

build {
    system "install_name_tool -change ${old_prefix}/lib/libodbcinst.2.dylib ${prefix}/lib/libodbcinst.2.dylib ${workpathdir}/lib/libmsodbcsql.${major}.dylib"
    system "install_name_tool -change ${old_prefix}/opt/openssl/lib/libcrypto.1.0.0.dylib ${prefix}/lib/openssl-3/libcrypto.3.dylib ${workpathdir}/lib/libmsodbcsql.${major}.dylib"
    system "install_name_tool -change ${old_prefix}/opt/openssl/lib/libssl.1.0.0.dylib ${prefix}/lib/openssl-3/libssl.3.dylib ${workpathdir}/lib/libmsodbcsql.${major}.dylib"
    system "install_name_tool -id ${prefix}/lib/libmsodbcsql.${major}.dylib ${workpathdir}/lib/libmsodbcsql.${major}.dylib"
}

destroot {
    xinstall -m 444 ${workpathdir}/lib/libmsodbcsql.${major}.dylib ${destroot}${prefix}/lib/libmsodbcsql.${major}.dylib
    xinstall -d ${destroot}${prefix}/share/msodbcsql${major}/resources/en_US
    xinstall -m 444 ${workpathdir}/share/msodbcsql${major}/resources/en_US/msodbcsqlr${major}.rll ${destroot}${prefix}/share/msodbcsql${major}/resources/en_US/msodbcsqlr${major}.rll
    xinstall -m 644 ${workpathdir}/odbcinst.ini ${destroot}${prefix}/share/msodbcsql${major}/resources/odbcinst.ini
    xinstall -m 644 ${workpathdir}/include/msodbcsql${major}/msodbcsql.h ${destroot}${prefix}/include/msodbcsql.h
    xinstall -d ${destroot}${prefix}/share/doc/msodbcsql${major}
    xinstall -m 644 -W ${workpathdir}/share/doc/msodbcsql${major} LICENSE.txt RELEASE_NOTES ${destroot}${prefix}/share/doc/msodbcsql${major}
}

post-activate {
    system "odbcinst -u -d -n \"ODBC Driver ${major} for SQL Server\""
    system "odbcinst -i -d -f ${prefix}/share/msodbcsql${major}/resources/odbcinst.ini"
}

pre-deactivate {
    system "odbcinst -u -d -n \"ODBC Driver ${major} for SQL Server\""
}

livecheck.url       https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
livecheck.regex     "Release number: (${major}(?:\\.\\d+)+)"
