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

name                swarm
version             2.4.1
revision            29
categories          science
maintainers         nomaintainer
license             GPL-2
description         Swarm is a platform for agent-based models (ABMs)
long_description    ${description}
homepage            http://www.swarm.org
master_sites        https://download.savannah.gnu.org/releases/swarm/src/swarm/

checksums           rmd160  f76274f48509ceb4d346c9724f6fd9070e42c6e2 \
                    sha256  04b78811235722c2da199a538ac4465aaf4030f1aaf8554b94785fc1482d2c95 \
                    size    4135271

# Fails with openjdk8 and Xcode gcc:
# error: expected '=', ',', ';', 'asm' or '__attribute__' before 'jsize'
# But gcc14 cannot build this due to multiple issues.
# Undefined symbols for architecture ppc: "___objc_write_class" etc.
set jdk_v           7-bootstrap
set java_home       /Library/Java/JavaVirtualMachines/openjdk${jdk_v}

depends_lib         port:blt \
                    port:hdf5 \
                    port:libffi \
                    port:libpng \
                    port:openjdk${jdk_v} \
                    port:tcl \
                    port:tk \
                    port:xpm \
                    port:zlib

# https://savannah.nongnu.org/bugs/?41491
# src/defobj/make-h2x needs GNU sed; causes build failure if only BSD sed is
# available. The path to gsed is baked into ${prefix}/bin/libtool-swarm.
depends_lib-append  port:gsed

depends_build-append \
                    port:autoconf \
                    port:gperf \
                    port:m4

# _protocol.el:108:2: Error: Wrong type argument: cl-struct-name-p, function, name
conflicts_build     emacs emacs-devel

universal_variant   no

# make[3]: *** No rule to make target `defobj_stubs.o', needed by `predispatch.c'.
use_parallel_build  no

patchfiles          patch-includes.diff patch-libpng-1.5.diff patch-Makefile.in

post-patch {
    # Notice, -fnested-functions can only be used with Xcode gcc:
    reinplace {s:-fgnu-runtime:-DH5_USE_16_API -fnested-functions -fgnu-runtime:g} \
        ${worksrcpath}/configure \
        ${worksrcpath}/libobjc/configure
}

# https://savannah.nongnu.org/bugs/?42866
# sendmsg.c:200:10: error: use of unknown builtin '__builtin_apply' [-Wimplicit-function-declaration]
# sendmsg.c:507:10: error: use of unknown builtin '__builtin_apply_args' [-Wimplicit-function-declaration]
# sendmsg.c:510:5: error: use of unknown builtin '__builtin_return' [-Wimplicit-function-declaration]
# Nested functions
# Buggy C++
compiler.blacklist  *clang*

pre-configure {
    configure.args-append \
                    --with-ffidir=${prefix} \
                    --with-jdkdir=${java_home}
}

configure.args-append \
                    --with-tcl=${prefix}/lib \
                    --with-tk=${prefix}/lib \
                    --with-x \
                    --x-include=${prefix}/include \
                    --x-lib=${prefix}/lib

# Ensure MacPorts grep is not used, even if it is already installed, because
# its path would be baked into ${prefix}/bin/libtool-swarm.
configure.args-append \
                    ac_cv_path_GREP=/usr/bin/grep

configure.env-append \
                    JAVALIBS=-L${java_home}/lib

# Fix build with Tcl 8.6+
configure.cppflags-append \
                    -DUSE_INTERP_RESULT

platform darwin {
    # jni.h:45:10: fatal error: jni_md.h: No such file or directory
    configure.cppflags-append \
                    -I${java_home}/include/darwin
}

# sed: RE error: illegal byte sequence
build.env           LANG=C

post-destroot {
    # https://trac.macports.org/ticket/34232
    delete ${destroot}${prefix}/include
}

livecheck.type      regex
livecheck.url       [lindex ${master_sites} 0]
livecheck.regex     ${name}-(\[0-9.\]+)${extract.suffix}
