summary refs log tree commit diff
path: root/pkgs/lib/modules.nix
diff options
context:
space:
mode:
authorNicolas Pierron <nicolas.b.pierron@gmail.com>2009-09-18 15:10:05 +0000
committerNicolas Pierron <nicolas.b.pierron@gmail.com>2009-09-18 15:10:05 +0000
commite07f5d2a2cb72d8ba7fbfd4bf7999d6bf3684241 (patch)
tree620e92c4def481fcab084b6f802410877d3acd6d /pkgs/lib/modules.nix
parenta727aa8d8b143a6930d4f4da7fe1ccb2fd3b6b01 (diff)
downloadnixpkgs-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.nix28
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