|
|
|
@ -1,73 +1,39 @@ |
|
|
|
|
{ stdenv, fetchurl, pkgconfig, intltool, automake, autoconf, libtool |
|
|
|
|
, json_c, libsndfile, gettext, check |
|
|
|
|
|
|
|
|
|
# Optional Dependencies |
|
|
|
|
, xlibs ? null, libcap ? null, valgrind ? null, oss ? null, coreaudio ? null |
|
|
|
|
, alsaLib ? null, esound ? null, glib ? null, gtk3 ? null, gconf ? null |
|
|
|
|
, avahi ? null, libjack2 ? null, libasyncns ? null, lirc ? null, dbus ? null |
|
|
|
|
, sbc ? null, bluez5 ? null, udev ? null, openssl ? null, fftw ? null |
|
|
|
|
, speexdsp ? null, systemd ? null, webrtc-audio-processing ? null |
|
|
|
|
{ lib, stdenv, fetchurl, pkgconfig, intltool, autoreconfHook |
|
|
|
|
, json_c, libsndfile |
|
|
|
|
, xlibs, libcap, alsaLib, glib |
|
|
|
|
, avahi, libjack2, libasyncns, lirc, dbus |
|
|
|
|
, sbc, bluez5, udev, openssl, fftwFloat |
|
|
|
|
, speexdsp, systemd, webrtc-audio-processing, gconf ? null |
|
|
|
|
|
|
|
|
|
# Database selection |
|
|
|
|
, tdb ? null, gdbm ? null |
|
|
|
|
|
|
|
|
|
# Extra options |
|
|
|
|
, prefix ? "" |
|
|
|
|
, x11Support ? false |
|
|
|
|
|
|
|
|
|
, useSystemd ? true |
|
|
|
|
|
|
|
|
|
, # Whether to support the JACK sound system as a backend. |
|
|
|
|
jackaudioSupport ? false |
|
|
|
|
|
|
|
|
|
, # Whether to build the OSS wrapper ("padsp"). |
|
|
|
|
ossWrapper ? true |
|
|
|
|
|
|
|
|
|
, airtunesSupport ? false |
|
|
|
|
|
|
|
|
|
, gconfSupport ? false |
|
|
|
|
|
|
|
|
|
, bluetoothSupport ? false |
|
|
|
|
|
|
|
|
|
, remoteControlSupport ? false |
|
|
|
|
|
|
|
|
|
, zeroconfSupport ? false |
|
|
|
|
|
|
|
|
|
, # Whether to build only the library. |
|
|
|
|
libOnly ? false |
|
|
|
|
}: |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
mkFlag = trueStr: falseStr: cond: name: val: |
|
|
|
|
if cond == null then null else |
|
|
|
|
"--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}"; |
|
|
|
|
mkEnable = mkFlag "enable-" "disable-"; |
|
|
|
|
mkWith = mkFlag "with-" "without-"; |
|
|
|
|
mkOther = mkFlag "" "" true; |
|
|
|
|
|
|
|
|
|
shouldUsePkg = pkg: if pkg != null && stdenv.lib.any (x: x == stdenv.system) pkg.meta.platforms then pkg else null; |
|
|
|
|
|
|
|
|
|
libOnly = prefix == "lib"; |
|
|
|
|
|
|
|
|
|
hasXlibs = xlibs != null; |
|
|
|
|
|
|
|
|
|
optLibcap = shouldUsePkg libcap; |
|
|
|
|
hasCaps = optLibcap != null || stdenv.isFreeBSD; # Built-in on FreeBSD |
|
|
|
|
|
|
|
|
|
optOss = if libOnly then null else shouldUsePkg oss; |
|
|
|
|
hasOss = optOss != null || stdenv.isFreeBSD; # Built-in on FreeBSD |
|
|
|
|
|
|
|
|
|
optCoreaudio = if libOnly then null else shouldUsePkg coreaudio; |
|
|
|
|
optAlsaLib = if libOnly then null else shouldUsePkg alsaLib; |
|
|
|
|
optEsound = if libOnly then null else shouldUsePkg esound; |
|
|
|
|
optGlib = shouldUsePkg glib; |
|
|
|
|
optGtk3 = if libOnly || !hasXlibs then null else shouldUsePkg gtk3; |
|
|
|
|
optGconf = if libOnly then null else shouldUsePkg gconf; |
|
|
|
|
optAvahi = if libOnly then null else shouldUsePkg avahi; |
|
|
|
|
optLibjack2 = if libOnly then null else shouldUsePkg libjack2; |
|
|
|
|
optLibasyncns = shouldUsePkg libasyncns; |
|
|
|
|
optLirc = if libOnly then null else shouldUsePkg lirc; |
|
|
|
|
optDbus = shouldUsePkg dbus; |
|
|
|
|
optSbc = if libOnly then null else shouldUsePkg sbc; |
|
|
|
|
optBluez5 = if optDbus == null || optSbc == null then null |
|
|
|
|
else shouldUsePkg bluez5; |
|
|
|
|
optUdev = if libOnly then null else shouldUsePkg udev; |
|
|
|
|
optOpenssl = if libOnly then null else shouldUsePkg openssl; |
|
|
|
|
optFftw = shouldUsePkg fftw; |
|
|
|
|
optSpeexdsp = shouldUsePkg speexdsp; |
|
|
|
|
optSystemd = shouldUsePkg systemd; |
|
|
|
|
optWebrtc-audio-processing = if libOnly then null else shouldUsePkg webrtc-audio-processing; |
|
|
|
|
hasWebrtc = if libOnly then null else optWebrtc-audio-processing != null; |
|
|
|
|
|
|
|
|
|
# Pick a database to use |
|
|
|
|
databaseName = if tdb != null then "tdb" else |
|
|
|
|
if gdbm != null then "gdbm" else "simple"; |
|
|
|
|
database = { |
|
|
|
|
tdb = tdb; |
|
|
|
|
gdbm = gdbm; |
|
|
|
|
simple = null; |
|
|
|
|
}.${databaseName}; |
|
|
|
|
in |
|
|
|
|
stdenv.mkDerivation rec { |
|
|
|
|
name = "${prefix}pulseaudio-${version}"; |
|
|
|
|
name = "${if libOnly then "lib" else ""}pulseaudio-${version}"; |
|
|
|
|
version = "6.0"; |
|
|
|
|
|
|
|
|
|
src = fetchurl { |
|
|
|
@ -77,16 +43,23 @@ stdenv.mkDerivation rec { |
|
|
|
|
|
|
|
|
|
patches = [ ./caps-fix.patch ]; |
|
|
|
|
|
|
|
|
|
nativeBuildInputs = [ pkgconfig intltool automake autoconf libtool ]; |
|
|
|
|
buildInputs = [ |
|
|
|
|
json_c libsndfile gettext check database |
|
|
|
|
|
|
|
|
|
optLibcap valgrind optOss optCoreaudio optAlsaLib optEsound optGlib |
|
|
|
|
optGtk3 optGconf optAvahi optLibjack2 optLibasyncns optLirc optDbus optUdev |
|
|
|
|
optOpenssl optFftw optSpeexdsp optSystemd optWebrtc-audio-processing |
|
|
|
|
] ++ stdenv.lib.optionals hasXlibs (with xlibs; [ |
|
|
|
|
libX11 libxcb libICE libSM libXtst xextproto libXi |
|
|
|
|
]) ++ stdenv.lib.optionals (optBluez5 != null) [ optBluez5 optSbc ]; |
|
|
|
|
nativeBuildInputs = [ pkgconfig intltool autoreconfHook ]; |
|
|
|
|
|
|
|
|
|
buildInputs = |
|
|
|
|
[ json_c libsndfile speexdsp fftwFloat ] |
|
|
|
|
++ lib.optionals stdenv.isLinux [ libcap glib dbus.libs ] |
|
|
|
|
++ lib.optionals (!libOnly) ( |
|
|
|
|
[ libasyncns webrtc-audio-processing ] |
|
|
|
|
++ lib.optional jackaudioSupport libjack2 |
|
|
|
|
++ lib.optionals x11Support [ xlibs.xlibs xlibs.libXtst xlibs.libXi ] |
|
|
|
|
++ lib.optional useSystemd systemd |
|
|
|
|
++ lib.optionals stdenv.isLinux [ alsaLib udev ] |
|
|
|
|
++ lib.optional airtunesSupport openssl |
|
|
|
|
++ lib.optional gconfSupport gconf |
|
|
|
|
++ lib.optionals bluetoothSupport [ bluez5 sbc ] |
|
|
|
|
++ lib.optional remoteControlSupport lirc |
|
|
|
|
++ lib.optional zeroconfSupport avahi |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
preConfigure = '' |
|
|
|
|
# Performs and autoreconf |
|
|
|
@ -98,62 +71,24 @@ stdenv.mkDerivation rec { |
|
|
|
|
sed -i "src/Makefile.in" \ |
|
|
|
|
-e "s|udevrulesdir[[:blank:]]*=.*$|udevrulesdir = $out/lib/udev/rules.d|g" |
|
|
|
|
|
|
|
|
|
# don't install proximity-helper as root and setuid |
|
|
|
|
sed -i "src/Makefile.in" \ |
|
|
|
|
-e "s|chown root|true |" \ |
|
|
|
|
-e "s|chmod r+s |true |" |
|
|
|
|
# don't install proximity-helper as root and setuid |
|
|
|
|
sed -i "src/Makefile.in" \ |
|
|
|
|
-e "s|chown root|true |" \ |
|
|
|
|
-e "s|chmod r+s |true |" |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
configureFlags = [ |
|
|
|
|
(mkOther "localstatedir" "/var") |
|
|
|
|
(mkOther "sysconfdir" "/etc") |
|
|
|
|
(mkEnable false "atomic-arm-memory-barrier" null) # TODO: Enable on armv8 |
|
|
|
|
(mkEnable false "neon-opt" null) # TODO: Enable on armv8 |
|
|
|
|
(mkEnable hasXlibs "x11" null) |
|
|
|
|
(mkWith hasCaps "caps" optLibcap) |
|
|
|
|
(mkEnable true "tests" null) |
|
|
|
|
(mkEnable false "samplerate" null) # Deprecated |
|
|
|
|
(mkWith true "database" databaseName) |
|
|
|
|
(mkEnable hasOss "oss-output" null) |
|
|
|
|
(mkEnable true "oss-wrapper" null) # Does not use OSS |
|
|
|
|
(mkEnable (optCoreaudio != null) "coreaudio-output" null) |
|
|
|
|
(mkEnable (optAlsaLib != null) "alsa" null) |
|
|
|
|
(mkEnable (optEsound != null) "esound" null) |
|
|
|
|
(mkEnable false "solaris" null) |
|
|
|
|
(mkEnable false "waveout" null) # Windows Only |
|
|
|
|
(mkEnable (optGlib != null) "glib2" null) |
|
|
|
|
(mkEnable (optGtk3 != null) "gtk3" null) |
|
|
|
|
(mkEnable (optGconf != null) "gconf" null) |
|
|
|
|
(mkEnable (optAvahi != null) "avahi" null) |
|
|
|
|
(mkEnable (optLibjack2 != null) "jack" null) |
|
|
|
|
(mkEnable (optLibasyncns != null) "asyncns" null) |
|
|
|
|
(mkEnable false "tcpwrap" null) |
|
|
|
|
(mkEnable (optLirc != null) "lirc" null) |
|
|
|
|
(mkEnable (optDbus != null) "dbus" null) |
|
|
|
|
(mkEnable false "bluez4" null) |
|
|
|
|
(mkEnable (optBluez5 != null) "bluez5" null) |
|
|
|
|
(mkEnable (optBluez5 != null) "bluez5-ofono-headset" null) |
|
|
|
|
(mkEnable (optBluez5 != null) "bluez5-native-headset" null) |
|
|
|
|
(mkEnable (optUdev != null) "udev" null) |
|
|
|
|
(mkEnable false "hal-compat" null) |
|
|
|
|
(mkEnable true "ipv6" null) |
|
|
|
|
(mkEnable (optOpenssl != null) "openssl" null) |
|
|
|
|
(mkWith (optFftw != null) "fftw" null) |
|
|
|
|
(mkWith (optSpeexdsp != null) "speex" null) |
|
|
|
|
(mkEnable false "xen" null) |
|
|
|
|
(mkEnable false "gcov" null) |
|
|
|
|
(mkEnable (optSystemd != null) "systemd-daemon" null) |
|
|
|
|
(mkEnable (optSystemd != null) "systemd-login" null) |
|
|
|
|
(mkEnable (optSystemd != null) "systemd-journal" null) |
|
|
|
|
(mkEnable true "manpages" null) |
|
|
|
|
(mkEnable hasWebrtc "webrtc-aec" null) |
|
|
|
|
(mkEnable true "adrian-aec" null) |
|
|
|
|
(mkWith true "system-user" "pulse") |
|
|
|
|
(mkWith true "system-group" "pulse") |
|
|
|
|
(mkWith true "access-group" "audio") |
|
|
|
|
(mkWith true "systemduserunitdir" "\${out}/lib/systemd/user") |
|
|
|
|
(mkWith stdenv.isDarwin "mac-sysroot" "/") |
|
|
|
|
]; |
|
|
|
|
configureFlags = |
|
|
|
|
[ "--disable-solaris" |
|
|
|
|
"--disable-jack" |
|
|
|
|
"--disable-oss-output" |
|
|
|
|
] ++ lib.optional (!ossWrapper) "--disable-oss-wrapper" ++ |
|
|
|
|
[ "--localstatedir=/var" |
|
|
|
|
"--sysconfdir=/etc" |
|
|
|
|
"--with-access-group=audio" |
|
|
|
|
] |
|
|
|
|
++ lib.optional (jackaudioSupport && !libOnly) "--enable-jack" |
|
|
|
|
++ lib.optional stdenv.isDarwin "--with-mac-sysroot=/" |
|
|
|
|
++ lib.optional (stdenv.isLinux && useSystemd) "--with-systemduserunitdir=\${out}/lib/systemd/user"; |
|
|
|
|
|
|
|
|
|
enableParallelBuilding = true; |
|
|
|
|
|
|
|
|
@ -162,26 +97,23 @@ stdenv.mkDerivation rec { |
|
|
|
|
# the alternative is to copy the files from /usr/include to src, but there are |
|
|
|
|
# probably a large number of files that would need to be copied (I stopped |
|
|
|
|
# after the seventh) |
|
|
|
|
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin |
|
|
|
|
"-I/usr/include"; |
|
|
|
|
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I/usr/include"; |
|
|
|
|
|
|
|
|
|
installFlags = [ |
|
|
|
|
"sysconfdir=$(out)/etc" |
|
|
|
|
"pulseconfdir=$(out)/etc/pulse" |
|
|
|
|
]; |
|
|
|
|
installFlags = |
|
|
|
|
[ "sysconfdir=$(out)/etc" |
|
|
|
|
"pulseconfdir=$(out)/etc/pulse" |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
postInstall = stdenv.lib.optionalString libOnly '' |
|
|
|
|
postInstall = lib.optionalString libOnly '' |
|
|
|
|
rm -rf $out/{bin,share,etc,lib/{pulse-*,systemd}} |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
meta = with stdenv.lib; { |
|
|
|
|
meta = { |
|
|
|
|
description = "Sound server for POSIX and Win32 systems"; |
|
|
|
|
homepage = http://www.pulseaudio.org/; |
|
|
|
|
# Note: Practically, the server is under the GPL due to the |
|
|
|
|
# dependency on `libsamplerate'. See `LICENSE' for details. |
|
|
|
|
licenses = licenses.lgpl2Plus; |
|
|
|
|
maintainers = with maintainers; [ lovek323 wkennington ]; |
|
|
|
|
platforms = platforms.unix; |
|
|
|
|
licenses = lib.licenses.lgpl2Plus; |
|
|
|
|
maintainers = with lib.maintainers; [ lovek323 wkennington ]; |
|
|
|
|
platforms = lib.platforms.unix; |
|
|
|
|
|
|
|
|
|
longDescription = '' |
|
|
|
|
PulseAudio is a sound server for POSIX and Win32 systems. A |
|
|
|
|