summary refs log blame commit diff
path: root/pkgs/applications/kde-apps-15.04/default.nix
blob: 1e94ffe11a26b241eb5421e0e1adfc428af36459 (plain) (tree)































                                                                               
                                    





























































































































































































                                                                                    
                                                                           




































































































                                                                               
# Maintainer's Notes:
#
# Minor updates:
#  1. Edit ./manifest.sh to point to the updated URL. Upstream sometimes
#     releases updates that include only the changed packages; in this case,
#     multiple URLs can be provided and the results will be merged.
#  2. Run ./manifest.sh and ./dependencies.sh.
#  3. Build and enjoy.
#
# Major updates:
#  We prefer not to immediately overwrite older versions with major updates, so
#  make a copy of this directory first. After copying, be sure to delete ./tmp
#  if it exists. Then follow the minor update instructions.

{ autonix, symlinkJoin, kde4, kf5, pkgs, qt4, qt5, stdenv, debug ? false }:

with stdenv.lib; with autonix;

let kf5Orig = kf5; in

let

  kf5 = kf5Orig.override { inherit debug qt5; };

  mirror = "mirror://kde";

  renames =
    (builtins.removeAttrs
      (import ./renames.nix {})
      ["Backend" "CTest"])
    // {
      "KDE4" = "kdelibs";
      "KF5KDEGames" = "libkdegames";
      "Kexiv2" = "libkexiv2";
      "Kdcraw" = "libkdcraw";
      "Kipi" = "libkipi";
      "LibKMahjongg" = "libkmahjongg";
      "LibKonq" = "kde-baseapps";
    };

  mkDerivation = drv: kf5.mkDerivation (drv // {
    preHook = (drv.preHook or "") + ''
      addQt4Plugins() {
        if [[ -d "$1/lib/qt4/plugins" ]]; then
            propagatedUserEnvPkgs+=" $1"
        fi

        if [[ -d "$1/lib/kde4/plugins" ]]; then
            propagatedUserEnvPkgs+=" $1"
        fi
      }

      envHooks+=(addQt4Plugins)
    '';
  });

  scope =
    # packages in this collection
    (mapAttrs (dep: name: kdeApps."${name}") renames) //
    # packages from KDE Frameworks 5
    kf5.scope //
    # packages from nixpkgs
    (with pkgs;
      {
        ACL = acl;
        Akonadi = kde4.akonadi;
        Alsa = alsaLib;
        Automoc4 = automoc4;
        Avahi = avahi;
        BISON = bison;
        Baloo = kde4.baloo;
        Boost = boost156;
        Canberra = libcanberra;
        Cdparanoia = cdparanoia;
        CUPS = cups;
        DBusMenuQt = libdbusmenu_qt;
        DjVuLibre = djvulibre;
        ENCHANT = enchant;
        EPub = ebook_tools;
        Eigen2 = eigen2;
        Eigen3 = eigen;
        Exiv2 = exiv2;
        FAM = fam;
        FFmpeg = ffmpeg;
        Flac = flac;
        FLEX = flex;
        Freetype = freetype;
        GMP = gmp;
        Gettext = gettext;
        Gpgme = gpgme;
        Gphoto2 = libgphoto2;
        Grantlee = grantlee;
        GSL = gsl;
        HUNSPELL = hunspell;
        HUpnp = herqq;
        Jasper = jasper;
        KActivities = kde4.kactivities;
        LCMS2 = lcms2;
        Ldap = openldap;
        LibAttica = attica;
        LibGcrypt = libgcrypt;
        LibSSH = libssh;
        LibSpectre = libspectre;
        LibVNCServer = libvncserver;
        Libical = libical;
        MusicBrainz3 = libmusicbrainz;
        NetworkManager = networkmanager;
        OggVorbis = libvorbis;
        OpenAL = openal;
        OpenEXR = openexr;
        Poppler = poppler_qt4;
        Prison = prison;
        PulseAudio = pulseaudio;
        PythonLibrary = python;
        Qalculate = libqalculate;
        QCA2 = qca2;
        QImageBlitz = qimageblitz;
        QJSON = qjson;
        Qt4 = qt4;
        Samba = samba;
        Sasl2 = cyrus_sasl;
        SharedDesktopOntologies = shared_desktop_ontologies;
        SndFile = libsndfile;
        Speechd = speechd;
        TIFF = libtiff;
        Taglib = taglib;
        TelepathyQt4 = telepathy_qt;
        TunePimp = libtunepimp;
        UDev = udev;
        USB = libusb;
        Xscreensaver = xscreensaver;
        Xsltproc = libxslt;
      }
    );

  qt5Only = tgt:
    let qt4Deps = [ "KDE4" "Phonon" ];
    in mapAttrs (name: if name == tgt then removePkgDeps qt4Deps else id);

  preResolve = super:
    fold (f: x: f x) super
      [
        (qt5Only "kmix")
        (userEnvPkg "SharedMimeInfo")
        (userEnvPkg "SharedDesktopOntologies")
        (blacklist ["artikulate"]) # build failure, wrong boost?
        (blacklist ["kde-dev-scripts" "kde-dev-utils"]) # docbook errors
        (blacklist ["kdewebdev"]) # unknown build failure
      ];

  l10nPkgQt4 = orig:
    let drvName = builtins.parseDrvName orig.name; in
    mkDerivation {
      name = "${drvName.name}-qt4-${drvName.version}";
      inherit (orig) src;
      buildInputs = [ kdeApps.kdelibs ];
      nativeBuildInputs = with pkgs; [ cmake gettext perl ];
      preConfigure = ''
        cd 4/
      '';
    };

  l10nPkgQt5 = orig:
    let drvName = builtins.parseDrvName orig.name; in
    mkDerivation {
      name = "${drvName.name}-qt5-${drvName.version}";
      inherit (orig) src;
      buildInputs = with kf5; [ kdoctools ki18n ];
      nativeBuildInputs = with pkgs; [ cmake kf5.extra-cmake-modules gettext perl ];
      preConfigure = ''
        cd 5/
      '';
    };

  l10nPkg = name: orig: symlinkJoin orig.name [(l10nPkgQt4 orig) (l10nPkgQt5 orig)];

  removeL10nPkgs = filterAttrs (n: v: !(hasPrefix "kde-l10n") n);

  postResolve = super:
    (removeL10nPkgs super) // {

      ark = with pkgs; super.ark // {
        buildInputs = (super.ark.buildInputs or []) ++ [ makeWrapper ];
        postInstall = ''
          wrapProgram $out/bin/ark --prefix PATH : "${unzipNLS}/bin"
        '';
      };

      ffmpegthumbs = with pkgs; super.ffmpegthumbs // {
        nativeBuildInputs = super.ffmpegthumbs.nativeBuildInputs ++ [pkgconfig];
      };

      kalzium = with pkgs; super.kalzium // {
        nativeBuildInputs = super.kalzium.nativeBuildInputs ++ [pkgconfig];
      };

      kde-runtime = with pkgs; super.kde-runtime // {
        buildInputs =
          super.kde-runtime.buildInputs ++ [libcanberra];
        nativeBuildInputs =
          super.kde-runtime.nativeBuildInputs ++ [pkgconfig];
        NIX_CFLAGS_COMPILE =
          (super.kde-runtime.NIX_CFLAGS_COMPILE or "")
          + " -I${ilmbase}/include/OpenEXR";
        meta = { priority = 10; };
      };

      kde-workspace = with pkgs; super.kde-workspace // {
        buildInputs = with xlibs;
          super.kde-workspace.buildInputs
          ++
          [
            libxkbfile libXcomposite xcbutilimage xcbutilkeysyms
            xcbutilrenderutil
          ];
        nativeBuildInputs =
          super.kde-workspace.nativeBuildInputs
          ++ [ pkgconfig ];
        meta = { priority = 10; };
      };

      kdelibs = with pkgs; super.kdelibs // {
        buildInputs =
          super.kdelibs.buildInputs ++ [ attr libxslt polkit_qt4 xz pcre ];

        nativeBuildInputs =
          super.kdelibs.nativeBuildInputs ++ [ pkgconfig ];

        NIX_CFLAGS_COMPILE = "-I${ilmbase}/include/OpenEXR";

        propagatedBuildInputs =
          super.kdelibs.propagatedBuildInputs ++ [ qt4 soprano phonon strigi ];

        propagatedNativeBuildInputs =
          super.kdelibs.propagatedNativeBuildInputs
          ++ [ automoc4 cmake perl shared_mime_info ];

        patches = [ ./kdelibs/polkit-install.patch ];

        cmakeFlags = [
          "-DDOCBOOKXML_CURRENTDTD_DIR=${docbook_xml_dtd_42}/xml/dtd/docbook"
          "-DDOCBOOKXSL_DIR=${docbook_xsl}/xml/xsl/docbook"
          "-DHUPNP_ENABLED=ON"
          "-DWITH_SOLID_UDISKS2=ON"
          "-DKDE_DEFAULT_HOME=.kde"
        ];
      };

      kdepim = with pkgs; super.kdepim // {
        buildInputs =
          super.kdepim.buildInputs ++ [ gpgme libassuan ];
        nativeBuildInputs =
          super.kdepim.nativeBuildInputs ++ [ pkgconfig ];
      };

      kdepimlibs = with pkgs; super.kdepimlibs // {
        nativeBuildInputs =
          super.kdepimlibs.nativeBuildInputs ++ [ pkgconfig ];
      };

      kdesdk-thumbnailers = with pkgs; super.kdesdk-thumbnailers // {
        nativeBuildInputs =
          super.kdesdk-thumbnailers.nativeBuildInputs
          ++ [gettext];
      };

      kgpg = with pkgs; super.kgpg // {
        buildInputs = super.kgpg.buildInputs ++ [boost];
      };

      kmix = with pkgs; super.kmix // {
        nativeBuildInputs = super.kmix.nativeBuildInputs ++ [pkgconfig];
        cmakeFlags = [ "-DKMIX_KF5_BUILD=ON" ];
      };

      kmousetool = with pkgs; super.kmousetool // {
        buildInputs = with xlibs;
          super.kmousetool.buildInputs
          ++ [libXtst libXt];
      };

      kremotecontrol = with pkgs; super.kremotecontrol // {
        buildInputs = super.kremotecontrol.buildInputs ++ [xlibs.libXtst];
      };

      krfb = super.krfb // {
        buildInputs =
          super.krfb.buildInputs
          ++ [pkgs.xlibs.libXtst kde4.telepathy.common_internals];
      };

      libkdcraw = with pkgs; super.libkdcraw // {
        buildInputs = super.libkdcraw.buildInputs ++ [scope.KDE4 libraw];
        nativeBuildInputs = super.libkdcraw.nativeBuildInputs ++ [pkgconfig];
      };

      libkexiv2 = with pkgs; super.libkexiv2 // {
        buildInputs = super.libkexiv2.buildInputs ++ [exiv2 scope.KDE4];
      };

      libkface = with pkgs; super.libkface // {
        buildInputs = super.libkface.buildInputs ++ [scope.KDE4 opencv];
      };

      libkipi = with pkgs; super.libkipi // {
        buildInputs = super.libkipi.buildInputs ++ [scope.KDE4];
      };

      libksane = with pkgs; super.libksane // {
        buildInputs = super.libksane.buildInputs ++ [scope.KDE4 saneBackends];
      };

    };

  l10nManifest =
    filterAttrs
      (n: v: hasPrefix "kde-l10n" n)
      (importManifest ./manifest.nix { inherit mirror; });

  kdeApps = generateCollection ./. {
    inherit mkDerivation;
    inherit mirror preResolve postResolve renames scope;
  };

in kdeApps // (mapAttrs l10nPkg l10nManifest)