mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-06-05 21:03:40 +00:00
tcl.tclRequiresCheckHook: init
Add a hook that checks that Tcl packages can be `require`d correctly, like `pythonImportsCheck`.
This commit is contained in:
@@ -52,3 +52,35 @@ Its use is documented in `pkgs/development/tcl-modules/by-name/README.md`.
|
||||
|
||||
All Tcl applications reside elsewhere.
|
||||
In case a package is used as both a library and an application (for example `expect`), it should be defined in `tcl-packages.nix`, with an alias elsewhere.
|
||||
|
||||
### Using tclRequiresCheck {#using-tclrequirescheck}
|
||||
|
||||
Although unit tests are highly preferred to validate correctness of a package, not
|
||||
all packages have test suites that can be run easily, and some have none at all.
|
||||
To help ensure the package still works, [`tclRequiresCheck`](#using-tclrequirescheck) can attempt to `package require`
|
||||
the listed modules.
|
||||
|
||||
```nix
|
||||
{
|
||||
tclRequiresCheck = [
|
||||
"json"
|
||||
"doctools"
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
roughly translates to:
|
||||
|
||||
```nix
|
||||
{
|
||||
preDist = ''
|
||||
TCLLIBPATH="$out/lib $TCLLIBPATH"
|
||||
tclsh <<<'exit [catch {package require json; package require doctools}]'
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
However, this is done in its own phase, and not dependent on whether [`doCheck = true;`](#var-stdenv-doCheck).
|
||||
|
||||
This can also be useful in verifying that the package doesn't assume commonly
|
||||
present packages (e.g. `tcllib`).
|
||||
|
||||
@@ -752,6 +752,9 @@
|
||||
"typst-package-scope-and-usage": [
|
||||
"index.html#typst-package-scope-and-usage"
|
||||
],
|
||||
"using-tclrequirescheck": [
|
||||
"index.html#using-tclrequirescheck"
|
||||
],
|
||||
"var-go-buildTestBinaries": [
|
||||
"index.html#var-go-buildTestBinaries"
|
||||
],
|
||||
|
||||
@@ -142,6 +142,16 @@ let
|
||||
};
|
||||
} ./tcl-package-hook.sh
|
||||
) { };
|
||||
tclRequiresCheckHook = callPackage (
|
||||
{ buildPackages }:
|
||||
makeSetupHook {
|
||||
name = "tcl-requires-check-hook";
|
||||
propagatedBuildInputs = [ buildPackages.makeBinaryWrapper ];
|
||||
meta = {
|
||||
inherit (meta) maintainers platforms;
|
||||
};
|
||||
} ./tcl-requires-check-hook.sh
|
||||
) { };
|
||||
# verify that Tcl's clock library can access tzdata
|
||||
tests.tzdata = runCommand "${pname}-test-tzdata" { } ''
|
||||
${baseInterp}/bin/tclsh <(echo "set t [clock scan {2004-10-30 05:00:00} \
|
||||
|
||||
@@ -51,10 +51,15 @@ let
|
||||
// {
|
||||
|
||||
buildInputs = buildInputs ++ [ tcl.tclPackageHook ];
|
||||
nativeBuildInputs = nativeBuildInputs ++ [
|
||||
makeWrapper
|
||||
tcl
|
||||
];
|
||||
nativeBuildInputs =
|
||||
nativeBuildInputs
|
||||
++ [
|
||||
makeWrapper
|
||||
tcl
|
||||
]
|
||||
++ lib.optionals (stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
|
||||
tcl.tclRequiresCheckHook
|
||||
];
|
||||
propagatedBuildInputs = propagatedBuildInputs ++ [ tcl ];
|
||||
|
||||
env = {
|
||||
|
||||
17
pkgs/development/interpreters/tcl/tcl-requires-check-hook.sh
Normal file
17
pkgs/development/interpreters/tcl/tcl-requires-check-hook.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
# Setup hook for checking whether Tcl requires succeed
|
||||
echo "Sourcing tcl-requires-check-hook.sh"
|
||||
|
||||
tclRequiresCheckPhase () {
|
||||
echo "Executing tclRequiresCheckPhase"
|
||||
|
||||
if [ -n "$tclRequiresCheck" ]; then
|
||||
echo "Check whether the following packages can be required: $tclRequiresCheck"
|
||||
export TCLLIBPATH="$out/lib $TCLLIBPATH" # Redundant if tcl-package-hook is also used
|
||||
tclsh <<<'exit [catch {foreach req $env(tclRequiresCheck) {package require $req}}]'
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -z "${dontUseTclRequiresCheck-}" ]; then
|
||||
echo "Using tclRequiresCheckPhase"
|
||||
preDistPhases+=" tclRequiresCheckPhase"
|
||||
fi
|
||||
Reference in New Issue
Block a user