From fd0396037a4d9d8635d080bf31ca5c9ea2b9415f Mon Sep 17 00:00:00 2001
From: Nicolas Pierron <nicolas.b.pierron@gmail.com>
Date: Fri, 9 Oct 2009 18:11:24 +0000
Subject: [PATCH] extract function unifyOptionModule from moduleMerge.  This
 function is used to convert option sets, provided inside option declarations,
 to a module.

svn path=/nixpkgs/trunk/; revision=17735
---
 pkgs/lib/modules.nix | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix
index 0df5c63da552..aeabf640cc2e 100644
--- a/pkgs/lib/modules.nix
+++ b/pkgs/lib/modules.nix
@@ -68,6 +68,16 @@ rec {
             {}
         );
 
+
+  unifyOptionModule = {key ? "<unknown location>"}: m: (args:
+    let module = lib.applyIfFunction m args; in
+    if lib.isModule module then
+      { inherit key; } // module
+    else
+      { inherit key; options = module; }
+  );
+
+
   moduleClosure = initModules: args:
     let
       moduleImport = m:
@@ -189,16 +199,11 @@ rec {
           options = lib.zip (name: values:
             if any isOption values then
               let
-                # locations to sub-options declarations
-                decls =
+                decls = # add location to sub-module options.
                   map (m:
-                    mapSubOptions (subModule: (args:
-                      let module = lib.applyIfFunction subModule args; in
-                      if lib.isModule module then
-                        { inherit (m) key; } // module
-                      else
-                        { inherit (m) key; options = module; }
-                    )) m.options
+                    mapSubOptions
+                      (unifyOptionModule {inherit (m) key;})
+                      m.options
                   ) (declarationsOf name);
               in
                 addOptionMakeUp