|
|
|
@ -96,12 +96,12 @@ rec { |
|
|
|
|
else if all isBool list then foldl' lib.or false list |
|
|
|
|
else if all isString list then lib.concatStrings list |
|
|
|
|
else if all isInt list && all (x: x == head list) list then head list |
|
|
|
|
else throw "Cannot merge definitions of `${showOption loc}' given in ${showFiles (getFiles defs)}."; |
|
|
|
|
else throw "Cannot merge definitions of `${showOption loc}'. Definition values:${showDefs defs}"; |
|
|
|
|
|
|
|
|
|
mergeOneOption = loc: defs: |
|
|
|
|
if defs == [] then abort "This case should never happen." |
|
|
|
|
else if length defs != 1 then |
|
|
|
|
throw "The unique option `${showOption loc}' is defined multiple times, in:\n - ${concatStringsSep "\n - " (getFiles defs)}." |
|
|
|
|
throw "The unique option `${showOption loc}' is defined multiple times. Definition values:${showDefs defs}" |
|
|
|
|
else (head defs).value; |
|
|
|
|
|
|
|
|
|
/* "Merge" option definitions by checking that they all have the same value. */ |
|
|
|
@ -111,11 +111,11 @@ rec { |
|
|
|
|
# This also makes it work for functions, because the foldl' below would try |
|
|
|
|
# to compare the first element with itself, which is false for functions |
|
|
|
|
else if length defs == 1 then (elemAt defs 0).value |
|
|
|
|
else foldl' (val: def: |
|
|
|
|
if def.value != val then |
|
|
|
|
throw "The option `${showOption loc}' has conflicting definitions, in ${showFiles (getFiles defs)}." |
|
|
|
|
else (foldl' (first: def: |
|
|
|
|
if def.value != first.value then |
|
|
|
|
throw "The option `${showOption loc}' has conflicting definition values:${showDefs [ first def ]}" |
|
|
|
|
else |
|
|
|
|
val) (head defs).value defs; |
|
|
|
|
first) (head defs) defs).value; |
|
|
|
|
|
|
|
|
|
/* Extracts values of all "value" keys of the given list. |
|
|
|
|
|
|
|
|
|