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

name                valgrind
categories          devel
platforms           darwin
supported_archs     i386 x86_64
license             GPL-2
maintainers         nomaintainer

description         A powerful open-source memory debugger
long_description \
    Valgrind is a powerful open-source memory debugger. When valgrind is \
    attached to a program, it intercepts calls to malloc/new/free/delete and \
    all memory operations are checked for invalid read or write.

homepage            http://valgrind.org
master_sites        https://sourceware.org/pub/valgrind/

# older clangs identify as applellvm-4.2 and are rejected
# https://trac.macports.org/ticket/53525
compiler.blacklist-append \
                    { clang < 426 }

# priv/guest_s390_toIR.c:2056:39: error: invalid suffix "b00010000" on integer constant
compiler.blacklist-append \
                    llvm-gcc-4.2

compilers.choose    cc cxx
mpi.setup           -gcc44 -gcc45 -gcc46

depends_build       bin:perl:perl5
# Ignore trace reports about boost, Qt and OpenMP
# as they are only used for tests

configure.args      --without-mpicc

if {${build_arch} eq "i386"} {
    configure.args-append --enable-only32bit
} elseif {${build_arch} eq "x86_64"} {
    configure.args-append --enable-only64bit
}

# valgrind sets up -arch by itself, adding our own interferes with the build
configure.cc_archflags {}
configure.ld_archflags {}

variant universal {
    configure.args-delete --enable-only32bit --enable-only64bit
    configure.universal_cflags {}
    configure.universal_cxxflags {}
    configure.universal_ldflags {}

    pre-configure {
        if {${build_arch} eq "i386"} {
            # See #25684 and https://bugs.kde.org/show_bug.cgi?id=243362
            ui_error "${subport} does not build +universal on a 32-bit only CPU!"
            return -code error "unsupported CPU"
        }
    }
}

pre-patch {
    if {[gcc_variant_isset]} {
        patchfiles-append patch-gcc.diff
    }
}

pre-configure {
    if {[mpi_variant_isset]} {
        configure.args-delete --without-mpicc
        configure.args-append --with-mpicc=${mpi.cc}
    }
}

if {$subport eq $name} {
    version             3.16.1
    revision            0
    conflicts           valgrind-devel valgrind-macos-devel

    checksums           rmd160  f06068b1f2aa9f6c2377816a0af809459da2c5a8 \
                        sha256  c91f3a2f7b02db0f3bc99479861656154d241d2fdb265614ba918cc6720a33ca \
                        size    16262776

    use_bzip2           yes

    # Avoid conflict of faq.html and FAQ.html, #30541
    extract.post_args-append --exclude=${distname}/docs/html/FAQ.html

    pre-fetch {
        if {${os.platform} eq "darwin" && (${os.major} < 9 || ${os.major} > 17)} {
            ui_error "${subport} @${version} is only compatible with macOS versions from 10.5 up to 10.13."
            ui_error "Consider installing valgrind-macos-devel on newer macOS systems."
            return -code error "incompatible macOS version"
        }
    }

    livecheck.type      regex
    livecheck.url       ${homepage}
    livecheck.regex     ${name}-(\\d(?:\\.\\d+)+)
}

subport valgrind-devel {
    epoch           1
    set date        2020-12-17
    version         3.16.1-r${date}
    conflicts       valgrind valgrind-macos-devel

    fetch.type      git
    git.url         http://repo.or.cz/valgrind.git
    git.branch      04cdc29b007594a0e58ffef0c9dd87df3ea595ea

    pre-fetch {
        if {${os.platform} eq "darwin" && ${os.major} < 9 } {
            ui_error "${subport} @${version} is only compatible with macOS versions from 10.5 up."
            return -code error "incompatible macOS version"
        }

        if {${os.platform} eq "darwin" && ${os.major} > 17 } {
            ui_error "${subport} @${version} is not presently compatible with macOS Mojave or newer"
            ui_error "Consider installing valgrind-macos-devel on newer macOS systems."
            return -code error "incompatible macOS version"
        }
    }

    use_autoreconf      yes

    livecheck.type none
}

subport valgrind-macos-devel {
    set date        2023-10-29
    version         3.22.0-r${date}
    conflicts       valgrind valgrind-devel

    fetch.type      git
    git.url         https://github.com/LouisBrunner/valgrind-macos.git
    git.branch      d14be1d4f76466560ed6515d0f314f0925522456

    description     A powerful memory debugger with latest macOS support

    use_autoreconf  yes

    livecheck.type  none
}
