# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           meson 1.0
PortGroup           active_variants 1.1

name                audacious-plugins

# Please keep audacious, audacious-core and audacious-plugins synchronized.
version             4.5.1
revision            2

# FIXME: probably more licenses involved here...
license             BSD GPL-2+
categories          audio
maintainers         {ionic @Ionic} \
                    {makr @mohd-akram}
homepage            https://www.audacious-media-player.org/
description         Adds I/O, audio decoding, audio transforming and UI plugins.
long_description    This ports bundles most of the functionality for audacious. \
                    {*}${description}

# Maintainer-only helper for testing changes quickly and easily.
#fetch.type          git
#git.url             https://github.com/Ionic/audacious-plugins
#git.branch          ${name}-${version}-buildfix

master_sites        https://distfiles.audacious-media-player.org
use_bzip2           yes
checksums           rmd160  df77149bc086a5eb7bad0ebb7c72c6e632767c0e \
                    sha256  f4feedc32776acfa9d24701d3b794fc97822f76da6991e91e627e70e561fdd3b \
                    size    1907432

universal_variant   no

depends_build       port:gettext

depends_lib         port:audacious-core \
                    port:gettext-runtime \
                    port:libxml2 \
                    port:zlib \
                    path:lib/pkgconfig/glib-2.0.pc:glib2

depends_run         port:unzip

compiler.c_standard     1999
compiler.cxx_standard   2017

# Options order per meson_options.txt
# gui
configure.args-append \
                    -Dgtk=false \
                    -Dgtk2=false \
                    -Dqt=false \
                    -Dqt5=false

# container
configure.args-append \
                    -Dcue=false

# transport
configure.args-append \
                    -Dmms=false \
                    -Dneon=false

# input
configure.args-append \
                    -Daac=false \
                    -Dadplug=false \
                    -Damidiplug=false \
                    -Dcdaudio=false \
                    -Dconsole=true \
                    -Dffaudio=false \
                    -Dflac=false \
                    -Dmodplug=false \
                    -Dmpg123=false \
                    -Dopenmpt=false \
                    -Dopus=false \
                    -Dsid=false \
                    -Dsndfile=false \
                    -Dvorbis=false \
                    -Dwavpack=false

# output
# sdlout was originally the only working audio output plugin on macOS.
# coreaudio is always enabled on macOS. It has problems setting the initial volume.
# When using Qt5, the QtMultimedia audio output seems to be a good choice feature-wise.
# Try PulseAudio at your own risk.
configure.args-append \
                    -Dalsa=false \
                    -Dcoreaudio=false \
                    -Dfilewriter=true \
                    -Dfilewriter-flac=false \
                    -Dfilewriter-mp3=false \
                    -Dfilewriter-ogg=false \
                    -Djack=false \
                    -Doss=false \
                    -Dpipewire=false \
                    -Dpulse=false \
                    -Dqtaudio=false \
                    -Dsdlout=false \
                    -Dsndio=false

# general
configure.args-append \
                    -Dampache=false \
                    -Daosd=false \
                    -Dhotkey=false \
                    -Dlirc=false \
                    -Dmac-media-keys=false \
                    -Dmpris2=false \
                    -Dnotify=false \
                    -Dscrobbler2=false \
                    -Dsongchange=true \
                    -Dstreamtuner=false

# effect
configure.args-append \
                    -Dbs2b=false \
                    -Dresample=false \
                    -Dsoxr=false \
                    -Dspeedpitch=false

# visualization
configure.args-append \
                    -Dgl-spectrum=false \
                    -Dvumeter=false

platform darwin {
    configure.args-replace  -Dcoreaudio=false \
                            -Dcoreaudio=true \
                            -Dmac-media-keys=false \
                            -Dmac-media-keys=true
}

# Even if we disable blocks to make it build with GCC, it is broken
# and outputs only hiss. Use SDL audio out instead, until fixed.
# FIXME: https://github.com/audacious-media-player/audacious/issues/1440
platform darwin powerpc {
    configure.args-replace  -Dcoreaudio=true \
                            -Dcoreaudio=false
}

# This issue was supposed to be fixed, but it did not work as intended.
# Temporarily revert upstream commit and restore our patch. This is tested.
# https://github.com/audacious-media-player/audacious-plugins/pull/166
patchfiles-append   patch-big-endian.diff

default_variants    +full

depends_build-append \
                    path:bin/pkg-config:pkgconfig

post-destroot {
    xinstall -d -m 0755 ${destroot}${prefix}/share/doc/${name}
    xinstall -m 0644 ${worksrcpath}/COPYING ${destroot}${prefix}/share/doc/${name}
}

variant pulseaudio description {Add support for PulseAudio} {
    depends_lib-append      port:pulseaudio
    configure.args-replace  -Dpulse=false \
                            -Dpulse=true
}

variant mp3 description {Add support for MP3 files} {
    depends_lib-append      port:mpg123 \
                            port:lame
    configure.args-replace  -Dmpg123=false \
                            -Dmpg123=true \
                            -Dfilewriter-mp3=false \
                            -Dfilewriter-mp3=true
}

variant mpris2 description {Adds support for MPRIS2} {
    # gdbus-codegen
    depends_build-append    path:lib/pkgconfig/glib-2.0.pc:glib2
    depends_run-append      port:dbus
    configure.args-replace  -Dmpris2=false \
                            -Dmpris2=true
}

variant hotkey description {Adds global hotkey plugin (X11)} {
    configure.args-replace  -Dhotkey=false \
                            -Dhotkey=true
}

variant lirc description {Adds support for infrared devices via LIRC} {
    depends_lib-append      port:lirc
    configure.args-replace  -Dlirc=false \
                            -Dlirc=true
}

variant osd description {Adds OSD support via pangocairo} {
    depends_lib-append      port:xrender \
                            port:xorg-libXcomposite
    configure.args-replace  -Daosd=false \
                            -Daosd=true
}

variant notifications description {Adds support for notifications via libnotify} {
    depends_lib-append      port:libnotify \
                            path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2
    configure.args-replace  -Dnotify=false \
                            -Dnotify=true
}

variant vorbis description {Add support for the OggVorbis audio codec} {
    depends_lib-append      port:libvorbis \
                            port:libogg
    configure.args-replace  -Dvorbis=false \
                            -Dvorbis=true \
                            -Dfilewriter-ogg=false \
                            -Dfilewriter-ogg=true
}

variant opus description {Add support for the Opus codec} {
    depends_lib-append      port:opusfile
    configure.args-replace  -Dopus=false \
                            -Dopus=true
}

variant flac description {Add support for FLAC: Free Lossless Audio Codec} {
    depends_lib-append      port:flac
    configure.args-replace  -Dflac=false \
                            -Dflac=true \
                            -Dfilewriter-flac=false \
                            -Dfilewriter-flac=true
}

variant wavpack description {Add support for wavpack audio compression tools} {
    depends_lib-append      port:wavpack
    configure.args-replace  -Dwavpack=false \
                            -Dwavpack=true
}

variant aac description {Add support for MPEG-4 AAC Audio} {
    depends_lib-append      port:faad2
    configure.args-replace  -Daac=false \
                            -Daac=true
}

variant sndfile description {Add support for libsndfile} {
    depends_lib-append      port:libsndfile
    configure.args-replace  -Dsndfile=false \
                            -Dsndfile=true
}

variant modplug description {Add support for MOD audio codec} {
    depends_lib-append      port:libmodplug
    configure.args-replace  -Dmodplug=false \
                            -Dmodplug=true
}

variant openmpt description {Add support for MOD, XM, S3M,IT, MPTM and others} {
    depends_lib-append      port:libopenmpt
    configure.args-replace  -Dopenmpt=false \
                            -Dopenmpt=true
}

variant adplug description {Add support for the AdLib synthesizer} {
    depends_lib-append      port:adplug \
                            port:libbinio
    configure.args-replace  -Dadplug=false \
                            -Dadplug=true
}

variant bs2b description {Add support for Bauer stereophonic-to-binaural} {
    depends_lib-append      port:libbs2b
    configure.args-replace  -Dbs2b=false \
                            -Dbs2b=true
}

variant ffmpeg description {Add support for decoding audio streams via ffmpeg} {
    set ffmpeg_ver          8
    depends_lib-append      port:ffmpeg${ffmpeg_ver}
    configure.pkg_config_path-append \
                            ${prefix}/libexec/ffmpeg${ffmpeg_ver}/lib/pkgconfig
    configure.args-replace  -Dffaudio=false \
                            -Dffaudio=true
}

variant jack description {Add support for the JACK Audio Connection Kit} {
    depends_lib-append      port:jack
    configure.args-replace  -Djack=false \
                            -Djack=true
}

variant sid description {Build with SID (Commodore 64 Audio) support} {
    depends_lib-append      port:libsidplayfp
    configure.args-replace  -Dsid=false \
                            -Dsid=true
}

variant midi description {Add MIDI playback support via fluidsynth} {
    depends_lib-append      port:fluidsynth
    configure.args-replace  -Damidiplug=false \
                            -Damidiplug=true
}

variant cdaudio description {Add support for CDAudio} {
    depends_lib-append      port:libcdio-paranoia \
                            port:libcdio \
                            port:libcddb
    configure.args-replace  -Dcdaudio=false \
                            -Dcdaudio=true
}

variant lastfm description {Add support for last.fm} {
    depends_lib-append      port:curl
    configure.args-replace  -Dscrobbler2=false \
                            -Dscrobbler2=true
}

variant ampache description {Add support for browsing music on an Ampache server} {
    depends_lib-append      port:ampache_browser
    configure.args-replace  -Dampache=false \
                            -Dampache=true

    if {[variant_isset qt5]} {
        require_active_variants ampache_browser qt5
    }

    if {[variant_isset qt6]} {
        require_active_variants ampache_browser qt6
    }
}

variant mms description {Add support for Microsoft Media Server (MMS) streams} {
    depends_lib-append      port:libmms
    configure.args-replace  -Dmms=false \
                            -Dmms=true
}

variant neon description {Add support for neon HTTP client} {
    depends_lib-append      port:neon
    configure.args-replace  -Dneon=false \
                            -Dneon=true
}

variant cue description {Add support for CUE sheets} {
    depends_lib-append      port:libcue
    configure.args-replace  -Dcue=false \
                            -Dcue=true
}

variant transform description {Add support for audio transformation, most notably resampling, pitching and speed control} {
    depends_lib-append      port:libsamplerate \
                            port:soxr
    configure.args-replace  -Dresample=false \
                            -Dresample=true \
                            -Dspeedpitch=false \
                            -Dspeedpitch=true \
                            -Dsoxr=false \
                            -Dsoxr=true
}

variant opengl description {Add support for spectrum visualization via OpenGL} {
    if {[variant_isset gtk2] || [variant_isset gtk3]} {
        depends_lib-append      path:lib/libGL.dylib:mesa
    }
    configure.args-replace  -Dgl-spectrum=false \
                            -Dgl-spectrum=true
}

variant vumeter description {Add support for VU meter visualization} {
    configure.args-replace  -Dvumeter=false \
                            -Dvumeter=true
}

variant sdl3 description {Add SDL audio output via SDL3} {
    depends_lib-append      port:SDL3
    configure.args-replace  -Dsdlout=false \
                            -Dsdlout=true
}

variant qt5 conflicts qt6 description {Add Qt5 support} {
    PortGroup   qt5 1.0

    qt5.depends_component   qtmultimedia

    configure.args-replace  -Dqt=false \
                            -Dqt=true \
                            -Dqt5=false \
                            -Dqt5=true \
                            -Dqtaudio=false \
                            -Dqtaudio=true

    require_active_variants audacious-core qt5
}

variant qt6 conflicts qt5 description {Add Qt6 support} {
    PortGroup   qt6 1.0

    qt6.depends_lib         qtmultimedia

    configure.args-replace  -Dqt=false \
                            -Dqt=true \
                            -Dqtaudio=false \
                            -Dqtaudio=true

    require_active_variants audacious-core qt6
}

variant gtk2 conflicts gtk3 description {Add GTK2 support} {
    depends_lib-append      path:lib/pkgconfig/gtk+-2.0.pc:gtk2 \
                            port:json-glib

    configure.args-replace  -Dgtk=false \
                            -Dgtk=true \
                            -Dgtk2=false \
                            -Dgtk2=true

    require_active_variants audacious-core gtk2
}

variant gtk3 conflicts gtk2 description {Add GTK3 support} {
    depends_lib-append      path:lib/pkgconfig/gtk+-3.0.pc:gtk3 \
                            port:json-glib

    configure.args-replace  -Dgtk=false \
                            -Dgtk=true

    require_active_variants audacious-core gtk3
}

variant full requires mp3 mpris2 wavpack aac sndfile modplug openmpt sid \
                      midi cdaudio lastfm mms neon cue flac transform \
                      vorbis opus adplug bs2b notifications \
             description {Build all plugins, except additional sound output plugins and potentially conflicting variants} {}

if {[variant_isset jack]} {
    notes-append {
                    You have selected the JACK audio output plugin. \
                    To use this plugin, jackd needs to be started manually. \
                    The plugin is known to have issues leading to crackling sound output. \
                    Please don't report bugs against this plugin.\
    }
}

default_variants-append +sdl3 +ffmpeg

# Need either one of gtk2, gtk3, Qt5 or Qt6 to have a GUI.
# Default to qt6, which is preferred by upstream.
if {![variant_isset gtk2] && ![variant_isset gtk3] && ![variant_isset qt5]} {
    # Fails to build on macOS - https://trac.macports.org/ticket/69214
    if {${os.platform} ne "darwin"} {
        default_variants-append +qt6
    }
}

if {![variant_isset gtk2] && ![variant_isset gtk3] && ![variant_isset qt6]} {
    if {${os.platform} eq "darwin" && ${os.major} < 11} {
        default_variants-append +gtk3
    } else {
        default_variants-append +qt5
    }
}

# UI required variants

# Add other variants to the "full" set if UI is enabled
if {[variant_isset full] && ([variant_isset gtk2] || [variant_isset gtk3] || [variant_isset qt5] || [variant_isset qt6])} {
    default_variants-append +opengl +vumeter
}

# OpenGL requires UI
if {![variant_isset gtk2] && ![variant_isset gtk3] && ![variant_isset qt5] && ![variant_isset qt6] && [variant_isset opengl]} {
    ui_debug "The opengl variant requires either the gtk2, gtk3, qt5 or qt6 variant to be enabled."
    error "+opengl requires +gtk2, +gtk3, +qt5 or +qt6."
}

# VU meter requires UI
if {![variant_isset gtk2] && ![variant_isset gtk3] && ![variant_isset qt5] && ![variant_isset qt6] && [variant_isset vumeter]} {
    ui_debug "The vumeter variant requires either the gtk2, gtk3, qt5 or qt6 variant to be enabled."
    error "+vumeter requires +gtk2, +gtk3, +qt5 or +qt6."
}

# Qt only

# Ampache only supported with Qt5 or Qt6
if {![variant_isset qt5] && ![variant_isset qt6] && [variant_isset ampache]} {
    ui_debug "The ampache variant requires either the qt5 or qt6 variants to be enabled."
    error "+ampache requires +qt5 or +qt6."
}

# GTK only

# Add other variants to the "full" set if GTK is enabled
if {[variant_isset full] && ([variant_isset gtk2] || [variant_isset gtk3])} {
    default_variants-append +osd
}

# hotkey only supported with GTK
if {![variant_isset gtk2] && ![variant_isset gtk3] && [variant_isset hotkey]} {
    ui_debug "The hotkey variant requires either the gtk2 or gtk3 variant to be enabled."
    error "+hotkey require +gtk2 or +gtk3."
}

# OSD only supported with GTK
if {![variant_isset gtk2] && ![variant_isset gtk3] && [variant_isset osd]} {
    ui_debug "The osd variant requires either the gtk2 or gtk3 variant to be enabled."
    error "+osd require +gtk2 or +gtk3."
}

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