Skip to content

Commit

Permalink
pulseaudio: Revert to regular style
Browse files Browse the repository at this point in the history
Also, the NixOS module uses pulseaudioLight in order to prevent
excessive dependency bloat.
  • Loading branch information
edolstra committed Jun 4, 2015
1 parent f08c8bc commit f1d465f
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 171 deletions.
8 changes: 4 additions & 4 deletions nixos/modules/config/pulseaudio.nix
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,12 @@ in {

package = mkOption {
type = types.package;
default = pulseaudioFull;
default = pulseaudioLight;
example = literalExample "pkgs.pulseaudioFull";
description = ''
The PulseAudio derivation to use. This can be used to disable
features (such as JACK support, Bluetooth) that are enabled in the
pulseaudioFull package in Nixpkgs.
The PulseAudio derivation to use. This can be used to enable
features (such as JACK support, Bluetooth) via the
<literal>pulseaudioFull</literal> package.
'';
};

Expand Down
212 changes: 72 additions & 140 deletions pkgs/servers/pulseaudio/default.nix
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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
Expand All @@ -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;

Expand All @@ -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
Expand Down
38 changes: 11 additions & 27 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8816,37 +8816,21 @@ let

pshs = callPackage ../servers/http/pshs { };

libpulseaudio = pulseaudioFull.override {
prefix = "lib";
};
libpulseaudio = callPackage ../servers/pulseaudio { libOnly = true; };

# Name is changed to prevent use in packages
# please use libpulseaudio instead
pulseaudioLight = pulseaudioFull.override {
# The following are disabled in the default build, because if this
# functionality is desired, they are only needed in the PulseAudio
# server.
xlibs = null;
coreaudio = null;
esound = null;
libjack2 = null;
avahi = null;
lirc = null;
bluez5 = null;
tdb = null;
gdbm = null;
gtk3 = null;
webrtc-audio-processing = null;
gconf = null;
libasyncns = null;
};
# Name is changed to prevent use in packages;
# please use libpulseaudio instead.
pulseaudioLight = callPackage ../servers/pulseaudio { };

pulseaudioFull = callPackage ../servers/pulseaudio {
gconf = gnome3.gconf;
fftw = fftwFloat;

# Disabled unless debugging
valgrind = null;
x11Support = true;
jackaudioSupport = true;
airtunesSupport = true;
gconfSupport = true;
bluetoothSupport = true;
remoteControlSupport = true;
zeroconfSupport = true;
};

tomcat_connectors = callPackage ../servers/http/apache-modules/tomcat-connectors { };
Expand Down

0 comments on commit f1d465f

Please sign in to comment.