Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / interpreters / tcl / mk-tcl-derivation.nix
blob57d60f0f2a65bdf83c1ffb765d7ea7dc6213217e
1 # Generic builder for tcl packages/applications, generally based on mk-python-derivation.nix
2 { tcl
3 , lib
4 , makeWrapper
5 , runCommand
6 , writeScript
7 }:
9 { buildInputs ? []
10 , nativeBuildInputs ? []
11 , propagatedBuildInputs ? []
12 , checkInputs ? []
13 , nativeCheckInputs ? []
15 # true if we should skip the configuration phase altogether
16 , dontConfigure ? false
18 # Extra flags passed to configure step
19 , configureFlags ? []
21 # Whether or not we should add common Tcl-related configure flags
22 , addTclConfigureFlags ? true
24 , meta ? {}
25 , passthru ? {}
26 , doCheck ? true
27 , ... } @ attrs:
29 let
30   inherit (tcl) stdenv;
31   inherit (lib) getBin optionalAttrs;
33   defaultTclPkgConfigureFlags = [
34     "--with-tcl=${tcl}/lib"
35     "--with-tclinclude=${tcl}/include"
36     "--exec-prefix=${placeholder "out"}"
37   ];
39   self = (stdenv.mkDerivation ((builtins.removeAttrs attrs [
40     "addTclConfigureFlags" "checkPhase" "checkInputs" "nativeCheckInputs" "doCheck"
41   ]) // {
43     buildInputs = buildInputs ++ [ tcl.tclPackageHook ];
44     nativeBuildInputs = nativeBuildInputs ++ [ makeWrapper tcl ];
45     propagatedBuildInputs = propagatedBuildInputs ++ [ tcl ];
47     TCLSH = "${getBin tcl}/bin/tclsh";
49     # Run tests after install, at which point we've done all TCLLIBPATH setup
50     doCheck = false;
51     doInstallCheck = attrs.doCheck or (attrs.doInstallCheck or false);
52     installCheckInputs = checkInputs ++ (attrs.installCheckInputs or []);
53     nativeInstallCheckInputs = nativeCheckInputs ++ (attrs.nativeInstallCheckInputs or []);
55     # Add typical values expected by TEA for configureFlags
56     configureFlags =
57       if (!dontConfigure && addTclConfigureFlags)
58         then (configureFlags ++ defaultTclPkgConfigureFlags)
59         else configureFlags;
61     meta = {
62       platforms = tcl.meta.platforms;
63     } // meta;
66   } // optionalAttrs (attrs?checkPhase) {
67     installCheckPhase = attrs.checkPhase;
68   }
69   ));
71 in lib.extendDerivation true passthru self