# -*- 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           meson 1.0
PortGroup           legacysupport 1.1
PortGroup           boost 1.0

name                mpd
version             0.24
revision            0
checksums           rmd160  813705fadf7e0b5b93fd841934927042d878ba51 \
                    sha256  1c828a290816d540fb2dec90f78044b55ff5ef8b49dd47a639ac34e3e5226bc5 \
                    size    1015904

categories          audio
license             GPL-2+ LGPL-2.1
maintainers         nomaintainer

description         Music Player Daemon
long_description    Music Player Daemon (MPD) allows remote access for playing music \
    (MP3, Ogg Vorbis, FLAC, AAC, Mod, and wave files) and managing \
    playlists. MPD is designed for integrating a computer into a stereo \
    system that provides control for music playback over a local network. \
    It also makes a great desktop music player, especially if you are a \
    console junkie, like frontend options, or restart X often.
homepage            https://www.musicpd.org/

set branch          [join [lrange [split ${version} .] 0 1] .]
master_sites        https://www.musicpd.org/download/${name}/${branch}/
use_xz              yes

set python_branch   3.13
set python_version  [string map {. {}} ${python_branch}]

set port_libfmt     libfmt11

depends_build-append \
    path:bin/pkg-config:pkgconfig \
    port:py${python_version}-sphinx \
    port:py${python_version}-sphinx_rtd_theme

# this port only uses boost headers during build
# and does not link with any boost libraries
# no need to rebuild due to boost library ABI changes
boost.depends_type build

depends_lib \
    port:audiofile \
    port:bzip2 \
    port:curl \
    port:faad2 \
    port:flac \
    path:lib/pkgconfig/glib-2.0.pc:glib2 \
    path:lib/pkgconfig/icu-uc.pc:icu \
    port:libao \
    port:libcdio-paranoia \
    port:${port_libfmt} \
    port:libiconv \
    port:libid3tag \
    port:libogg \
    port:libopus \
    port:libvorbis \
    port:libzzip \
    port:pcre2 \
    port:wavpack \
    port:zlib

configure.args \
    --mandir ${prefix}/share/man \
    -Ddocumentation=enabled \
    -Dlibmpdclient=disabled \
    -Dwebdav=disabled \
    -Dbzip2=enabled \
    -Dcue=true \
    -Dcdio_paranoia=enabled \
    -Dcurl=enabled \
    -Dmms=disabled \
    -Dnfs=disabled \
    -Dsmbclient=disabled \
    -Dqobuz=disabled \
    -Dsoundcloud=disabled \
    -Did3tag=enabled \
    -Dchromaprint=disabled \
    -Dadplug=disabled \
    -Daudiofile=enabled \
    -Dfaad=enabled \
    -Dffmpeg=disabled \
    -Dflac=enabled \
    -Dfluidsynth=disabled \
    -Dgme=disabled \
    -Dmad=disabled \
    -Dmikmod=disabled \
    -Dmodplug=disabled \
    -Dmpcdec=disabled \
    -Dmpg123=disabled \
    -Dopus=enabled \
    -Dsidplay=disabled \
    -Dsndfile=disabled \
    -Dtremor=disabled \
    -Dvorbis=enabled \
    -Dwavpack=enabled \
    -Dwildmidi=disabled \
    -Dvorbisenc=enabled \
    -Dlame=disabled \
    -Dtwolame=disabled \
    -Dshine=disabled \
    -Dwave_encoder=true \
    -Dlibsamplerate=disabled \
    -Dsoxr=disabled \
    -Dalsa=disabled \
    -Dao=enabled \
    -Dfifo=true \
    -Dhttpd=true \
    -Djack=disabled \
    -Dopenal=disabled \
    -Doss=disabled \
    -Dpipe=true \
    -Dpulse=disabled \
    -Drecorder=false \
    -Dshout=disabled \
    -Dsndio=disabled \
    -Dsolaris_output=disabled \
    -Ddbus=disabled \
    -Dexpat=disabled \
    -Dicu=enabled \
    -Diconv=enabled \
    -Dpcre=enabled \
    -Dsqlite=disabled \
    -Dyajl=disabled \
    -Dzeroconf=bonjour \
    -Dzlib=enabled \
    -Dzzip=enabled \
    -Dupnp=disabled

configure.cflags-append -I${prefix}/include

# Wrap the macOS12 functions, may be added into legacy-support see PR49
if {${os.major} < 21} {
    configure.cflags-prepend        -isystem ${filespath}/wrappers
    configure.cxxflags-prepend      -isystem ${filespath}/wrappers
    configure.objcflags-prepend     -isystem ${filespath}/wrappers
    configure.objcxxflags-prepend   -isystem ${filespath}/wrappers
}

variant ffmpeg description {Support for myriad formats (including ALAC) via FFmpeg} {
    depends_lib-append path:lib/libavcodec.dylib:ffmpeg
    configure.args-replace -Dffmpeg=disabled -Dffmpeg=enabled
}

variant stickers description {Support for stickers database} {
    depends_lib-append port:sqlite3
    configure.args-replace -Dsqlite=disabled -Dsqlite=enabled
}

variant libmpdclient description {Support for libmpdclient proxy database} {
    depends_lib-append port:libmpdclient
    configure.args-replace -Dlibmpdclient=disabled -Dlibmpdclient=enabled
}

variant lame description {Support for MP3 encoding via lame} {
    depends_lib-append port:lame
    configure.args-replace -Dlame=disabled -Dlame=enabled
}

variant twolame description {Support for MP3 encoding via twolame} {
    depends_lib-append port:twolame
    configure.args-replace -Dtwolame=disabled -Dtwolame=enabled
}

variant mpcdec description {Support for Musepack via libmpcdec} {
    depends_lib-append port:libmpcdec
    configure.args-replace --Dmpcdec=disabled Dmpcdec=enabled
}

variant mod description {Support for several formats of tracker/sequencer files via libmikmod} {
    depends_lib-append port:libmikmod
    configure.args-append -Dmikmod=enabled
}

variant modplug description {Support for several formats of tracker/sequencer files via libmodplug} {
    depends_lib-append port:libmodplug
    configure.args-append -Dmodplug=enabled
}

variant fluidsynth description {Support for FluidSynth MIDI} {
    depends_lib-append port:fluidsynth
    configure.args-append -Dfluidsynth=enabled
}

variant jack description {Support for JACK output} {
    depends_lib-append port:jack
    configure.args-replace -Djack=disabled -Djack=enabled
}

variant shout description {Support for ShoutCast or IceCast streaming via libshout2} {
    depends_lib-append port:libshout2
    configure.args-replace -Dshout=disabled -Dshout=enabled
}

variant sidplay description {Support for C64 SID support via SIDPLAY} {
    depends_lib-append port:SIDPLAY
    configure.args-replace -Dsidplay=disabled -Dsidplay=enabled
}

variant chromaprint description {Support for ChromaPrint / AcoustID via chromaprint} {
    depends_lib-append port:chromaprint
    configure.args-replace -Dchromaprint=disabled -Dchromaprint=enabled
}

variant mpg123 conflicts mad description {Use mpg123 rather than mad as mp3 deconding library} {
    depends_lib-append port:mpg123
    configure.args-replace -Dmpg123=disabled -Dmpg123=enabled
}

variant mad conflicts mpg123 description {Use mad rather than mpg123 as mp3 decoding library} {
    depends_lib-append port:libmad
    configure.args-replace -Dmad=disabled -Dmad=enabled
}

variant webdav description {Support WebDAV storage} {
    depends_lib-append port:curl port:expat
    configure.args-replace -Dexpat=disabled -Dexpat=enabled
    configure.args-replace -Dwebdav=disabled -Dwebdav=enabled
}

variant upnp description {Support UPnP database} {
    depends_lib-append port:libupnp
    configure.args-replace -Dupnp=disabled -Dupnp=enabled
}

variant mms description {Support MMS input via libmms} {
    depends_lib-append port:libmms
    configure.args-replace -Dmms=disabled -Dmms=enabled
}

variant avahi description {Support zeroconf via avahi} {
    depends_lib-append port:avahi
    configure.args-replace -Dzeroconf=bonjour -Dzeroconf=avahi
}

configure.env-append \
    PATH=${frameworks_dir}/Python.framework/Versions/${python_branch}/bin:$env(PATH) \
    PKG_CONFIG_PATH=${prefix}/lib/${port_libfmt}/pkgconfig
build.env-append    {*}${configure.env}
destroot.env-append {*}${configure.env}

compiler.cxx_standard   2017

compiler.blacklist-append {clang < 1200}

if {${os.platform} eq "darwin" && ${os.major} > 8} {
    set mpduser       _mpd
} else {
    set mpduser       mpd
}

add_users ${mpduser} group=${mpduser} realname=Music\ Player\ Daemon

startupitem.create  yes
startupitem.start   "${prefix}/bin/mpd --no-daemon ${prefix}/etc/mpd.conf"
startupitem.stop    "${prefix}/bin/mpd --kill"
destroot.keepdirs   ${destroot}${prefix}/var/lib/mpd/music \
    ${destroot}${prefix}/var/lib/mpd/playlists \
    ${destroot}${prefix}/var/log/mpd
post-destroot {
    xinstall -m 0755 -o ${mpduser} -g ${mpduser} -d \
    ${destroot}${prefix}/var/lib/mpd \
    ${destroot}${prefix}/var/lib/mpd/music \
    ${destroot}${prefix}/var/lib/mpd/playlists \
    ${destroot}${prefix}/var/log/mpd

    xinstall -m 0644 ${filespath}/mpd.conf ${destroot}${prefix}/etc/mpd.conf.default
    reinplace "s|%%PREFIX%%|${prefix}|g" \
        ${destroot}${prefix}/etc/mpd.conf.default
    reinplace "s|%%MPDUSER%%|${mpduser}|g" \
        ${destroot}${prefix}/etc/mpd.conf.default
}
post-activate {
    # Lift resource limits
    reinplace \
        "s|^<key>ProgramArguments</key>|<key>ProcessType</key><string>Interactive</string>\\
&|" \
        ${prefix}/etc/${startupitem.location}/org.macports.${name}/org.macports.${name}.plist

    if {![file exists ${prefix}/etc/mpd.conf]} {
        copy ${prefix}/etc/mpd.conf.default ${prefix}/etc/mpd.conf
    }
}

if {![variant_isset mpg123]} {
    default_variants    +mad
}

notes "A basic configuration file has been created for you.
To add music to mpd's database, create symbolic links in
${prefix}/var/lib/mpd/music using 'ln -s'.  For advanced
configuration, run \"man mpd.conf\" or refer to
${prefix}/share/doc/mpd/mpdconf.example for an example configuration file.

You may get \"Problems shmget'ing\" message when launching mpd.
In this case, you can increase the values of kern.sysv.shmmax and
kern.sysv.shmall in /etc/rc.

If you experience laggy playback, try increasing buffer_time in libao
options."

livecheck.type      regex
livecheck.url       ${homepage}
livecheck.regex     {\mMPD (\d+(?:\.\d+)*) released}
