summary refs log tree commit diff
path: root/pkgs/servers/pulseaudio
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-06-04 12:57:12 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-06-04 14:54:54 +0200
commitf1d465f429252d7c58a920ad9d7ee93e34e7fad9 (patch)
tree6ba37adf4b205f0d204aae8739f9e34557d28c97 /pkgs/servers/pulseaudio
parentf08c8bc752825ddacb12bcaeea1b2744a45aafd7 (diff)
downloadnixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar.gz
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar.bz2
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar.lz
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar.xz
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.tar.zst
nixpkgs-f1d465f429252d7c58a920ad9d7ee93e34e7fad9.zip
pulseaudio: Revert to regular style
Also, the NixOS module uses pulseaudioLight in order to prevent
excessive dependency bloat.
Diffstat (limited to 'pkgs/servers/pulseaudio')
-rw-r--r--pkgs/servers/pulseaudio/default.nix212
1 files changed, 72 insertions, 140 deletions
diff --git a/pkgs/servers/pulseaudio/default.nix b/pkgs/servers/pulseaudio/default.nix
index 8196caa08d9..5de447da0dd 100644
--- a/pkgs/servers/pulseaudio/default.nix
+++ b/pkgs/servers/pulseaudio/default.nix
@@ -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