# Generic builder for tcl packages/applications, generally based on mk-python-derivation.nix { tcl, lib, makeWrapper, runCommand, writeScript }: { buildInputs ? [ ], nativeBuildInputs ? [ ], propagatedBuildInputs ? [ ] , checkInputs ? [ ], nativeCheckInputs ? [ ] # true if we should skip the configuration phase altogether , dontConfigure ? false # Extra flags passed to configure step , configureFlags ? [ ] # Whether or not we should add common Tcl-related configure flags , addTclConfigureFlags ? true , meta ? { }, passthru ? { }, doCheck ? true, ... }@attrs: let inherit (tcl) stdenv; inherit (lib) getBin optionalAttrs; defaultTclPkgConfigureFlags = [ "--with-tcl=${tcl}/lib" "--with-tclinclude=${tcl}/include" "--exec-prefix=${placeholder "out"}" ]; self = (stdenv.mkDerivation ((builtins.removeAttrs attrs [ "addTclConfigureFlags" "checkPhase" "checkInputs" "nativeCheckInputs" "doCheck" ]) // { buildInputs = buildInputs ++ [ tcl.tclPackageHook ]; nativeBuildInputs = nativeBuildInputs ++ [ makeWrapper tcl ]; propagatedBuildInputs = propagatedBuildInputs ++ [ tcl ]; TCLSH = "${getBin tcl}/bin/tclsh"; # Run tests after install, at which point we've done all TCLLIBPATH setup doCheck = false; doInstallCheck = attrs.doCheck or (attrs.doInstallCheck or false); installCheckInputs = checkInputs ++ (attrs.installCheckInputs or [ ]); nativeInstallCheckInputs = nativeCheckInputs ++ (attrs.nativeInstallCheckInputs or [ ]); # Add typical values expected by TEA for configureFlags configureFlags = if (!dontConfigure && addTclConfigureFlags) then (configureFlags ++ defaultTclPkgConfigureFlags) else configureFlags; meta = { platforms = tcl.meta.platforms; } // meta; } // optionalAttrs (attrs ? checkPhase) { installCheckPhase = attrs.checkPhase; })); in lib.extendDerivation true passthru self