# Maintainer: David Runge <dvzrv@archlinux.org>
# Maintainer: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
# Contributor: Jan de Groot <jgc@archlinux.org>

# Holo: Enable SCO offload. That patch is coming from https://gitlab.steamos.cloud/holo/holo/-/merge_requests/847,
# but from that MR it is unclear if we need it or if it is upstreamable.
# Related to https://gitlab.steamos.cloud/holo-team/tasks/-/issues/1241
# Holo: The second patch we include is a backport from upstream to fix the Airpods.
# Once we update to a newer pipewire that includes it, we can remove this backport
# Holo: Symlink the `.conf.d` directories of pipewire to `/run/pipewire`. This is required
# by steamdeck-dsp

pkgbase=pipewire
pkgname=(
  pipewire
  libpipewire
  alsa-card-profiles
  #pipewire-docs
  #pipewire-libcamera
  pipewire-audio
  pipewire-alsa
  pipewire-ffado
  # 2025-09-15: Disabling Jack on Deckard due to CI not able to package things that conflict with each other
  #             Can reenable when this is fixed
  #pipewire-jack-client
  pipewire-jack
  #pipewire-onnx
  pipewire-pulse
  #pipewire-roc
  gst-plugin-pipewire
  pipewire-zeroconf
  pipewire-v4l2
  pipewire-x11-bell
  pipewire-session-manager
  pulse-native-provider
)
pkgver=1.6.8
pkgrel=4
epoch=1
pkgdesc="Low-latency audio/video router and processor"
url="https://pipewire.org"
arch=(x86_64 aarch64)
license=(MIT)
makedepends=(
  alsa-lib
  avahi
  bluez-libs
  llvm-libs
  clang
  dbus
  doxygen
  fftw
  git
  glib2
  glib2-devel
  graphviz
  gst-plugins-base
  jack2
  #libcamera
  libcanberra
  libebur128
  libfdk-aac
  libffado
  libfreeaptx
  liblc3
  libldac
  libmysofa
  libpulse
  libsndfile
  libusb
  libx11
  libxfixes
  lilv
  meson
  # Holo: For HFP certification
  modemmanager
  ncurses
  #onnxruntime
  opus
  'python>=3.13'
  'python<3.15'
  python-docutils
  python-packaging
  readline
  #roc-toolkit
  rtkit
  sbc
  sdl2
  spandsp
  systemd
  valgrind
  webrtc-audio-processing
)
checkdepends=(
  desktop-file-utils
  openal
)
source=(
    "git+https://gitlab.freedesktop.org/pipewire/pipewire.git#tag=$pkgver"
    # Holo
    # Holo: Backport https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2752
    "0001-bluez-Add-A2DP-auto-quality-and-latency-profiles.patch"

    # Holo: Backport https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2759
    "0001-bluez-Increase-priority-of-A2DP-quality-and-latency-.patch"
    "0002-bluez-Set-initial-profile-to-quality-A2DP.patch"
    "0003-bluez-Discard-latency-and-quality-codecs-worse-than-.patch"

    # Holo: https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2835
    "0001-spa-aec-webrtc-Actually-enable-adaptive-analog-contr.patch"
    "0002-spa-aec-webrtc-Allow-enabling-AGC1-and-AGC2-independ.patch"
    "0003-spa-aec-Expose-more-AGC-modes-as-configuration.patch"
    # Holo: https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2847
    "0001-spa-aec-Fix-a-spurious-warning-while-parsing-args.patch"
    # Holo: https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/edb074f4385cd6f3161750c67f1fb9b2407733d5
    "0001-spa-aec-Fix-log-topic-name.patch"
    # Holo: TODO
    "0001-spa-aec-Make-sure-webrtc-GainController1-settings-ac.patch"
    "0001-spa-aec-Expose-more-webrtc-tunables.patch"
    "0001-spa-aec-Add-a-setting-to-enable-GainController1-anal.patch"
    "0001-spa-aec-Expose-some-WebRTC-AEC3-controls-as-config.patch"
    "0001-WIP-spa-aec-Add-an-option-to-force-downmix-of-playba.patch"
    "0001-spa-aec-Add-some-stats-logging-from-webrtc-audio-pro.patch"
    # Holo: https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2702
    "0001-spa-json-Add-a-helper-method-to-shrink-an-object-str.patch"
    "0002-audioconvert-Report-loaded-filter-graphs-in-props.patch"

    # Holo: https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2776
    "0001-tools-connect-to-the-manager-socket-by-default.patch"
)
b2sums=('f4425c8fa9ab33918e52bb0c1272079dd510e1c08b1d228802ad60e7080629f1e82ec30f19dd9e344cd6476803773d79f50957ddfeecfc01d657550a712fd6ba'
        'b999796fc69ecd661b7cd761b98daf81412e4a02e649d74d8d8ec7d2c6cf0169f6062ea03131313a5b03a50529e956289baf0068f0631ea58243d42f1fae4d6e'
        'ba33b056d13739e24b7e6c46bf9268357eea5a989f8af5021c737978a9a0bd9fb9882cc7e2c6eb8477d7c1e50684c3083ea33123f29a949e600ee1849cfe5cdf'
        '2708c004cbfccc56b6342785f117f2f2ec16aba474df96acf4c9d028462b4c0b8f443f13f387465e24eb628f797615c58e91b53672e01729d18b46da72686d93'
        '23b4ff805917e71741672b5fd2efcccbd9ba65504f3ed776960c70742a29ee8b1c2ec0ba8c068792b949e58da59cc9978ad5b02fe9aa7f6074848c765cc8e906'
        '546a357e0dcf6dc1f62281de124f5409523b746af4927e1b193d2f6120b555a1e617ce659558faea80d77cb8584becf9c4e7cadc35dacde84d6c246c8730c6a7'
        'edac7324a934eae96da8e7063eb5ecf4127ebd4170ae1cd8defb3703110e1dbf9d6f064028321577c0ab6b1f1228e3d08a2493aa1cf39d81b464a50515745f96'
        '6628eb9add05886c8ccab5af90cbb57b0f333b6a4ded393a0c0df75997a1c4628a8afffb8306d9da34c25652752533ae898aafe83acde386e6947a98179ffaa1'
        'ab7c7e871f83f959a1a2088dc3bda8e60ed25d494b757a97fa2c61480392c952a7f03e20298331ff2d03995426425e0751adf68dd41ad9d28c0c0dfb143cb485'
        '1ccc438f6894a4fd254f7accdc7164fe940667fb2327689d16efc134898392c24595a29091d6a4bb0279776de8fae4b6b80a64d0dab8cf37a403757af8997768'
        '86b5bf8764f5b44d15b1dfe044859650211cdeab38b7cc92ff71e32a2cf6ec4f71de889c1d4a087f59002ae699c4f035f8894d83685becc7eaa2d3fca7e3ca20'
        '0699f963d1f12d9c8fb94870a343122f96f398614f12a610230cb440f248c6e7e0a4f8dffab9a27b50f14361359820a43f3a482c08fc157b87d85c0a857839dc'
        '90897ede60323ef58a7148b1531c1ea3b3cc78b9d63445331ea70468ba7d3df5a97424e001963cfac8f1fcc5fe4da98f41686d4ac1b138411b7a1af7038006f6'
        '2a62497b8f0faa5ccf41dac5d03bd99f2f5fc1ae8f533e09f1fe2e5e2cfe1bb92b2f607814da1921c8d5b5e9bed20d0e4b75250a78ecc8ba02574f4139128a98'
        '1e3b83e81cc55c04a8896ce3cf9859e22505c5faf0d53c27b8b0cdbf4ce3063a82279d200662b794ebaaaac10530d1034d8d328478495cd473d39306d6790625'
        '515942c333c0a89381c1590e55e2b27b4d5bac60f3b88545b5847962a13ffb394b38d76fa53399ffa4bd00430a003cf9e3b3daedd356eab41e6d6a2d0e24b834'
        '1684ad70ce20a9620dcec2735ebdac79fb6d9aac76f3ee2a749cf8256fd4480880b9e236f8d3726a40c3f123f5d8f8b306afbe83eb798153aa4db76651ad243c'
        'e55d799ff1a6d2d6052f8cdc7126316541488e2350fb685ef48b0302a2a317fb1150450b3e8d4d56874c6314fba7452f2d1823d0e905daa5a92ab69d1bf9de3a'
        'c9786773085a34cbc92d2ef1ffb64a9bc4557978f0898768c72da06877379354f5190d0af7cf8de5b3e8d76f8b4ff3865db69614957979625a3fbfc5cdd50872')

prepare() {
  cd pipewire

  # Holo: apply downstream patches
  local src
  for src in "${source[@]}"; do
    [[ $src = *.patch ]] || continue
    src="${src##*/}"
    echo "Applying patch $src..."
    patch -Np1 < "../$src"
  done
}

build() {
  local meson_options=(
    # Holo: Enable for HFP certification
    -D bluez5-backend-native-mm=enabled
    -D bluez5-codec-lc3plus=disabled
    -D bluez5-codec-ldac-dec=disabled
    # Disable docs for now, since doxygen in CI seems to not be happy
    -D docs=disabled
    -D man=disabled
    -D jack-devel=true
    -D libjack-path=/usr/lib
    -D rlimits-install=false
    -D selinux=disabled
    -D session-managers=[]
    -D snap=disabled
    -D udevrulesdir=/usr/lib/udev/rules.d
    # We don't use libcamera plugins
    -D libcamera=disabled
    -Droc=disabled
    -Donnxruntime=disabled
  )

  arch-meson pipewire build "${meson_options[@]}"
  meson compile -C build
}

check() {
  meson test -C build --print-errorlogs
}

_pick() {
  local p="$1" f d; shift
  for f; do
    d="$srcdir/$p/${f#$pkgdir/}"
    mkdir -p "$(dirname "$d")"
    mv "$f" "$d"
    rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
  done
}

_pwname=pipewire-0.3
_spaname=spa-0.2

package_pipewire() {
  license+=(
    # libspa-alsa
    LGPL-2.1-or-later
  )
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    dbus libdbus-1.so
    gcc-libs
    glib2 libglib-2.0.so
    glibc
    ncurses libncursesw.so
    readline libreadline.so
    systemd-libs libsystemd.so libudev.so
  )
  optdepends=(
    'gst-plugin-pipewire: GStreamer plugin'
    'pipewire-alsa: ALSA configuration'
    'pipewire-audio: Audio support'
    'pipewire-docs: Documentation'
    'pipewire-ffado: FireWire support'
    #'pipewire-jack-client: PipeWire as JACK client'
    'pipewire-jack: JACK replacement'
    #'pipewire-libcamera: Libcamera support'
    #'pipewire-onnx: ONNX filter support'
    'pipewire-pulse: PulseAudio replacement'
    'pipewire-roc: ROC streaming'
    'pipewire-session-manager: Session manager'
    'pipewire-v4l2: V4L2 interceptor'
    'pipewire-x11-bell: X11 bell'
    'pipewire-zeroconf: Zeroconf support'
    'realtime-privileges: realtime privileges with rt module'
    'rtkit: realtime privileges with rtkit module'
  )
  install=pipewire.install

  meson install -C build --destdir "$pkgdir"

  (
    cd "$pkgdir"

    # Replace copies with symlinks
    for _f in pipewire-{aes67,avb,pulse}; do
      cmp usr/bin/pipewire usr/bin/$_f
      ln -sf pipewire usr/bin/$_f
    done

    _pick lib usr/include/{$_pwname,$_spaname}
    _pick lib usr/lib/$_spaname/libspa.so*
    _pick lib usr/lib/lib$_pwname.so*
    _pick lib usr/lib/pkgconfig/lib{$_pwname,$_spaname}.pc

    _pick acp usr/lib/udev
    _pick acp usr/share/alsa-card-profile

    # Disable docs for now, see above
    #_pick docs usr/share/doc

    #_pick libcamera usr/lib/$_spaname/libcamera

    #_pick onnx usr/lib/$_spaname/filter-graph/libspa-filter-graph-plugin-onnx.so

    _pick audio usr/bin/pipewire-{aes67,avb}
    _pick audio usr/bin/pw-{cat,loopback,mididump,midi2play,midi2record,sysex}
    _pick audio usr/bin/pw-{dsd,enc,midi,}play
    _pick audio usr/bin/pw-{midi,}record
    _pick audio usr/bin/spa-{acp-tool,resample}
    _pick audio usr/lib/alsa-lib
    _pick audio usr/lib/$_pwname/libpipewire-module-avb.so
    _pick audio usr/lib/$_pwname/libpipewire-module-echo-cancel.so
    _pick audio usr/lib/$_pwname/libpipewire-module-fallback-sink.so
    _pick audio usr/lib/$_pwname/libpipewire-module-filter-chain*.so
    _pick audio usr/lib/$_pwname/libpipewire-module-loopback.so
    _pick audio usr/lib/$_pwname/libpipewire-module-netjack2*.so
    _pick audio usr/lib/$_pwname/libpipewire-module-parametric-equalizer.so
    _pick audio usr/lib/$_pwname/libpipewire-module-pipe-tunnel.so
    _pick audio usr/lib/$_pwname/libpipewire-module-protocol-simple.so
    _pick audio usr/lib/$_pwname/libpipewire-module-rtp-{sap,sink,source}.so
    _pick audio usr/lib/$_pwname/libpipewire-module-vban*.so
    _pick audio usr/lib/$_spaname/{aec,alsa,audio*,avb,bluez5,filter-graph}
    _pick audio usr/lib/systemd/user/filter-chain.service
    _pick audio usr/share/alsa
    #_pick audio usr/share/man/man1/pw-{cat,loopback,mididump}.1
    #_pick audio usr/share/man/man1/spa-{acp-tool,resample}.1
    #_pick audio usr/share/man/man5/pipewire-filter-chain.conf.5
    #_pick audio usr/share/man/man7/libpipewire-module-avb.7
    #_pick audio usr/share/man/man7/libpipewire-module-echo-cancel.7
    #_pick audio usr/share/man/man7/libpipewire-module-fallback-sink.7
    #_pick audio usr/share/man/man7/libpipewire-module-filter-chain*.7
    #_pick audio usr/share/man/man7/libpipewire-module-loopback.7
    #_pick audio usr/share/man/man7/libpipewire-module-netjack2*.7
    #_pick audio usr/share/man/man7/libpipewire-module-parametric-equalizer.7
    #_pick audio usr/share/man/man7/libpipewire-module-pipe-tunnel.7
    #_pick audio usr/share/man/man7/libpipewire-module-protocol-simple.7
    #_pick audio usr/share/man/man7/libpipewire-module-rtp-{sap,sink,source}.7
    #_pick audio usr/share/man/man7/libpipewire-module-vban*.7
    _pick audio usr/share/pipewire/filter-chain*
    _pick audio usr/share/pipewire/pipewire-{aes67,avb}.conf
    _pick audio usr/share/$_spaname/bluez5

    _pick ffado usr/lib/$_pwname/libpipewire-module-ffado*.so
    #_pick ffado usr/share/man/man7/libpipewire-module-ffado-driver.7

    # 2025-09-15: Disabling Jack on Deckard due to CI not able to package things that conflict with each other
    #             Can reenable when this is fixed
    #_pick jack-client usr/lib/$_pwname/libpipewire-module-jack{-tunnel,dbus-detect}.so
    #_pick jack-client usr/lib/$_spaname/jack
    #_pick jack-client usr/share/man/man7/libpipewire-module-jack{-tunnel,dbus-detect}.7

    _pick jack usr/bin/pw-jack
    _pick jack usr/include/jack
    _pick jack usr/lib/libjack*
    _pick jack usr/lib/pkgconfig/jack*.pc
    #_pick jack usr/share/man/man1/pw-jack.1
    #_pick jack usr/share/man/man5/pipewire-jack.conf.5
    _pick jack usr/share/pipewire/jack.conf

    _pick pulse usr/bin/pipewire-pulse
    _pick pulse usr/lib/$_pwname/libpipewire-module-protocol-pulse.so
    _pick pulse usr/lib/$_pwname/libpipewire-module-pulse-tunnel.so
    _pick pulse usr/lib/systemd/user/pipewire-pulse.*
    _pick pulse usr/share/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml
    #_pick pulse usr/share/man/man1/pipewire-pulse.1
    #_pick pulse usr/share/man/man5/pipewire-pulse.conf.5
    #_pick pulse usr/share/man/man7/libpipewire-module-{protocol-pulse,pulse-tunnel}.7
    #_pick pulse usr/share/man/man7/pipewire-pulse*.7
    #_pick pulse usr/share/pipewire/pipewire-pulse.conf

   # _pick roc usr/lib/$_pwname/libpipewire-module-roc*.so
   # _pick roc usr/share/man/man7/libpipewire-module-roc-{sink,source}.7

    _pick gst usr/lib/gstreamer-1.0

    _pick zeroconf usr/lib/$_pwname/libpipewire-module-{raop,zeroconf}-*.so
    _pick zeroconf usr/lib/$_pwname/libpipewire-module-rtp-session.so
    _pick zeroconf usr/lib/$_pwname/libpipewire-module-snapcast-discover.so
    #_pick zeroconf usr/share/man/man7/libpipewire-module-{raop,zeroconf}-*.7
    #_pick zeroconf usr/share/man/man7/libpipewire-module-rtp-session.7
    #_pick zeroconf usr/share/man/man7/libpipewire-module-snapcast-discover.7

    _pick v4l2 usr/bin/pw-v4l2 usr/lib/$_pwname/v4l2
    #_pick v4l2 usr/share/man/man1/pw-v4l2.1

    _pick x11-bell usr/lib/$_pwname/libpipewire-module-x11-bell.so
    #_pick x11-bell usr/share/man/man7/libpipewire-module-x11-bell.7

    # directories for overrides
    mkdir -p etc/pipewire/{client-rt,client,minimal,pipewire}.conf.d
  )

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_libpipewire() {
  pkgdesc+=" - client library"
  depends=(
    glibc
    gcc-libs
  )
  provides=(lib$_pwname.so)

  mv lib/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_alsa-card-profiles() {
  pkgdesc+=" - ALSA card profiles"
  license=(LGPL-2.1-or-later)

  mv acp/* "$pkgdir"
}

#package_pipewire-docs() {
#  pkgdesc+=" - documentation"
#
#  mv docs/* "$pkgdir"
#
#  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
#}

#package_pipewire-libcamera() {
#  pkgdesc+=" - Libcamera support"
#  depends=(
#    gcc-libs
#    glibc
#    libcamera libcamera-base.so libcamera.so
#    pipewire
#  )
#
#  mv libcamera/* "$pkgdir"
#
#  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
#}

package_pipewire-audio() {
  pkgdesc+=" - Audio support"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire=$epoch:$pkgver-$pkgrel"
    alsa-card-profiles
    alsa-lib libasound.so
    bluez-libs libbluetooth.so
    dbus libdbus-1.so
    gcc-libs
    fftw libfftw3f.so
    glib2 libg{lib,object,io}-2.0.so
    glibc
    libebur128
    libfdk-aac libfdk-aac.so
    libfreeaptx libfreeaptx.so
    liblc3 liblc3.so
    libldac libldacBT_enc.so
    libmysofa libmysofa.so
    libsndfile libsndfile.so
    libusb libusb-1.0.so
    lilv liblilv-0.so
    opus libopus.so
    sbc libsbc.so
    # Holo: upstream has libspandsp.so, but we don't have a new enough spandsp in base yet
    spandsp
    systemd-libs
    webrtc-audio-processing libwebrtc-audio-processing-2.so
  )

  mv audio/* "$pkgdir"

  mkdir -p "$pkgdir/etc/alsa/conf.d"
  ln -st "$pkgdir/etc/alsa/conf.d" \
    /usr/share/alsa/alsa.conf.d/50-pipewire.conf

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-alsa() {
  pkgdesc+=" - ALSA configuration"
  depends=(
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    pipewire-session-manager
  )

  mkdir -p "$pkgdir/etc/alsa/conf.d"
  ln -st "$pkgdir/etc/alsa/conf.d" \
    /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf

  install -Dm644 /dev/null \
    "$pkgdir/usr/share/pipewire/media-session.d/with-alsa"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-ffado() {
  pkgdesc+=" - FireWire support"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    glibc
    libffado libffado.so
  )

  mv ffado/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

#package_pipewire-jack-client() {
#  pkgdesc+=" - PipeWire as JACK client"
#  depends=(
#    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
#    "pipewire-audio=$epoch:$pkgver-$pkgrel"
#    "pipewire=$epoch:$pkgver-$pkgrel"
#    dbus libdbus-1.so
#    gcc-libs
#    glibc
#    jack libjack.so
#  )
#  conflicts=(pipewire-jack)
#
#  mv jack-client/* "$pkgdir"
#
#  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
#}

package_pipewire-jack() {
  pkgdesc+=" - JACK replacement"
  license+=(
    # libjackserver
    GPL-2.0-only
    LGPL-2.1-or-later
  )
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    glibc
    pipewire-session-manager
    sh
  )
  optdepends=(
    'jack-example-tools: for official JACK example-clients and tools'
  )
  conflicts=(
    jack
    jack2
    pipewire-jack-client
  )
  provides=(
    jack
    libjack.so
    libjacknet.so
    libjackserver.so
  )

  mv jack/* "$pkgdir"

  install -Dm644 /dev/null \
    "$pkgdir/usr/share/pipewire/media-session.d/with-jack"

  # directories for overrides
  mkdir -p "$pkgdir/etc/pipewire/jack.conf.d"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

#package_pipewire-onnx() {
#  pkgdesc+=" - ONNX filter support"
#  depends=(
#    "pipewire-audio=$epoch:$pkgver-$pkgrel"
#    "pipewire=$epoch:$pkgver-$pkgrel"
#    glibc
#    onnxruntime
#  )
#
#  mv onnx/* "$pkgdir"
#
#  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
#}

package_pipewire-pulse() {
  pkgdesc+=" - PulseAudio replacement"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    avahi libavahi-{client,common}.so
    dbus libdbus-1.so
    dconf
    gcc-libs
    glib2 libg{lib,object,io}-2.0.so
    glibc
    libpulse libpulse.so
    pipewire-session-manager
    systemd-libs libsystemd.so
  )
  provides=(pulse-native-provider)
  conflicts=(pulseaudio)
  install=pipewire-pulse.install

  mv pulse/* "$pkgdir"

  # directory for overrides
  mkdir -p "$pkgdir/etc/pipewire/pipewire-pulse.conf.d"

  install -Dm644 /dev/null \
    "$pkgdir/usr/share/pipewire/media-session.d/with-pulseaudio"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-roc() {
  pkgdesc+=" - ROC streaming support"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    gcc-libs
    glibc
    roc-toolkit libroc.so
  )

  mv roc/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_gst-plugin-pipewire() {
  pkgdesc="Multimedia graph framework - pipewire plugin"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    gcc-libs
    glib2 libg{lib,object}-2.0.so
    glibc
    gst-plugins-base-libs
    gstreamer
    pipewire-session-manager
  )

  mv gst/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-zeroconf() {
  pkgdesc+=" - Zeroconf support"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    avahi libavahi-{client,common}.so
    gcc-libs
    glibc
    openssl libcrypto.so
    opus libopus.so
  )

  mv zeroconf/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-v4l2() {
  pkgdesc+=" - V4L2 interceptor"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire=$epoch:$pkgver-$pkgrel"
    glibc
    pipewire-session-manager
    sh
  )

  mv v4l2/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-x11-bell() {
  pkgdesc+=" - X11 bell"
  depends=(
    "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so
    "pipewire-audio=$epoch:$pkgver-$pkgrel"
    "pipewire=$epoch:$pkgver-$pkgrel"
    glibc
    libcanberra libcanberra.so
    libx11
    libxfixes
  )

  mv x11-bell/* "$pkgdir"

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING
}

package_pipewire-session-manager() {
  pkgdesc="Session manager for PipeWire (default provider)"
  license=(CC0-1.0)
  depends=(wireplumber)
}

package_pulse-native-provider() {
  pkgdesc="PulseAudio sound server (default provider)"
  license=(CC0-1.0)
  depends=(pipewire-pulse)
}

# vim:set sw=2 sts=-1 et:
