summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2018-07-26 12:05:40 +0200
committerDomen Kožar <domen@enlambda.com>2018-12-30 12:33:45 +0000
commitc6e043d57c2cc69a1068a5e6e34b385942876d0e (patch)
tree5235386c2d705ecc17c88c8179d5b4c051090038
parent30ff3e0f398ef1481f4a5f1b1bef730f0d71f712 (diff)
downloadnixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar.gz
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar.bz2
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar.lz
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar.xz
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.tar.zst
nixpkgs-c6e043d57c2cc69a1068a5e6e34b385942876d0e.zip
Remove composableDerivation, closes #18763
-rw-r--r--lib/composable-derivation.nix113
-rw-r--r--lib/default.nix5
-rw-r--r--lib/deprecated.nix122
-rw-r--r--lib/tests/misc.nix38
-rw-r--r--nixos/doc/manual/release-notes/rl-1903.xml6
-rw-r--r--pkgs/top-level/all-packages.nix2
6 files changed, 9 insertions, 277 deletions
diff --git a/lib/composable-derivation.nix b/lib/composable-derivation.nix
deleted file mode 100644
index cb1fdc121e1..00000000000
--- a/lib/composable-derivation.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{lib, pkgs}:
-let inherit (lib) nvs; in
-{
-
-  # composableDerivation basically mixes these features:
-  # - fix function
-  # - mergeAttrBy
-  # - provides shortcuts for "options" such as "--enable-foo" and adding
-  #   buildInputs, see php example
-  #
-  # It predates styles which are common today, such as
-  #  * the config attr
-  #  * mkDerivation.override feature
-  #  * overrideDerivation (lib/customization.nix)
-  #
-  # Some of the most more important usage examples (which could be rewritten if it was important):
-  # * php
-  # * postgis
-  # * vim_configurable
-  #
-  # A minimal example illustrating most features would look like this:
-  # let base = composableDerivation { (fixed: let inherit (fixed.fixed) name in {
-  #    src = fetchurl {
-  #    }
-  #    buildInputs = [A];
-  #    preConfigre = "echo ${name}";
-  #    # attention, "name" attr is missing, thus you cannot instantiate "base".
-  # }
-  # in {
-  #  # These all add name attribute, thus you can instantiate those:
-  #  v1 = base.merge   ({ name = "foo-add-B"; buildInputs = [B]; });       // B gets merged into buildInputs
-  #  v2 = base.merge   ({ name = "mix-in-pre-configure-lines" preConfigre = ""; });
-  #  v3 = base.replace ({ name = "foo-no-A-only-B;" buildInputs = [B]; });
-  # }
-  #
-  # So yes, you can think about it being something like nixos modules, and
-  # you'd be merging "features" in one at a time using .merge or .replace
-  # Thanks Shea for telling me that I rethink the documentation ..
-  #
-  # issues:
-  # * its complicated to understand
-  # * some "features" such as exact merge behaviour are buried in mergeAttrBy
-  #   and defaultOverridableDelayableArgs assuming the default behaviour does
-  #   the right thing in the common case
-  # * Eelco once said using such fix style functions are slow to evaluate
-  # * Too quick & dirty. Hard to understand for others. The benefit was that
-  #   you were able to create a kernel builder like base derivation and replace
-  #   / add patches the way you want without having to declare function arguments
-  #
-  # nice features:
-  # declaring "optional features" is modular. For instance:
-  #   flags.curl = {
-  #     configureFlags = ["--with-curl=${curl.dev}" "--with-curlwrappers"];
-  #     buildInputs = [curl openssl];
-  #   };
-  #   flags.other = { .. }
-  # (Example taken from PHP)
-  #
-  # alternative styles / related features:
-  #  * Eg see function supporting building the kernel
-  #  * versionedDerivation (discussion about this is still going on - or ended)
-  #  * composedArgsAndFun
-  #  * mkDerivation.override
-  #  * overrideDerivation
-  #  * using { .., *Support ? false }: like configurable options.
-  # To find those examples use grep
-  #
-  # To sum up: It exists for historical reasons - and for most commonly used
-  # tasks the alternatives should be used
-  #
-  # If you have questions about this code ping Marc Weber.
-  composableDerivation = {
-        mkDerivation ? pkgs.stdenv.mkDerivation,
-
-        # list of functions to be applied before defaultOverridableDelayableArgs removes removeAttrs names
-        # prepareDerivationArgs handles derivation configurations
-        applyPreTidy ? [ lib.prepareDerivationArgs ],
-
-        # consider adding addtional elements by derivation.merge { removeAttrs = ["elem"]; };
-        removeAttrs ? ["cfg" "flags"]
-
-      }: (lib.defaultOverridableDelayableArgs ( a: mkDerivation a)
-         {
-           inherit applyPreTidy removeAttrs;
-         }).merge;
-
-  # some utility functions
-  # use this function to generate flag attrs for prepareDerivationArgs
-  # E nable  D isable F eature
-  edf = {name, feat ? name, enable ? {}, disable ? {} , value ? ""}:
-    nvs name {
-    set = {
-      configureFlags = ["--enable-${feat}${if value == "" then "" else "="}${value}"];
-    } // enable;
-    unset = {
-      configureFlags = ["--disable-${feat}"];
-    } // disable;
-  };
-
-  # same for --with and --without-
-  # W ith or W ithout F eature
-  wwf = {name, feat ? name, enable ? {}, disable ? {}, value ? ""}:
-    nvs name {
-    set = enable // {
-      configureFlags = ["--with-${feat}${if value == "" then "" else "="}${value}"]
-                       ++ lib.maybeAttr "configureFlags" [] enable;
-    };
-    unset = disable // {
-      configureFlags = ["--without-${feat}"]
-                       ++ lib.maybeAttr "configureFlags" [] disable;
-    };
-  };
-}
diff --git a/lib/default.nix b/lib/default.nix
index e4e3e7d325a..916f6e05190 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -125,14 +125,13 @@ let
       traceShowValMarked showVal traceCall traceCall2 traceCall3
       traceValIfNot runTests testAllTrue traceCallXml attrNamesToStr;
     inherit (misc) maybeEnv defaultMergeArg defaultMerge foldArgs
-      defaultOverridableDelayableArgs composedArgsAndFun
       maybeAttrNullable maybeAttr ifEnable checkFlag getValue
       checkReqs uniqList uniqListExt condConcat lazyGenericClosure
       innerModifySumArgs modifySumArgs innerClosePropagation
       closePropagation mapAttrsFlatten nvs setAttr setAttrMerge
       mergeAttrsWithFunc mergeAttrsConcatenateValues
       mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults
-      mergeAttrsByFuncDefaultsClean mergeAttrBy prepareDerivationArgs
-      nixType imap overridableDelayableArgs;
+      mergeAttrsByFuncDefaultsClean mergeAttrBy
+      nixType imap;
   });
 in lib
diff --git a/lib/deprecated.nix b/lib/deprecated.nix
index 34cf336d1f4..5a3a97c476d 100644
--- a/lib/deprecated.nix
+++ b/lib/deprecated.nix
@@ -35,74 +35,6 @@ rec {
           withStdOverrides;
 
 
-  # predecessors: proposed replacement for applyAndFun (which has a bug cause it merges twice)
-  # the naming "overridableDelayableArgs" tries to express that you can
-  # - override attr values which have been supplied earlier
-  # - use attr values before they have been supplied by accessing the fix point
-  #   name "fixed"
-  # f: the (delayed overridden) arguments are applied to this
-  #
-  # initial: initial attrs arguments and settings. see defaultOverridableDelayableArgs
-  #
-  # returns: f applied to the arguments // special attributes attrs
-  #     a) merge: merge applied args with new args. Wether an argument is overridden depends on the merge settings
-  #     b) replace: this let's you replace and remove names no matter which merge function has been set
-  #
-  # examples: see test cases "res" below;
-  overridableDelayableArgs =
-          f:        # the function applied to the arguments
-          initial:  # you pass attrs, the functions below are passing a function taking the fix argument
-    let
-        takeFixed = if lib.isFunction initial then initial else (fixed : initial); # transform initial to an expression always taking the fixed argument
-        tidy = args:
-            let # apply all functions given in "applyPreTidy" in sequence
-                applyPreTidyFun = fold ( n: a: x: n ( a x ) ) lib.id (maybeAttr "applyPreTidy" [] args);
-            in removeAttrs (applyPreTidyFun args) ( ["applyPreTidy"] ++ (maybeAttr  "removeAttrs" [] args) ); # tidy up args before applying them
-        fun = n: x:
-            let newArgs = fixed:
-                    let args = takeFixed fixed;
-                        mergeFun = args.${n};
-                    in if isAttrs x then (mergeFun args x)
-                       else assert lib.isFunction x;
-                            mergeFun args (x ( args // { inherit fixed; }));
-            in overridableDelayableArgs f newArgs;
-    in
-    (f (tidy (lib.fix takeFixed))) // {
-      merge   = fun "mergeFun";
-      replace = fun "keepFun";
-    };
-  defaultOverridableDelayableArgs = f:
-      let defaults = {
-            mergeFun = mergeAttrByFunc; # default merge function. merge strategie (concatenate lists, strings) is given by mergeAttrBy
-            keepFun = a: b: { inherit (a) removeAttrs mergeFun keepFun mergeAttrBy; } // b; # even when using replace preserve these values
-            applyPreTidy = []; # list of functions applied to args before args are tidied up (usage case : prepareDerivationArgs)
-            mergeAttrBy = mergeAttrBy // {
-              applyPreTidy = a: b: a ++ b;
-              removeAttrs = a: b: a ++ b;
-            };
-            removeAttrs = ["mergeFun" "keepFun" "mergeAttrBy" "removeAttrs" "fixed" ]; # before applying the arguments to the function make sure these names are gone
-          };
-      in (overridableDelayableArgs f defaults).merge;
-
-
-
-  # rec { # an example of how composedArgsAndFun can be used
-  #  a  = composedArgsAndFun (x: x) { a = ["2"]; meta = { d = "bar";}; };
-  #  # meta.d will be lost ! It's your task to preserve it (eg using a merge function)
-  #  b  = a.passthru.function { a = [ "3" ]; meta = { d2 = "bar2";}; };
-  #  # instead of passing/ overriding values you can use a merge function:
-  #  c  = b.passthru.function ( x: { a = x.a  ++ ["4"]; }); # consider using (maybeAttr "a" [] x)
-  # }
-  # result:
-  # {
-  #   a = { a = ["2"];     meta = { d = "bar"; }; passthru = { function = .. }; };
-  #   b = { a = ["3"];     meta = { d2 = "bar2"; }; passthru = { function = .. }; };
-  #   c = { a = ["3" "4"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; };
-  #   # c2 is equal to c
-  # }
-  composedArgsAndFun = f: foldArgs defaultMerge f {};
-
-
   # shortcut for attrByPath ["name"] default attrs
   maybeAttrNullable = maybeAttr;
 
@@ -285,7 +217,7 @@ rec {
   # };
   # will result in
   # { mergeAttrsBy = [...]; buildInputs = [ a b c d ]; }
-  # is used by prepareDerivationArgs, defaultOverridableDelayableArgs and can be used when composing using
+  # is used by defaultOverridableDelayableArgs and can be used when composing using
   # foldArgs, composedArgsAndFun or applyAndFun. Example: composableDerivation in all-packages.nix
   mergeAttrByFunc = x: y:
     let
@@ -318,58 +250,6 @@ rec {
     // listToAttrs (map (n: nameValuePair n (a: b: "${a}\n${b}") ) [ "preConfigure" "postInstall" ])
   ;
 
-  # prepareDerivationArgs tries to make writing configurable derivations easier
-  # example:
-  #  prepareDerivationArgs {
-  #    mergeAttrBy = {
-  #       myScript = x: y: x ++ "\n" ++ y;
-  #    };
-  #    cfg = {
-  #      readlineSupport = true;
-  #    };
-  #    flags = {
-  #      readline = {
-  #        set = {
-  #           configureFlags = [ "--with-compiler=${compiler}" ];
-  #           buildInputs = [ compiler ];
-  #           pass = { inherit compiler; READLINE=1; };
-  #           assertion = compiler.dllSupport;
-  #           myScript = "foo";
-  #        };
-  #        unset = { configureFlags = ["--without-compiler"]; };
-  #      };
-  #    };
-  #    src = ...
-  #    buildPhase = '' ... '';
-  #    name = ...
-  #    myScript = "bar";
-  #  };
-  # if you don't have need for unset you can omit the surrounding set = { .. } attr
-  # all attrs except flags cfg and mergeAttrBy will be merged with the
-  # additional data from flags depending on config settings
-  # It's used in composableDerivation in all-packages.nix. It's also used
-  # heavily in the new python and libs implementation
-  #
-  # should we check for misspelled cfg options?
-  # TODO use args.mergeFun here as well?
-  prepareDerivationArgs = args:
-    let args2 = { cfg = {}; flags = {}; } // args;
-        flagName = name: "${name}Support";
-        cfgWithDefaults = (listToAttrs (map (n: nameValuePair (flagName n) false) (attrNames args2.flags)))
-                          // args2.cfg;
-        opts = attrValues (mapAttrs (a: v:
-                let v2 = if v ? set || v ? unset then v else { set = v; };
-                    n = if cfgWithDefaults.${flagName a} then "set" else "unset";
-                    attr = maybeAttr n {} v2; in
-                if (maybeAttr "assertion" true attr)
-                  then attr
-                  else throw "assertion of flag ${a} of derivation ${args.name} failed"
-               ) args2.flags );
-    in removeAttrs
-      (mergeAttrsByFuncDefaults ([args] ++ opts ++ [{ passthru = cfgWithDefaults; }]))
-      ["flags" "cfg" "mergeAttrBy" ];
-
-
   nixType = x:
       if isAttrs x then
           if x ? outPath then "derivation"
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 1604fbb39cb..d8f412d3fc4 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -401,42 +401,4 @@ runTests {
     expected  = "«foo»";
   };
 
-
-# MISC
-
-  testOverridableDelayableArgsTest = {
-    expr =
-      let res1 = defaultOverridableDelayableArgs id {};
-          res2 = defaultOverridableDelayableArgs id { a = 7; };
-          res3 = let x = defaultOverridableDelayableArgs id { a = 7; };
-                 in (x.merge) { b = 10; };
-          res4 = let x = defaultOverridableDelayableArgs id { a = 7; };
-                in (x.merge) ( x: { b = 10; });
-          res5 = let x = defaultOverridableDelayableArgs id { a = 7; };
-                in (x.merge) ( x: { a = builtins.add x.a 3; });
-          res6 = let x = defaultOverridableDelayableArgs id { a = 7; mergeAttrBy = { a = builtins.add; }; };
-                     y = x.merge {};
-                in (y.merge) { a = 10; };
-
-          resRem7 = res6.replace (a: removeAttrs a ["a"]);
-
-          # fixed tests (delayed args): (when using them add some comments, please)
-          resFixed1 =
-                let x = defaultOverridableDelayableArgs id ( x: { a = 7; c = x.fixed.b; });
-                    y = x.merge (x: { name = "name-${builtins.toString x.fixed.c}"; });
-                in (y.merge) { b = 10; };
-          strip = attrs: removeAttrs attrs ["merge" "replace"];
-      in all id
-        [ ((strip res1) == { })
-          ((strip res2) == { a = 7; })
-          ((strip res3) == { a = 7; b = 10; })
-          ((strip res4) == { a = 7; b = 10; })
-          ((strip res5) == { a = 10; })
-          ((strip res6) == { a = 17; })
-          ((strip resRem7) == {})
-          ((strip resFixed1) == { a = 7; b = 10; c =10; name = "name-10"; })
-        ];
-    expected = true;
-  };
-
 }
diff --git a/nixos/doc/manual/release-notes/rl-1903.xml b/nixos/doc/manual/release-notes/rl-1903.xml
index c823d8fcf26..89d9f48aedd 100644
--- a/nixos/doc/manual/release-notes/rl-1903.xml
+++ b/nixos/doc/manual/release-notes/rl-1903.xml
@@ -370,6 +370,12 @@
    </listitem>
    <listitem>
     <para>
+     <literal>composableDerivation</literal> along with supporting library functions
+     has been removed.
+    </para>
+   </listitem>
+   <listitem>
+    <para>
      The deprecated <literal>truecrypt</literal> package has been removed
      and <literal>truecrypt</literal> attribute is now an alias for
      <literal>veracrypt</literal>. VeraCrypt is backward-compatible with
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6aa9f7fe967..e8f8cb564bd 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -398,8 +398,6 @@ in
 
   releaseTools = callPackage ../build-support/release { };
 
-  composableDerivation = callPackage ../../lib/composable-derivation.nix { };
-
   inherit (lib.systems) platforms;
 
   setJavaClassPath = makeSetupHook { } ../build-support/setup-hooks/set-java-classpath.sh;