octavePackages.{buildOctavePackage: allow specifying inputs for package tests, image: fix tests} (#494226)

This commit is contained in:
Michael Daniels
2026-03-17 21:40:56 +00:00
committed by GitHub
6 changed files with 51 additions and 3 deletions
@@ -76,6 +76,17 @@ See [Symbolic](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/oct
`requiredOctavePackages`
: This is a special dependency that ensures the specified Octave packages are dependent on others, and are made available simultaneously when loading them in Octave.
### Testing Octave packages {#sssec-testing-octave-packages}
Octave packages built using the `buildOctavePackage` function do not have a `checkPhase` or `installCheckPhase`.
Instead, the tests `testOctaveBuildEnv` and `testOctavePkgTests` are added to the package's `passthru.tests`.
`passthru.tests.testOctaveBuildEnv` tests whether the package can be used by `octave.withPackages` successfully.
`passthru.tests.testOctavePkgTests` runs a `pkg test` command for the package.
If the package needs additional inputs to successfully run the tests, the `nativeOctavePkgTestInputs` attribute can be specified.
If the package needs environment variables to be set to successfully run the tests, ensure that `__structuredAttrs = true;` in the package, then set the environment variables you need in `octavePkgTestEnv` (which should be an attrset where the key is the name of the variable and the value is its value (as a string)).
### Installing Octave Packages {#sssec-installing-octave-packages}
By default, the `buildOctavePackage` function does _not_ install the requested package into Octave for use.
+3
View File
@@ -695,6 +695,9 @@
"footnote-stdenv-find-inputs-location.__back.0": [
"index.html#footnote-stdenv-find-inputs-location.__back.0"
],
"sssec-testing-octave-packages": [
"index.html#sssec-testing-octave-packages"
],
"strictflexarrays1": [
"index.html#strictflexarrays1"
],
@@ -46,6 +46,11 @@
# requiredOctavePackages are ALSO installed into octave.
requiredOctavePackages ? [ ],
# Dependencies and `env` for octave package tests,
# which are run with .passthru.tests.testOctavePkgTests
nativeOctavePkgTestInputs ? [ ],
octavePkgTestEnv ? { },
preBuild ? "",
meta ? { },
@@ -74,6 +79,7 @@ let
# itself, causing everything to fail.
attrs' = removeAttrs attrs [
"nativeBuildInputs"
"nativeOctavePkgTestInputs"
"passthru"
];
in
@@ -143,7 +149,9 @@ stdenv.mkDerivation (
testOctaveBuildEnv = (octave.withPackages (os: [ finalAttrs.finalPackage ])).overrideAttrs (old: {
name = "${finalAttrs.name}-pkg-install";
});
testOctavePkgTests = callPackage ./run-pkg-test.nix { } finalAttrs.finalPackage;
testOctavePkgTests = callPackage ./run-pkg-test.nix {
inherit nativeOctavePkgTestInputs octavePkgTestEnv;
} finalAttrs.finalPackage;
}
// passthru.tests or { };
};
@@ -1,6 +1,8 @@
{
octave,
runCommand,
nativeOctavePkgTestInputs,
octavePkgTestEnv,
}:
package:
@@ -8,7 +10,10 @@ runCommand "${package.name}-pkg-test"
{
nativeBuildInputs = [
(octave.withPackages (os: [ package ]))
];
]
++ nativeOctavePkgTestInputs;
env = octavePkgTestEnv;
}
''
{ octave-cli --eval 'pkg test ${package.pname}' || touch FAILED_ERRCODE; } \
@@ -2,6 +2,10 @@
buildOctavePackage,
lib,
fetchurl,
mesa,
gnuplot,
makeFontsConf,
writableTmpDirAsHomeHook,
}:
buildOctavePackage rec {
@@ -13,6 +17,16 @@ buildOctavePackage rec {
sha256 = "sha256-pYY8E5LZd+pPNwzFVH4EsXY8K3fXs6Hyz2zYweXkmRk=";
};
nativeOctavePkgTestInputs = [
mesa
gnuplot
writableTmpDirAsHomeHook
];
octavePkgTestEnv.FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ ]; };
__structuredAttrs = true;
meta = {
homepage = "https://gnu-octave.github.io/packages/image/";
license = lib.licenses.gpl3Plus;
+8 -1
View File
@@ -116,7 +116,14 @@ makeScope newScope (
inherit (pkgs) gsl;
};
image = callPackage ../development/octave-modules/image { };
image = callPackage ../development/octave-modules/image {
inherit (pkgs)
mesa
gnuplot
makeFontsConf
writableTmpDirAsHomeHook
;
};
image-acquisition = callPackage ../development/octave-modules/image-acquisition { };