%global pa_major 17.0

%undefine _strict_symbol_defs_build

%global multilib_archs x86_64 %{ix86}

Name:           pulseaudio
Summary:        Improved Linux Sound Server
Version:        %{pa_major}%{?pa_minor}
Release:        3
License:        LGPL-2.1-or-later
URL:            https://www.freedesktop.org/wiki/Software/PulseAudio
Source0:        https://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz
Source1:        https://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha256sum
Source5:        default.pa-for-gdm
Patch6001:      backport-tests-Don-t-run-volume-tests-with-impossible-alignme.patch

BuildRequires: meson >= 0.50.0
BuildRequires: pkgconfig(alsa) >= 1.0.24
BuildRequires: pkgconfig(avahi-client) >= 0.6.0
BuildRequires: pkgconfig(bluez)
BuildRequires: pkgconfig(check) >= 0.9.10
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(fftw3f)
BuildRequires: pkgconfig(gio-2.0) >= 2.26.0
BuildRequires: pkgconfig(glib-2.0) >= 2.28.0
BuildRequires: pkgconfig(gstreamer-1.0) >= 1.14
BuildRequires: pkgconfig(gstreamer-app-1.0)
BuildRequires: pkgconfig(gstreamer-rtp-1.0)
BuildRequires: pkgconfig(ice)
BuildRequires: pkgconfig(libasyncns) >= 0.1
BuildRequires: pkgconfig(libudev) >= 143
BuildRequires: pkgconfig(openssl) >= 0.9
BuildRequires: pkgconfig(orc-0.4) >= 0.4.11
BuildRequires: pkgconfig(samplerate) >= 0.1.0
BuildRequires: pkgconfig(sbc) >= 1.0
BuildRequires: pkgconfig(sm)
BuildRequires: pkgconfig(sndfile) >= 1.0.20
BuildRequires: pkgconfig(speexdsp) >= 1.2
BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(tdb)
BuildRequires: pkgconfig(x11-xcb)
BuildRequires: pkgconfig(xcb) >= 1.6
BuildRequires: pkgconfig(xtst)
BuildRequires: libcap-devel
BuildRequires: libtool-devel
BuildRequires: perl(XML::Parser)
BuildRequires: /usr/bin/msgfmt
BuildRequires: /usr/bin/m4
BuildRequires: cmake-rpm-macros
BuildRequires: doxygen

Obsoletes:      padevchooser < 1.0
Provides:       %{name}-module-x11 %{name}-utils %{name}-esound-compat %{name}-module-zeroconf %{name}-module-gsettings
Obsoletes:      %{name}-module-x11 %{name}-utils %{name}-esound-compat %{name}-module-zeroconf %{name}-module-gsettings

Requires(pre):  shadow-utils
Requires:       rtkit

%description
PulseAudio is a sound server for Linux and other Unix like operating
systems. It is intended to be an improved drop-in replacement for the
Enlightened Sound Daemon (ESOUND).

%package        qpaeq
Summary:        Pulseaudio equalizer interface
Requires:       %{name} = %{version}-%{release}
Requires:       python3-qt5 python3-dbus
%description    qpaeq
qpaeq is a equalizer interface for pulseaudio's equalizer sinks.

%package module-bluetooth
Summary:        Bluetooth support for the PulseAudio sound server
Requires:       %{name} = %{version}-%{release}
Requires:       bluez >= 5.0
	
%description module-bluetooth
Contains Bluetooth audio (A2DP/HSP/HFP) support for the PulseAudio sound server.

%package libs
Summary:        Libraries for PulseAudio clients
Obsoletes:      pulseaudio-libs-zeroconf < 1.1
Conflicts:      %{name} < 17.0-2

%description libs
This package contains the runtime libraries for any application that wishes
to interface with a PulseAudio sound server.

%package libs-glib2
Summary:        GLIB 2.x bindings for PulseAudio clients
Requires:       %{name}-libs = %{version}-%{release}
 
%description libs-glib2
This package contains bindings to integrate the PulseAudio client library with
a GLIB 2.x based application.

%package libs-devel
Summary:        Headers and libraries for PulseAudio client development
Requires:       %{name}-libs = %{version}-%{release}
Requires:       %{name}-libs-glib2 = %{version}-%{release}

%description libs-devel
Headers and libraries for developing applications that can communicate with
a PulseAudio sound server.

%package_help

%prep
%autosetup -n %{name}-%{version} -p1

sed -i.no_consolekit -e \
  's/^load-module module-console-kit/#load-module module-console-kit/' \
  src/daemon/default.pa.in


%build
%meson \
  -D system_user=pulse \
  -D system_group=pulse \
  -D access_group=pulse-access \
  -D oss-output=disabled \
  -D jack=disabled \
  -D lirc=disabled \
  -D tcpwrap=disabled \
  -D bluez5=enabled \
  -D gstreamer=enabled \
  -D bluez5-gstreamer=enabled \
  -D gsettings=enabled \
  -D elogind=disabled \
  -D valgrind=disabled \
  -D gtk=disabled \
  -D soxr=disabled \
  -D webrtc-aec=disabled \
  -D systemd=disabled \
  -D udevrulesdir=%{_udevrulesdir} \
  -D tests=true
 
%meson_build

%meson_build doxygen

%install
%meson_install

## delete rpath
touch %{name}-%{_arch}.conf
echo "%{_libdir}/pulseaudio/modules"  >> %{name}-%{_arch}.conf
echo "%{_libdir}/%{name}/"  >> %{name}-%{_arch}.conf
find $RPM_BUILD_ROOT/ -type f -exec file {} ';' | grep "ELF" | awk -F ':' '{print $1}' | xargs -i chrpath --delete {}
mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
install -p -m644 %{name}-%{_arch}.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d/

%find_lang %{name}

# PA_MODULE_DEPRECATED("Please use module-udev-detect instead of module-detect!");
rm -fv %{buildroot}%{_libdir}/pulseaudio/modules/module-detect.so

%check
%meson_test || TESTS_ERROR=$?
if [ "${TESTS_ERROR}" != "" ]; then
cat %{_vpath_builddir}/meson-logs/testlog.txt
exit $TESTS_ERROR
fi

%pre
getent group pulse-access >/dev/null || groupadd -r pulse-access
getent group pulse-rt >/dev/null || groupadd -r pulse-rt
getent group pulse >/dev/null || groupadd -f -g 171 -r pulse
if ! getent passwd pulse >/dev/null ; then
    if ! getent passwd 171 >/dev/null ; then
      useradd -r -u 171 -g pulse -d %{_localstatedir}/run/pulse -s /sbin/nologin -c "PulseAudio System Daemon" pulse
    else
      useradd -r -g pulse -d %{_localstatedir}/run/pulse -s /sbin/nologin -c "PulseAudio System Daemon" pulse
    fi
fi
exit 0

%posttrans
(grep '^load-module module-cork-music-on-phone$' %{_sysconfdir}/pulse/default.pa > /dev/null && \
 sed -i.rpmsave -e 's|^load-module module-cork-music-on-phone$|load-module module-role-cork|' \
 %{_sysconfdir}/pulse/default.pa
) ||:

%files
%license LICENSE GPL LGPL
%config(noreplace) %{_sysconfdir}/pulse/daemon.conf
%config(noreplace) %{_sysconfdir}/pulse/*.pa
%config(noreplace) %{_sysconfdir}/pulse/client.conf
%{_datadir}/dbus-1/system.d/pulseaudio-system.conf
%{_sysconfdir}/xdg/autostart/pulseaudio.desktop
%{_datadir}/bash-completion/completions/*
%{_bindir}/pulseaudio
%{_bindir}/start-pulseaudio-x11
%{_bindir}/pacat
%{_bindir}/pacmd
%{_bindir}/pactl
%{_bindir}/paplay
%{_bindir}/parec
%{_bindir}/pamon
%{_bindir}/parecord
%{_bindir}/pax11publish
%{_bindir}/pasuspender
%{_bindir}/pa-info
%dir %{_libdir}/pulseaudio
%{_libdir}/pulseaudio/libpulsecore-%{pa_major}.so
%dir %{_libdir}/pulseaudio/modules
%{_libdir}/pulseaudio/modules/libalsa-util.so
%{_libdir}/pulseaudio/modules/libavahi-wrap.so
%{_libdir}/pulseaudio/modules/libcli.so
%{_libdir}/pulseaudio/modules/libprotocol-cli.so
%{_libdir}/pulseaudio/modules/libprotocol-http.so
%{_libdir}/pulseaudio/modules/libprotocol-native.so
%{_libdir}/pulseaudio/modules/libprotocol-simple.so
%{_libdir}/pulseaudio/modules/libraop.so
%{_libdir}/pulseaudio/modules/librtp.so
%{_libdir}/pulseaudio/modules/module-allow-passthrough.so
%{_libdir}/pulseaudio/modules/module-alsa-card.so
%{_libdir}/pulseaudio/modules/module-alsa-sink.so
%{_libdir}/pulseaudio/modules/module-alsa-source.so
%{_libdir}/pulseaudio/modules/module-always-sink.so
%{_libdir}/pulseaudio/modules/module-always-source.so
%{_libdir}/pulseaudio/modules/module-augment-properties.so
%{_libdir}/pulseaudio/modules/module-card-restore.so
%{_libdir}/pulseaudio/modules/module-cli-protocol-tcp.so
%{_libdir}/pulseaudio/modules/module-cli-protocol-unix.so
%{_libdir}/pulseaudio/modules/module-cli.so
%{_libdir}/pulseaudio/modules/module-combine-sink.so
%{_libdir}/pulseaudio/modules/module-combine.so
%{_libdir}/pulseaudio/modules/module-console-kit.so
%{_libdir}/pulseaudio/modules/module-dbus-protocol.so
%{_libdir}/pulseaudio/modules/module-default-device-restore.so
%{_libdir}/pulseaudio/modules/module-device-manager.so
%{_libdir}/pulseaudio/modules/module-device-restore.so
%{_libdir}/pulseaudio/modules/module-echo-cancel.so
%{_libdir}/pulseaudio/modules/module-filter-apply.so
%{_libdir}/pulseaudio/modules/module-filter-heuristics.so
%{_libdir}/pulseaudio/modules/module-gsettings.so
%{_libdir}/pulseaudio/modules/module-hal-detect.so
%{_libdir}/pulseaudio/modules/module-http-protocol-tcp.so
%{_libdir}/pulseaudio/modules/module-http-protocol-unix.so
%{_libdir}/pulseaudio/modules/module-intended-roles.so
%{_libdir}/pulseaudio/modules/module-ladspa-sink.so
%{_libdir}/pulseaudio/modules/module-loopback.so
%{_libdir}/pulseaudio/modules/module-match.so
%{_libdir}/pulseaudio/modules/module-mmkbd-evdev.so
%{_libdir}/pulseaudio/modules/module-native-protocol-fd.so
%{_libdir}/pulseaudio/modules/module-native-protocol-tcp.so
%{_libdir}/pulseaudio/modules/module-native-protocol-unix.so
%{_libdir}/pulseaudio/modules/module-null-sink.so
%{_libdir}/pulseaudio/modules/module-null-source.so
%{_libdir}/pulseaudio/modules/module-pipe-sink.so
%{_libdir}/pulseaudio/modules/module-pipe-source.so
%{_libdir}/pulseaudio/modules/module-position-event-sounds.so
%{_libdir}/pulseaudio/modules/module-raop-discover.so
%{_libdir}/pulseaudio/modules/module-raop-sink.so
%{_libdir}/pulseaudio/modules/module-remap-sink.so
%{_libdir}/pulseaudio/modules/module-remap-source.so
%{_libdir}/pulseaudio/modules/module-rescue-streams.so
%{_libdir}/pulseaudio/modules/module-role-cork.so
%{_libdir}/pulseaudio/modules/module-role-ducking.so
%{_libdir}/pulseaudio/modules/module-rtp-recv.so
%{_libdir}/pulseaudio/modules/module-rtp-send.so
%{_libdir}/pulseaudio/modules/module-rygel-media-server.so
%{_libdir}/pulseaudio/modules/module-simple-protocol-tcp.so
%{_libdir}/pulseaudio/modules/module-simple-protocol-unix.so
%{_libdir}/pulseaudio/modules/module-sine-source.so
%{_libdir}/pulseaudio/modules/module-sine.so
%{_libdir}/pulseaudio/modules/module-stream-restore.so
%{_libdir}/pulseaudio/modules/module-suspend-on-idle.so
%{_libdir}/pulseaudio/modules/module-switch-on-connect.so
%{_libdir}/pulseaudio/modules/module-switch-on-port-available.so
%{_libdir}/pulseaudio/modules/module-tunnel-sink-new.so
%{_libdir}/pulseaudio/modules/module-tunnel-sink.so
%{_libdir}/pulseaudio/modules/module-tunnel-source-new.so
%{_libdir}/pulseaudio/modules/module-tunnel-source.so
%{_libdir}/pulseaudio/modules/module-udev-detect.so
%{_libdir}/pulseaudio/modules/module-virtual-sink.so
%{_libdir}/pulseaudio/modules/module-virtual-source.so
%{_libdir}/pulseaudio/modules/module-virtual-surround-sink.so
%{_libdir}/pulseaudio/modules/module-volume-restore.so
%{_libdir}/pulseaudio/modules/module-x11-bell.so
%{_libdir}/pulseaudio/modules/module-x11-cork-request.so
%{_libdir}/pulseaudio/modules/module-x11-publish.so
%{_libdir}/pulseaudio/modules/module-x11-xsmp.so
%{_libdir}/pulseaudio/modules/module-zeroconf-discover.so
%{_libdir}/pulseaudio/modules/module-zeroconf-publish.so
%{_udevrulesdir}/90-pulseaudio.rules
%dir %{_libexecdir}/pulse
%{_libexecdir}/pulse/*-helper
%{_datadir}/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml
%dir %{_datadir}/pulseaudio
%{_datadir}/pulseaudio/alsa-mixer
%{_datadir}/zsh/site-functions/_pulseaudio
%{_datadir}/GConf/gsettings/pulseaudio.convert
%config(noreplace) %{_sysconfdir}/xdg/Xwayland-session.d/00-pulseaudio-x11

%files qpaeq
%{_bindir}/qpaeq
%{_libdir}/pulseaudio/modules/module-equalizer-sink.so

%files module-bluetooth
%{_libdir}/pulseaudio/modules/libbluez*-util.so
%{_libdir}/pulseaudio/modules/module-bluez*-device.so
%{_libdir}/pulseaudio/modules/module-bluez*-discover.so
%{_libdir}/pulseaudio/modules/module-bluetooth-discover.so
%{_libdir}/pulseaudio/modules/module-bluetooth-policy.so
	
%files libs -f %{name}.lang
%dir %{_sysconfdir}/pulse/
%config(noreplace) %{_sysconfdir}/pulse/client.conf
%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
%{_libdir}/libpulse.so.0*
%{_libdir}/libpulse-simple.so.0*
%dir %{_libdir}/pulseaudio/
%{_libdir}/pulseaudio/libpulsecommon-%{pa_major}.so

%files libs-glib2
%{_libdir}/libpulse-mainloop-glib.so.0*

%files libs-devel
%{_includedir}/pulse
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
%{_datadir}/vala/vapi/*
%{_libdir}/cmake/PulseAudio/

%files help
%{_mandir}/man?/*

%changelog
* Thu Dec 05 2024 Funda Wang <fundawang@yeah.net> - 17.0-3
- clenaup buildrequires

* Mon Oct 14 2024 Funda Wang <fundawang@yeah.net> - 17.0-2
- add upstream patch fixing running tests with impossible alignments
- move language files into lib package
- cleanup spec

* Tue Feb 06 2024 taoyuxiang <taoyuxiang2@huawei.com> - 17.0-1
- update to version 17.0

* Wed Nov 01 2023 liweigang <weigangli99@gmail.com> - 16.99.1-1
- update to version 16.99.1

* Thu Apr 27 2023 wuxu <wuxu.wu@huawei.com> - 16.1-9
- alsa-ucm: Always create device conflicting/supported device idxsets

* Tue Mar 14 2023 peijiankang <peijiankang@kylinos.cn> - 16.1-8
- fix cannot open shared object file libprotocol-native.so libalsa-util.so

* Mon Dec 12 2022 wuxu <wuxu.wu@huawei.com> - 16.1-7
- idxset: Add reverse iteration functions, set comparison operations adn set contains() function

* Mon Dec 12 2022 wuxu <wuxu.wu@huawei.com> - 16.1-6
- alsa-mixer: allow to re-attach the mixer control element

* Mon Dec 12 2022 wuxu <wuxu.wu@huawei.com> - 16.1-5
- alsa-mixer: avoid assertion at alsa-lib mixer API when element removal

* Tue Oct 18 2022 Liu Zixian <liuzixian4@huawei.com> - 16.1-4
- delete unused BuildRequires

* Thu Sep 22 2022 lijianglin <lijianglin2@huawei.com> - 16.1-3
- delete rpath info

* Mon Aug 15 2022 luoqing <luoqing@kylinsec.com.cn> - 16.1-2
- fix the problem that autostart failed

* Thu Aug 04 2022 Qingqing Li <liqingqing3@huawei.com> - 16.1-1
- upgrade to 16.1

* Tue Aug 02 2022 liweiganga <liweiganga@uniontech.com> - 15.0-6
- Fix gsettings-helper crash
- Issue: https://gitee.com/src-openeuler/pulseaudio/issues/I4WAEZ

* Tue Jul 26 2022 tangjie02 <tangjie02@kylinsec.com> - 15.0-5
- fix the problem that the description field of pa_alsa_path struct isn't translated

* Mon Jan 17 2022 zhouwenpei <zhouwenpei1@huawei.com> - 15.0-4
- remove dependency on GConf2 package 

* Thu Jan 13 2022 zhouwenpei <zhouwenpei1@huawei.com> - 15.0-3
- clean up .so and disabled webrtc-aec

* Fri Dec 10 2021 zhouwenpei <zhouwenpei1@huawei.com> - 15.0-2
- fix build error and split packages

* Sat Dec 4 2021 zhouwenpei <zhouwenpei1@huawei.com> - 15.0-1
- update to version 15.0

* Fri Oct 30 2020 xinghe <xinghe1@huawei.com> - 13.0-4
- remove python2 dependency

* Fri Sep 25 2020 xinghe <xinghe1@huawei.com> - 13.0-3
- remove old tar packages

* Mon Sep 14 2020 xinghe <xinghe1@huawei.com> - 13.0-2
- remove repeat gdm-hooks packages

* Fri Apr 24 2020 Chunsheng Luo <luochunsheng@huawei.com> - 13.0-1
- update to version 13.0

* Fri Oct 18 2019 shenyangyang <shenyangyang4@huawei.com> - 12.2-3
- Type:enhancement
- ID:NA
- SUG:NA
- DESC:add provides of pulseaudio-libs-devel(aarch-64) needed by libmikmod-devel

* Mon Sep 16 2019 openEuler Buildteam <buildteam@openeuler.org> - 12.2-2
- Package init