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. svn path=/nixpkgs/trunk/; revision=28693
This commit is contained in:
parent
c64b8dac12
commit
365cb2d262
|
@ -1,92 +1,25 @@
|
||||||
{ callPackage, runCommand, stdenv, fetchurl, qt47, cmake, automoc4 }:
|
{ callPackage, callPackageOrig, stdenv, qt47 }:
|
||||||
|
|
||||||
let
|
let
|
||||||
release = "4.7.0";
|
release = "4.7.0";
|
||||||
|
|
||||||
manifest = import (./kde-package + "/${release}.nix");
|
# Need callPackageOrig to avoid infinite cycle
|
||||||
|
kde = callPackageOrig ./kde-package {
|
||||||
kdesrc = name: fetchurl {
|
inherit release ignoreList extraSubpkgs callPackage;
|
||||||
url = "mirror://kde/" + (if manifest.stable then "" else "un")
|
|
||||||
+ "stable/${release}/src/${name}-${release}.tar.bz2";
|
|
||||||
sha256 = builtins.getAttr name manifest.hashes;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mergeMeta = meta:
|
# The list of igored individual modules
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
ignoreList = {
|
ignoreList = {
|
||||||
|
# kdeadmin/strigi-analyzer has no real code
|
||||||
kdeadmin = [ "strigi-analyzer" ];
|
kdeadmin = [ "strigi-analyzer" ];
|
||||||
|
# kdesdk/kioslave is splitted into kioslave-svn and kioslave-git
|
||||||
kdesdk = [ "kioslave" ];
|
kdesdk = [ "kioslave" ];
|
||||||
|
# Most of kdebindings do not compile due to a bug in the buildsystem
|
||||||
kdebindings = [ "kimono" "korundum" "kross-interpreters" "perlkde" "perlqt"
|
kdebindings = [ "kimono" "korundum" "kross-interpreters" "perlkde" "perlqt"
|
||||||
"qtruby" "qyoto" "smokekde" ];
|
"qtruby" "qyoto" "smokekde" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Extra subpackages in the manifest format
|
||||||
extraSubpkgs = {
|
extraSubpkgs = {
|
||||||
kdesdk =
|
kdesdk =
|
||||||
[
|
[
|
||||||
|
@ -104,29 +37,22 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
kdepkgs // kdepkgs.kdebase //
|
|
||||||
|
kde.modules // kde.individual //
|
||||||
{
|
{
|
||||||
|
inherit (kde) manifest modules individual splittedModuleList;
|
||||||
recurseForRelease = true;
|
recurseForRelease = true;
|
||||||
|
|
||||||
akonadi = callPackage ./support/akonadi { };
|
akonadi = callPackage ./support/akonadi { };
|
||||||
soprano = callPackage ./support/soprano { };
|
soprano = callPackage ./support/soprano { };
|
||||||
|
|
||||||
qt4 = qt47;
|
qt4 = qt47;
|
||||||
|
|
||||||
kdebase_workspace = kdepkgs.kdebase.kde_workspace;
|
kdebase_workspace = kde.individual.kde_workspace;
|
||||||
|
|
||||||
# Propagate some libraries to the top-level
|
|
||||||
inherit (kdepkgs.kdegraphics) libkdcraw libkipi libkexiv2 libksane;
|
|
||||||
inherit (kdepkgs.kdebindings) pykde4;
|
|
||||||
inherit (kdepkgs.kdeedu) libkdeedu;
|
|
||||||
|
|
||||||
inherit release;
|
inherit release;
|
||||||
|
|
||||||
# nix-instantiate /etc/nixos/nixpkgs -A kde47.moduleNames --strict to see
|
full = stdenv.lib.attrValues kde.modules;
|
||||||
# available packages
|
|
||||||
moduleNames = stdenv.lib.mapAttrs
|
|
||||||
(n: v: if v ? projects then builtins.attrNames v.projects else null) kdepkgs;
|
|
||||||
|
|
||||||
full = stdenv.lib.attrValues kdepkgs;
|
|
||||||
|
|
||||||
l10n = callPackage ./l10n { inherit release; };
|
l10n = callPackage ./l10n { inherit release; };
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -7838,6 +7838,7 @@ let
|
||||||
|
|
||||||
kde47 = callPackage ../desktops/kde-4.7 {
|
kde47 = callPackage ../desktops/kde-4.7 {
|
||||||
callPackage = newScope pkgs.kde47;
|
callPackage = newScope pkgs.kde47;
|
||||||
|
callPackageOrig = callPackage;
|
||||||
};
|
};
|
||||||
|
|
||||||
redshift = callPackage ../applications/misc/redshift {
|
redshift = callPackage ../applications/misc/redshift {
|
||||||
|
|
Loading…
Reference in New Issue