Author: urkud
Date: Fri Aug 19 15:37:12 2011
New Revision: 28693
URL: https://svn.nixos.org/websvn/nix/?rev=28693&sc=1
Log:
kde-4.7: let nix-env and hydra find all modules
List of changes:
* All individual packages moved to the top-level kde47 namespace.
* Utility functions moved back to kde-package/default.nix
nix-env will not find kde-4.7 modules unless you add something like
'kde4 = pkgs.recurseIntoAttrs pkgs.kde47;' to your packageOverrides.
This is done because kde-4.7.0 on NixOS is not ready yet.
Added:
nixpkgs/trunk/pkgs/desktops/kde-4.7/kde-package/default.nix
Modified:
nixpkgs/trunk/pkgs/desktops/kde-4.7/default.nix
nixpkgs/trunk/pkgs/top-level/all-packages.nix
Modified: nixpkgs/trunk/pkgs/desktops/kde-4.7/default.nix
==============================================================================
--- nixpkgs/trunk/pkgs/desktops/kde-4.7/default.nix Fri Aug 19 15:28:32
2011 (r28692)
+++ nixpkgs/trunk/pkgs/desktops/kde-4.7/default.nix Fri Aug 19 15:37:12
2011 (r28693)
@@ -1,92 +1,25 @@
-{ callPackage, runCommand, stdenv, fetchurl, qt47, cmake, automoc4 }:
+{ callPackage, callPackageOrig, stdenv, qt47 }:
let
release = "4.7.0";
- manifest = import (./kde-package + "/${release}.nix");
-
- kdesrc = name: fetchurl {
- url = "mirror://kde/" + (if manifest.stable then "" else "un")
- + "stable/${release}/src/${name}-${release}.tar.bz2";
- sha256 = builtins.getAttr name manifest.hashes;
+ # Need callPackageOrig to avoid infinite cycle
+ kde = callPackageOrig ./kde-package {
+ inherit release ignoreList extraSubpkgs callPackage;
};
- mergeMeta = meta:
- {
- homepage = http://www.kde.org;
- inherit (qt47.meta) platforms maintainers;
- } // meta;
-
- kdeMonoPkg = name: a@{meta, ...}:
- stdenv.mkDerivation ({
- name = "${name}-${release}";
- src = kdesrc name;
- meta = mergeMeta meta;
- } // (builtins.removeAttrs a [ "meta" ]));
- kdeMonolithic = name: path: callPackage path { kde = kdeMonoPkg name; };
-
- kdeSubdirPkg = module:
- {name, subdir ? name, sane ? name}:
- let name_ = name; in
- a@{cmakeFlags ? [], name ? name_, ...}:
- stdenv.mkDerivation ({
- name = "${name}-${release}";
- src = kdesrc module;
- cmakeFlags = ["-DDISABLE_ALL_OPTIONAL_SUBDIRECTORIES=TRUE"
- "-DBUILD_doc=TRUE" "-DBUILD_${subdir}=TRUE"] ++ cmakeFlags;
- } // (removeAttrs a [ "name" "cmakeFlags" ]));
-
- kdeSplittedPkg = module: {name, sane ? name}: kdeMonoPkg name;
-
- combinePkgs = pkgFun: module: pkgs:
- let
- f = p@{name, ...}:
- callPackage (./. + "/${module}/${name}.nix") { kde = pkgFun module p;
};
- list = map f pkgs;
- attrs = builtins.listToAttrs (map
- ({name, sane ? name, ...}@p: { name = sane; value = f p; })
- pkgs);
- in
- runCommand "${module}-${release}"
- ({passthru = attrs // {
- propagatedUserEnvPackages = list;
- recurseForDerivations = true;
- projects = attrs;
- };})
- ''
- mkdir -pv $out/nix-support
- echo "${toString list}" | tee
$out/nix-support/propagated-user-env-packages
- '';
-
- kdeModule = { module, sane ? module, split, pkgs ? [] }:
- let pkgs_ = filterPkgs module pkgs; in
- {
- name = sane;
- value =
- # Module is splitted by upstream
- if split then combinePkgs kdeSplittedPkg module pkgs_
- # Monolithic module
- else if pkgs == [] then kdeMonolithic module (./. + "/${module}.nix")
- # Module is splitted by us
- else combinePkgs kdeSubdirPkg module pkgs_;
- };
-
- kdepkgs = builtins.listToAttrs (map kdeModule manifest.modules);
-
- filterPkgs = module: (p:
- removeNames (stdenv.lib.attrByPath [module] [] ignoreList) p
- ++ (stdenv.lib.attrByPath [module] [] extraSubpkgs));
-
-# List difference, big - subst; optimised for empty subst
- removeNames = subst: big: stdenv.lib.fold (s: out: stdenv.lib.filter (x:
x.name != s) out) big subst;
-
+ # The list of igored individual modules
ignoreList = {
+ # kdeadmin/strigi-analyzer has no real code
kdeadmin = [ "strigi-analyzer" ];
+ # kdesdk/kioslave is splitted into kioslave-svn and kioslave-git
kdesdk = [ "kioslave" ];
+ # Most of kdebindings do not compile due to a bug in the buildsystem
kdebindings = [ "kimono" "korundum" "kross-interpreters" "perlkde" "perlqt"
"qtruby" "qyoto" "smokekde" ];
};
+ # Extra subpackages in the manifest format
extraSubpkgs = {
kdesdk =
[
@@ -104,29 +37,22 @@
};
in
-kdepkgs // kdepkgs.kdebase //
+
+kde.modules // kde.individual //
{
+ inherit (kde) manifest modules individual splittedModuleList;
recurseForRelease = true;
+
akonadi = callPackage ./support/akonadi { };
soprano = callPackage ./support/soprano { };
qt4 = qt47;
- kdebase_workspace = kdepkgs.kdebase.kde_workspace;
-
-# Propagate some libraries to the top-level
- inherit (kdepkgs.kdegraphics) libkdcraw libkipi libkexiv2 libksane;
- inherit (kdepkgs.kdebindings) pykde4;
- inherit (kdepkgs.kdeedu) libkdeedu;
+ kdebase_workspace = kde.individual.kde_workspace;
inherit release;
-# nix-instantiate /etc/nixos/nixpkgs -A kde47.moduleNames --strict to see
-# available packages
- moduleNames = stdenv.lib.mapAttrs
- (n: v: if v ? projects then builtins.attrNames v.projects else null)
kdepkgs;
-
- full = stdenv.lib.attrValues kdepkgs;
+ full = stdenv.lib.attrValues kde.modules;
l10n = callPackage ./l10n { inherit release; };
}
Added: nixpkgs/trunk/pkgs/desktops/kde-4.7/kde-package/default.nix
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ nixpkgs/trunk/pkgs/desktops/kde-4.7/kde-package/default.nix Fri Aug 19
15:37:12 2011 (r28693)
@@ -0,0 +1,120 @@
+{ callPackage, runCommand, stdenv, fetchurl, qt4, cmake, automoc4
+, release, ignoreList, extraSubpkgs
+}:
+
+let
+ inherit (stdenv.lib) filter fold;
+ inherit (builtins) getAttr hasAttr remoteAttrs listToAttrs tail head;
+in
+rec {
+ manifest = import (./. + "/${release}.nix");
+
+ # src attribute for $name tarball
+ kdesrc = name: fetchurl {
+ url = "mirror://kde/" + (if manifest.stable then "" else "un")
+ + "stable/${release}/src/${name}-${release}.tar.bz2";
+ sha256 = getAttr name manifest.hashes;
+ };
+
+ # Default meta attribute
+ defMeta = {
+ homepage = http://www.kde.org;
+ inherit (qt4.meta) platforms maintainers;
+ };
+
+ # KDE package built from the whole tarball
+ # This function is used both for monolithic modules and modules which are
+ # released as individual tarballs
+ kdeMonoPkg = name: let n_ = name; in a@{meta, name ? n_, ...}:
+ stdenv.mkDerivation ({
+ name = "${name}-${release}";
+ src = kdesrc name;
+ meta = defMeta // meta;
+ } // (removeAttrs a [ "meta" "name" ]));
+
+ # kdeMonoPkg wrapper for modules splitted upstream. Used in TODO
+ kdeSplittedPkg = module: {name, sane ? name}: kdeMonoPkg name;
+
+ # Build subdirectory ${subdir} of tarball ${module}-${release}.tar.bz2
+ kdeSubdirPkg = module:
+ {name, subdir ? name, sane ? name}:
+ let name_ = name; in
+ a@{cmakeFlags ? [], name ? name_, ...}:
+ stdenv.mkDerivation ({
+ name = "${name}-${release}";
+ src = kdesrc module;
+ cmakeFlags = ["-DDISABLE_ALL_OPTIONAL_SUBDIRECTORIES=TRUE"
+ "-DBUILD_doc=TRUE" "-DBUILD_${subdir}=TRUE"] ++ cmakeFlags;
+ } // (removeAttrs a [ "cmakeFlags" ]));
+
+ # A KDE monolithic module
+ kdeMonoModule = name: path: callPackage path { kde = kdeMonoPkg name; };
+
+ # Combine packages in one module.
+ # Arguments:
+ # * pkgFun --- a function of the following signature:
+ # module: manifest_attrs: manual_attrs: derivation;
+ # * module --- name of the module
+ # * pkgs --- list of packages in manifest format
+ combinePkgs = pkgFun: module: pkgs:
+ let
+ f = p@{name, ...}:
+ callPackage (./.. + "/${module}/${name}.nix") { kde = pkgFun module p;
};
+ list = map f pkgs;
+ attrs = listToAttrs (map
+ ({name, sane ? name, ...}@p: { name = sane; value = f p; })
+ pkgs);
+ in
+ runCommand "${module}-${release}"
+ ({passthru = attrs // {
+ propagatedUserEnvPackages = list;
+ projects = attrs;
+ };})
+ ''
+ mkdir -pv $out/nix-support
+ echo "${toString list}" | tee
$out/nix-support/propagated-user-env-packages
+ '';
+
+ # Given manifest module data, return the module
+ kdeModule = { module, sane ? module, split, pkgs ? [] }:
+ let
+ pkgs_ = filterPkgs module pkgs;
+ in
+ # Module is splitted by upstream
+ if split then combinePkgs kdeSplittedPkg module pkgs_
+ # Monolithic module
+ else if pkgs == [] then kdeMonoModule module (./.. + "/${module}.nix")
+ # Module is splitted by us
+ else combinePkgs kdeSubdirPkg module pkgs_;
+
+ # The same, as nameValuePair with sane name
+ kdeModuleNV = a@{ module, sane ? module, ... }:
+ { name = sane; value = kdeModule a; };
+
+ filterPkgs = module: (p:
+ removeNames (stdenv.lib.attrByPath [module] [] ignoreList) p
+ ++ (stdenv.lib.attrByPath [module] [] extraSubpkgs));
+
+ # Remove attrsets with x.name in subst. Optimized for empty subst.
+ removeNames = subst: big:
+ fold (s: out: filter (x: x.name != s) out) big subst;
+
+ modules = listToAttrs (map kdeModuleNV manifest.modules);
+
+ splittedModuleList =
+ let
+ splitted = filter (a: a ? pkgs) manifest.modules;
+ names = map ({module, sane ? module, ...}: sane) splitted;
+ in
+ map (m: m.projects) (stdenv.lib.attrVals names modules);
+
+ individual =
+ stdenv.lib.zipAttrsWith
+ (
+ name: list:
+ if tail list == []
+ then head list
+ else abort "Multiple modules define ${name}"
+ )
+ splittedModuleList;
+}
Modified: nixpkgs/trunk/pkgs/top-level/all-packages.nix
==============================================================================
--- nixpkgs/trunk/pkgs/top-level/all-packages.nix Fri Aug 19 15:28:32
2011 (r28692)
+++ nixpkgs/trunk/pkgs/top-level/all-packages.nix Fri Aug 19 15:37:12
2011 (r28693)
@@ -7838,6 +7838,7 @@
kde47 = callPackage ../desktops/kde-4.7 {
callPackage = newScope pkgs.kde47;
+ callPackageOrig = callPackage;
};
redshift = callPackage ../applications/misc/redshift {
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits