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

name                        soci
version                     4.1.2
revision                    0
license                     Boost-1
categories                  databases devel
maintainers                 rmh.de:g.lorenz openmaintainer

description                 SOCI - The C++ Database Access Library

long_description            SOCI is a database access library for C++ that makes the illusion of \
                            embedding SQL queries in the regular C++ code, staying entirely within \
                            the Standard C++. The idea is to provide C++ programmers a way to \
                            access SQL databases in the most natural and intuitive way. If you \
                            find existing libraries too difficult for your needs or just \
                            distracting, SOCI can be a good alternative.

homepage                    https://soci.sourceforge.net
master_sites                sourceforge:project/soci/soci/soci-${version}

checksums                   rmd160  401f4f25000fd06d4fa9e374cf5290daf123acd6 \
                            sha256  b79afe73db241f762ddb611fe11184cbf6da44ba99f90721515daa2f978ff38e \
                            size    4380345

# https://github.com/SOCI/soci/issues/984
compiler.blacklist-append   {clang > 1400} {macports-clang-1[5-9]}
compiler.cxx_standard       2014

configure.args-append       -DWITH_BOOST=OFF \
                            -DSOCI_DB2=OFF \
                            -DSOCI_FIREBIRD=OFF \
                            -DSOCI_MYSQL=OFF \
                            -DSOCI_ODBC=OFF \
                            -DSOCI_ORACLE=OFF \
                            -DSOCI_POSTGRESQL=OFF \
                            -DSOCI_SQLITE3=OFF

set pgsql_v                 16

default_variants            +boost

variant boost description "Build with Boost integration" {
    PortGroup                   boost 1.0

    boost.version               1.81

    configure.args-replace      -DWITH_BOOST=OFF -DWITH_BOOST=ON
}

variant mysql5 description "Build MySQL 5 backend" {
    depends_lib-append          port:mysql5
    configure.args-delete       -DSOCI_MYSQL=OFF
    configure.args-append       -DMYSQL_INCLUDE_DIR=${prefix}/include/mysql5/mysql
    configure.args-append       -DMYSQL_LIBRARY=${prefix}/lib/mysql5/mysql/libmysqlclient_r.dylib
}

# FIXME: this variant does not build: https://github.com/SOCI/soci/issues/1306
# With UnixODBC tests fail to link:
# Undefined symbols for architecture ppc: "_backEnd", "_connectString"
# With libiodbc build fails on static assert:
# src/backends/odbc/vector-use-type.cpp:253:44: error: static assertion failed: unexpected SQLWCHAR size
# note: the comparison reduces to '(4 == 2)'
variant odbc description "Build ODBC backend" {
    depends_lib-append          port:libiodbc
    configure.args-delete       -DSOCI_ODBC=OFF
}

variant oracle description "Build Oracle backend" {
    depends_lib-append          port:oracle-instantclient
    configure.args-delete       -DSOCI_ORACLE=OFF
    configure.env-append        ORACLE_HOME=${prefix}/lib/oracle
}

variant postgresql16 \
        description "Build PostgreSQL ${pgsql_v} backend, using MacPorts postgresql${pgsql_v} port" {
    depends_lib-append          port:postgresql${pgsql_v}
    configure.args-append       -DPG_CONFIG=${prefix}/lib/postgresql${pgsql_v}/bin/pg_config
    configure.args-append       -DPOSTGRESQL_INCLUDE_DIR=${prefix}/include/postgresql${pgsql_v}
    configure.args-append       -DPOSTGRESQL_LIBRARY=${prefix}/lib/postgresql${pgsql_v}/libpq.dylib
    configure.args-delete       -DSOCI_POSTGRESQL=OFF
}

variant sqlite3 description "Build SQLite 3 backend, using MacPorts sqlite3 port" {
    depends_lib-append          port:sqlite3
    configure.args-delete       -DSOCI_SQLITE3=OFF
}

livecheck.regex                 /${name}-(\[0-9.\]+)${extract.suffix}
