diff options
author | Nicolas Pierron <nicolas.b.pierron@gmail.com> | 2009-09-18 15:10:05 +0000 |
---|---|---|
committer | Nicolas Pierron <nicolas.b.pierron@gmail.com> | 2009-09-18 15:10:05 +0000 |
commit | e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241 (patch) | |
tree | 620e92c4def481fcab084b6f802410877d3acd6d /pkgs/lib/modules.nix | |
parent | a727aa8d8b143a6930d4f4da7fe1ccb2fd3b6b01 (diff) | |
download | nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar.gz nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar.bz2 nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar.lz nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar.xz nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.tar.zst nixpkgs-e07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241.zip |
Add location to declared sub-modules.
svn path=/nixpkgs/trunk/; revision=17252
Diffstat (limited to 'pkgs/lib/modules.nix')
-rw-r--r-- | pkgs/lib/modules.nix | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix index 81a4c43b2a9..10667dc3ade 100644 --- a/pkgs/lib/modules.nix +++ b/pkgs/lib/modules.nix @@ -54,9 +54,10 @@ rec { removeAttrs (delayProperties m) ["require"]; in if isModule m then - m + { key = "<unknow location>"; } // m else { + key = "<unknow location>"; imports = getImportedPaths m; config = getConfig m; } // ( @@ -72,8 +73,7 @@ rec { moduleImport = m: (unifyModuleSyntax (applyIfFunction (importIfPath m) args)) // { # used by generic closure to avoid duplicated imports. - key = if isPath m then m else - /bad/developer/implies/bad/error/messages; + key = if isPath m then m else "<unknow location>"; }; getImports = m: attrByPath ["imports"] [] m; @@ -188,9 +188,25 @@ rec { moduleZip { options = lib.zip (name: values: if any isOption values then - addOptionMakeUp - { name = addName name; recurseInto = recurseForOption; } - (mergeOptionDecls values) + let + # locations to sub-options declarations + decls = + map (m: + mapSubOptions (subModule: + let module = lib.applyIfFunction subModule {}; in + if lib.isModule module then + { inherit (m) key; } // subModule + else + args: { + inherit (m) key; + options = lib.applyIfFunction subModule args; + } + ) m.options + ) (declarationsOf name); + in + addOptionMakeUp + { name = addName name; recurseInto = recurseForOption; } + (mergeOptionDecls decls) else if all isAttrs values then (recurseInto name modules).options else |