# -*- 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               makefile 1.0
PortGroup               compiler_blacklist_versions 1.0
PortGroup               conflicts_build 1.0
PortGroup               codeberg 1.0

name                    smake
codeberg.setup          schilytools schilytools 2024-03-21
version                 1.7-${codeberg.version}
revision                0
categories              devel
maintainers             {hotmail.com:amtor @RobK88} \
                        openmaintainer
license                 CDDL
description             A highly portable make program with automake features
long_description        Smake is a highly portable make program with automake \
                        features. It is currently mainly targeted to be used \
                        with the Schily SING makefile system.

homepage                https://codeberg.org/schilytools/schilytools
master_sites            ${homepage}/archive/
checksums               rmd160  e937719c3a68efac9f6aacfaaaed4cb1775805e5 \
                        sha256  4d66bf35a5bc2927248fac82266b56514fde07c1acda66f25b9c42ccff560a02 \
                        size    5892015

post-extract {
    copy ${filespath}/Gmake.smake ${worksrcpath}
}

patchfiles-append       001-Makefile-Patch.diff

post-patch {
    reinplace -locale C "s|/opt/schily|${prefix}|g" \
    ${worksrcpath}/DEFAULTS/Defaults.darwin \
    ${worksrcpath}/DEFAULTS/Defaults.mac-os10 \
    ${worksrcpath}/DEFAULTS_ENG/Defaults.darwin \
    ${worksrcpath}/DEFAULTS_ENG/Defaults.mac-os10 \
    ${worksrcpath}/libfind/find.c \
    ${worksrcpath}/libfind/find_main.c \
    ${worksrcpath}/librscg/scsi-remote.c \
    ${worksrcpath}/patch/tests/random/cmptest.sh \
    ${worksrcpath}/patch/tests/random/gentest.sh \
    ${worksrcpath}/smake/job.c \
    ${worksrcpath}/smake/make.c \
    ${worksrcpath}/smake/smake.1 \
    ${worksrcpath}/TEMPLATES/Defaults.gcc \
    ${worksrcpath}/TEMPLATES/Defaults.clang \
    ${worksrcpath}/TEMPLATES/Defaults.xcc
}

proc port_conflict_check {p_port_name p_conflict_ver_min p_conflict_ver_max} {
    ui_info "Checking for conflict against port: ${p_port_name}"
    if { ![catch {set port_conflict_ver_info [lindex [registry_active ${p_port_name}] 0]}] } {
        set port_conflict_ver [lindex ${port_conflict_ver_info} 1]_[lindex ${port_conflict_ver_info} 2]
        ui_info "${p_port_name} active version: ${port_conflict_ver}"

        if { [vercmp ${port_conflict_ver} ${p_conflict_ver_min}] >= 0
            && [vercmp ${port_conflict_ver} ${p_conflict_ver_max}] <= 0 } {

            ui_info "${p_port_name} conflicts; declare build conflict"
            conflicts_build-append \
                ${p_port_name}
        }
    }
}

port_conflict_check     cdrtools 0.0 3.01_1

# https://trac.macports.org/ticket/31616
compiler.blacklist-append\
                        llvm-gcc-4.2 macports-llvm-gcc-4.2 {clang < 300}

configure.ldflags-append -lintl

pre-build {
    if { $universal_possible && [variant_isset universal] } {
#       Big Sur and Later
        if { ${os.platform} eq "darwin" && ${os.major} >= 20 } {
            platform i386 {
                build.args-append   COPTX="-arch x86_64 -arch arm64" \
                                    C++OPTX="-arch x86_64 -arch arm64" \
                                    LDOPTX="-arch x86_64 -arch arm64"
            }
            platform arm {
                build.args-append   COPTX="-arch x86_64 -arch arm64" \
                                    C++OPTX="-arch x86_64 -arch arm64" \
                                    LDOPTX="-arch x86_64 -arch arm64"
            }
#       Lion to Catalina
        } elseif { ${os.platform} eq "darwin" && ${os.major} >=11 } {
            platform i386 {
                build.args-append   COPTX="-arch x86_64 -arch i386" \
                                    C++OPTX="-arch x86_64 -arch i386" \
                                    LDOPTX="-arch x86_64 -arch i386"
            }
#       Snow Leopard
        } elseif { ${os.platform} eq "darwin" && ${os.major} ==10 } {
            platform i386 {
                build.args-append   COPTX="-arch x86_64 -arch i386" \
                                    C++OPTX="-arch x86_64 -arch i386" \
                                    LDOPTX="-arch x86_64 -arch i386"
            }
#           Note: Snow Leopard can only run 32bit ppc apps via Rosetta
            platform powerpc {
                build.args-append   COPTX="-arch ppc -arch i386" \
                                    C++OPTX="-arch ppc -arch i386" \
                                    LDOPTX="-arch ppc -arch i386"
            }
#       Tiger and Leopard
        } elseif { ${os.platform} eq "darwin" && ${os.major} >= 8 } {
#           Note: One could change ppc to ppc64 if so desired
            platform i386 {
                build.args-append   COPTX="-arch ppc -arch i386" \
                                    C++OPTX="-arch ppc -arch i386" \
                                    LDOPTX="-arch ppc -arch i386"
            }
#           Note: One could change ppc to ppc64 if so desired
            platform powerpc {
                build.args-append   COPTX="-arch ppc -arch i386" \
                                    C++OPTX="-arch ppc -arch i386" \
                                    LDOPTX="-arch ppc -arch i386"
            }
#       Panther and earlier
        } else {
            platform powerpc {
                build.args-append   COPTX="-arch ppc -arch ppc64" \
                                    C++OPTX="-arch ppc -arch ppc64" \
                                    LDOPTX="-arch ppc -arch ppc64"
            }
        }
    }
}

depends_build-append    port:gmake \
                        port:gettext
                        
depends_lib-append      port:gettext-runtime

build.type              gnu
                        
build.args-append       INS_BASE="${destroot}${prefix}" \
                        INS_RBASE="${destroot}${prefix}" \
                        DEFOSINCDIRS="${prefix}/include" \
                        CC_OPT=${configure.optflags}

destroot.destdir        INS_BASE="${destroot}${prefix}" \
                        INS_RBASE="${destroot}${prefix}" \
                        MANDIR=man \
                        DEFINSUSR=${install.user} \
                        DEFINSGRP=${install.group}

# NOTE:  This port first builds a bootstrapped version of smake using gmake.
#        The final version of smake (and its static associated libraries) are built using
#        the boostrapped version of smake which does NOT support parallel building.
#        i.e.  the j flag is ignored by the boostrapped version of smake and
#              the final version of smake.
use_parallel_build      no

destroot {
    xinstall -m 0755    {*}[glob ${worksrcpath}/smake/OBJ/*/smake] \
                        ${destroot}${prefix}/bin

    xinstall -m 0644    {*}[glob ${worksrcpath}/smake/OBJ/*/*/smake.1] \
                        ${destroot}${prefix}/share/man/man1

    xinstall -m 0644    {*}[glob ${worksrcpath}/man/man5/OBJ/*/*/makefiles.5] \
                        {*}[glob ${worksrcpath}/man/man5/OBJ/*/*/makerules.5] \
                        ${destroot}${prefix}/share/man/man5
}