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

# TODO: Improve atomics by using libkern/OSAtomics.h
#       https://bugs.freedesktop.org/show_bug.cgi?id=67795

PortSystem          1.0
PortGroup           active_variants 1.1
PortGroup           meson 1.0
PortGroup           perl5 1.0

name                pulseaudio
version             17.0
revision            4
license             {BSD LGPL-2.1+ MIT}
categories          audio
maintainers         {ionic @Ionic} openmaintainer
description         A sound server for POSIX OSes

long_description    PulseAudio is a sound server for POSIX OSes, meaning that it is a proxy \
                    for your sound applications. It allows you to do advanced operations \
                    on your sound data as it passes between your application and your hardware. \
                    Things like transferring the audio to a different machine, changing \
                    the sample format or channel count and mixing several sounds into one are \
                    easily achieved using a sound server.

homepage            https://www.freedesktop.org/wiki/Software/PulseAudio/
master_sites        https://www.freedesktop.org/software/${name}/releases/

use_xz              yes

checksums           rmd160  091da3b1d4d7e4ef464cfc53969995d408985bae \
                    sha256  053794d6671a3e397d849e478a80b82a63cb9d8ca296bd35b73317bb5ceb87b5 \
                    size    1566556

perl5.branches      5.34

depends_build-append \
                    port:gettext \
                    port:m4 \
                    port:p${perl5.major}-xml-parser \
                    path:bin/pkg-config:pkgconfig

depends_lib-append  port:dbus \
                    port:fftw-3-single \
                    port:gdbm \
                    port:gettext-runtime \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 \
                    port:libiconv \
                    port:libsndfile \
                    port:libtool \
                    port:orc \
                    port:soxr \
                    port:speexdsp \
                    port:avahi \
                    path:lib/libssl.dylib:openssl

# configure falls back to libatomic_ops as last resort
# if no linux kernel support and inline asm snippet fails to build
# likely to fail on Leopard and older
# https://trac.macports.org/ticket/42052

platform darwin {
    if {${os.major} < 10} {
        depends_lib-append  port:libatomic_ops
    }
}

# DO NOT USE! Maintainer-only helper. DO NOT USE!
#configure.cflags-append -g3 -ggdb3 -gdwarf-4 -O0
#configure.cxxflags-append -g3 -ggdb3 -gdwarf-4 -O0

# Some patches make PulseAudio startup correctly.
# Will hopefully be merged upstream soon.
# All work has or will be sent upstream.
# C.f. https://bugs.freedesktop.org/show_bug.cgi?id=62987
# and posts on the mailing list.
patchfiles-append   patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff \
                    patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff \
                    patch-src_pulsecore_shm.c_Static_assert.diff \
                    patch-fix-modules.diff \
                    patch-fix-coreaudio-crash.diff

platform darwin 8 {
    patchfiles-append   patch-src_modules_macosx_module_coreaudio_device.c-tiger-compat.diff
}

platform darwin powerpc {
    # This fixes a segfault on launch of pulseaudio on ppc.
    patchfiles-append \
                    patch-avoid-segfault-on-powerpc.diff
}

meson.native.binaries-append \
                    m4=${prefix}/bin/gm4 \
                    perl=${perl5.bin}

compiler.c_standard 2011
# orc uses stdatomic.h
compiler.blacklist-append {clang < 700}

configure.args-append \
                    -Dadrian-aec=true \
                    -Dalsa=disabled \
                    -Dasyncns=disabled \
                    -Davahi=enabled \
                    -Dbluez5=disabled \
                    -Dconsolekit=disabled \
                    -Ddatabase=gdbm \
                    -Ddbus=enabled \
                    -Ddoxygen=false \
                    -Delogind=disabled \
                    -Denable-smoother-2=true \
                    -Dfftw=enabled \
                    -Dglib=enabled \
                    -Dgsettings=disabled \
                    -Dgstreamer=disabled \
                    -Dgtk=disabled \
                    -Dhal-compat=false \
                    -Dipv6=true \
                    -Djack=disabled \
                    -Dlirc=disabled \
                    -Dopenssl=enabled \
                    -Dorc=enabled \
                    -Doss-output=disabled \
                    -Dsoxr=enabled \
                    -Dspeex=enabled \
                    -Dsystemd=disabled \
                    -Dtcpwrap=disabled \
                    -Dtests=false \
                    -Dudev=disabled \
                    -Dvalgrind=disabled \
                    -Dwebrtc-aec=disabled \
                    -Dx11=disabled

# Same error as in: https://trac.macports.org/ticket/25064
configure.ldflags-append \
                    -lintl

if {${os.platform} eq "darwin" && ${os.major} < 16} {
    # _AbsoluteToNanoseconds
    configure.ldflags-append \
                    -framework CoreServices
}

add_users           pulse group=pulse realname=Pulse\ Audio

variant x11 conflicts minimal {
    configure.args-replace  -Dx11=disabled \
                            -Dx11=enabled
    depends_lib-append      port:xorg-libX11 \
                            port:xorg-libxcb \
                            port:xorg-libice \
                            port:xorg-libsm \
                            port:xorg-libXtst
}

variant jack conflicts minimal description {Enable Jack support.} {
    configure.args-replace  -Djack=disabled \
                            -Djack=enabled
    depends_lib-append      port:jack
}

variant valgrind description {Enable Valgrind support.} {
    configure.args-replace  -Dvalgrind=disabled \
                            -Dvalgrind=enabled
    depends_lib-append      path:bin/valgrind:valgrind-devel
    patchfiles-append       patch-src_daemon_caps.c-enable-root.diff
}

variant tests description {Enable testing.} {
    configure.args-replace  -Dtests=false \
                            -Dtests=true
    test.run                yes
}

variant minimal conflicts jack conflicts x11 description {Builds a minimal version. Do not use if unsure. Please build this ONLY in trace mode.} {
    depends_lib-delete      port:dbus \
                            port:gdbm \
                            port:fftw-3-single \
                            path:lib/pkgconfig/glib-2.0.pc:glib2 \
                            port:libiconv \
                            port:orc \
                            port:soxr \
                            port:avahi \
                            path:lib/libssl.dylib:openssl

    configure.args-replace  -Ddatabase=gdbm -Ddatabase=simple \
                            -Ddbus=enabled -Ddbus=disabled \
                            -Dfftw=enabled -Dfftw=disabled \
                            -Dglib=enabled -Dglib=disabled \
                            -Dorc=enabled -Dorc=disabled \
                            -Dsoxr=enabled -Dsoxr=disabled \
                            -Davahi=enabled -Davahi=disabled \
                            -Dopenssl=enabled -Dopenssl=disabled

    require_active_variants libsndfile no_external_libs
}

if {![variant_isset minimal]} {
    default_variants    +x11
}

livecheck.type      regex
livecheck.url       ${master_sites}
livecheck.regex     "${name}-(\\d+(?:\\.\\d+)*)${extract.suffix}"
