# -*- 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
PortGroup           github 1.0
PortGroup           active_variants 1.1
PortGroup           boost 1.0
PortGroup           legacysupport 1.1

github.setup        osm2pgsql-dev osm2pgsql 1.11.0
# Change github.tarball_from to 'releases' or 'archive' next update
github.tarball_from tarball

categories          gis
maintainers         {vince @Veence} openmaintainer
description         ${subport} is OpenStreetMap data to PostgreSQL converter
long_description    ${subport} is a tool for loading OpenStreetMap data into \
                    a PostgreSQL / PostGIS database suitable for applications like \
                    rendering into a map, geocoding with Nominatim, or general analysis

license             GPL-2+

homepage            https://osm2pgsql.org

checksums           rmd160  196febf9742de2424851355145691906277c10ae \
                    sha256  2033bd397965ff9b77ed300eb7184d9dc08c9baa3d9e9ce73685396a53558bc8 \
                    size    2722128

# It uses include variant
compiler.cxx_standard 2017

# requires std::get that was introduced at 10.14
legacysupport.newest_darwin_requires_legacy 17
legacysupport.use_mp_libcxx yes

set port_libfmt     libfmt8
set opencv          opencv4

cmake.module_path-append \
                    ${prefix}/lib/${port_libfmt}/cmake
configure.args-append \
                    -DFMT_INCLUDE_DIR=${prefix}/include/${port_libfmt} \
                    -DOpenCV_DIR="${prefix}/libexec/${opencv}/cmake"

depends_lib-append  port:bzip2 \
                    port:CLI11 \
                    port:expat \
                    port:libosmium \
                    port:nlohmann-json \
                    port:${port_libfmt} \
                    port:${opencv} \
                    port:potrace \
                    port:proj9 \
                    port:protozero \
                    port:zlib

post-patch {
    # Remove bundled libraries
    file delete -force ${worksrcpath}/contrib
}

# Database variants (from the GDAL port)
set postgresql_suffixes {12 13 14 15 16}

set postgresql_variants {}
foreach suffix ${postgresql_suffixes} {
    lappend postgresql_variants postgresql${suffix}
}

foreach suffix ${postgresql_suffixes} {
    set vrt     postgresql${suffix}
    set index   [lsearch -exact ${postgresql_variants} ${vrt}]
    set conf    [lreplace ${postgresql_variants} ${index} ${index}]

    variant ${vrt} description "Use ${vrt}" conflicts {*}${conf} "
        depends_lib-append      port:${vrt} \
                                port:pg${suffix}-postgis3
        configure.args-append   -DPostgreSQL_INCLUDE_DIR=${prefix}/include/${vrt}
        configure.args-append   -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/${vrt}
        configure.args-append   -DPostgreSQL_LIBRARY=${prefix}/lib/${vrt}/libpq.dylib
    "
}

# postgresql default
set pgdefault "if {"

foreach suffix ${postgresql_suffixes} {
    set pgdefault "${pgdefault}!\[variant_isset postgresql${suffix}\] && "
}

set pgdefault [string range ${pgdefault} 0 end-4]
set pgdefault "${pgdefault}} { default_variants +postgresql${suffix} }"

eval ${pgdefault}

variant lua description {Build with support for Lua} {
    depends_lib-append port:lua
}

configure.args-append   "-DPROJ6_INCLUDE_DIR=${prefix}/lib/proj9/include"
configure.args-append   "-DPROJ_LIBRARY=${prefix}/lib/proj9/lib/libproj.dylib"
configure.args-append   "-DEXTERNAL_LIBOSMIUM=ON"
configure.args-append   "-DEXTERNAL_PROTOZERO=ON"
configure.args-append   "-DEXTERNAL_FMT=ON"

if {${subport} eq ${name}} {
    revision        2

    if {(![variant_isset lua])} {
        configure.args-append   "-DWITH_LUA=OFF"
    }
} else {
    livecheck.type  none
}

subport ${name}-lua {
    revision        2

    depends_lib-append port:lua

    description         ${description} with Lua support

    long_description    ${long_description} \
                        This sub-port includes support for Lua scripts.

    destroot.target-append \
                        install-gen

    post-destroot {
        file rename ${destroot}${prefix}/bin/${name} ${destroot}${prefix}/bin/${subport}
        file rename ${destroot}${prefix}/share/man/man1/${name}.1 ${destroot}${prefix}/share/man/man1/${subport}.1
        file rename ${destroot}${prefix}/share/${name} ${destroot}${prefix}/share/${subport}
    }
}
