buildOctavePackage: add octave.withPackages passthru test
While revieweing a octavePackages PR, an ecosystem I'm not familiar with, I was puzzled to find there was no real install test. While `buildOctavePackage` does run `octave-cli --eval "pkg build ..."`, it isn't before the user calls `octave.withPackages` that `octave-cli --eval "pkg install ..."` is run. This PR adds a sniff test that does just that to all octave packages. This test si most often only needed when bumping and adding octave packages, although it would be nice to somehow do this during `installCheckPhase` instead. While the `self` approach here _works_, this builder ought to be refactored to use `lib.extendMkDerivation` instead, but I leave that for the octave maintainers. Testing: Builds fine, albeit with some warnings here and there: * `octavePackages.audio.tests` -> `/nix/store/gfsfcffvg139g1mxvb0klwlyx2gdjix7-octave-10.1.0-env` * `octavePackages.bim.tests` -> `/nix/store/5qnxx078760j600wj5j934pg1qi6vnjp-octave-10.1.0-env` * `octavePackages.bsltl.tests` -> `/nix/store/di46mpwws75v9limprr669ap1kdcqg6p-octave-10.1.0-env` * `octavePackages.cgi.tests` -> `/nix/store/ydmv60i8sw1ka6blgbb7i0b00jpa06ba-octave-10.1.0-env` * `octavePackages.communications.tests` -> `/nix/store/fgyvys3llwga8dffkbmvvfd4j2bmgir7-octave-10.1.0-env` * `octavePackages.control.tests` -> `/nix/store/jmsx2h17py4if2sxks90kzxk8yva179y-octave-10.1.0-env` * `octavePackages.database.tests` -> `/nix/store/n7750sl8ycq80jddjsk7jfhrynshk7hh-octave-10.1.0-env` * `octavePackages.dataframe.tests` -> `/nix/store/n47kcw9akf3g1rrvkg43qvhdspypgqxz-octave-10.1.0-env` * `octavePackages.dicom.tests` -> `/nix/store/mgkbc1bgn54y5lzv152x0zrkmv5g8n3g-octave-10.1.0-env` * `octavePackages.divand.tests` -> `/nix/store/dxpmqirr60qcj810n89lq4q6fylwbrvz-octave-10.1.0-env` * `octavePackages.doctest.tests` -> `/nix/store/wh5nhndxlfg8ahf2dhsi4k7s4q24kn4x-octave-10.1.0-env` * `octavePackages.fpl.tests` -> `/nix/store/3mx9s9dbvcx20m0m4hm8mgfrvl2f8c4j-octave-10.1.0-env` * `octavePackages.fuzzy-logic-toolkit.tests` -> `/nix/store/ysx68g7wpy4fbz21q9x9zdgb4yj9li13-octave-10.1.0-env` * `octavePackages.ga.tests` -> `/nix/store/9p6mgsv3166il24s4bfpxbaqy7pr3np3-octave-10.1.0-env` * `octavePackages.general.tests` -> `/nix/store/bhjm2ar1n379c2dg4k7wmby721qi3w9b-octave-10.1.0-env` * `octavePackages.generate_html.tests` -> `/nix/store/r33k2qna874ncyf0rzfvmxwbkl3sal4k-octave-10.1.0-env` * `octavePackages.geometry.tests` -> `/nix/store/3pxrh2wb9wlv69kvrrg6jjpgwxy2rjqr-octave-10.1.0-env` * `octavePackages.image-acquisition.tests` -> `/nix/store/r0ywp3kq967ay64y6hhmpxkqjy8n69q9-octave-10.1.0-env` * `octavePackages.image.tests` -> `/nix/store/pssi79pdvp0k14z1lbvsnlh46ygq78ya-octave-10.1.0-env` * `octavePackages.instrument-control.tests` -> `/nix/store/61m4n8ii3qsnbgbd0zzc8x0bk72cx5vv-octave-10.1.0-env` * `octavePackages.interval.tests` -> `/nix/store/g78z6ah6xxjrnvz2fafn5nx9fm2pgnyv-octave-10.1.0-env` * `octavePackages.io.tests` -> `/nix/store/dw8lav38xn5wp4h88q926b3krxvfczdn-octave-10.1.0-env` * `octavePackages.linear-algebra.tests` -> `/nix/store/wriqa38xf9vfnrhhv6slfpc6k5arv5cm-octave-10.1.0-env` * `octavePackages.lssa.tests` -> `/nix/store/wwhj069fgnazbmwyakqkrhbrfdkfvwhc-octave-10.1.0-env` * `octavePackages.matgeom.tests` -> `/nix/store/di1dp02ds6lvlm8ifwmsmxafki0my5j3-octave-10.1.0-env` * `octavePackages.miscellaneous.tests` -> `/nix/store/pbh2khwbs3asxr98ww3dadynyp4w5gjl-octave-10.1.0-env` * `octavePackages.msh.tests` -> `/nix/store/g609r2iy0skgcv2kginkxqpp6kcvk8nb-octave-10.1.0-env` * `octavePackages.mvn.tests` -> `/nix/store/y84dhsf3h4kz0vs729lvncjbs75rlls3-octave-10.1.0-env` * `octavePackages.nan.tests` -> `/nix/store/gm7ma33w5v67379wjvghx6lmpk39r4a4-octave-10.1.0-env` * `octavePackages.ncarray.tests` -> `/nix/store/xdqn7cd3a7q0aj0f42l2ifskhn1k9c4m-octave-10.1.0-env` * `octavePackages.netcdf.tests` -> `/nix/store/4rzqbs8i1hkhsgl9q67laf5srz25gwh5-octave-10.1.0-env` * `octavePackages.nurbs.tests` -> `/nix/store/gnsx5i5c6ky8y5s5j8izlgjz74prp1ys-octave-10.1.0-env` * `octavePackages.octclip.tests` -> `/nix/store/bd723m3w1ffig5a1cnvaf1wkhnc66hfv-octave-10.1.0-env` * `octavePackages.octproj.tests` -> `/nix/store/pi19581cqja36m3zlh09l6mpk4yynq34-octave-10.1.0-env` * `octavePackages.optics.tests` -> `/nix/store/ig9f7adp173c2qngkclp01iv388ivxsk-octave-10.1.0-env` * `octavePackages.optiminterp.tests` -> `/nix/store/249dq2sadln4bgknylaxzc13yg4lcbbp-octave-10.1.0-env` * `octavePackages.quaternion.tests` -> `/nix/store/amw45jgwqqf7bw55qwc8bsjzx9khlbyj-octave-10.1.0-env` * `octavePackages.signal.tests` -> `/nix/store/q8banm7pkgzka9ygpzqivn44gn88iqpd-octave-10.1.0-env` * `octavePackages.sockets.tests` -> `/nix/store/74xb0m3ykpxny8grbz2a0c84bp5x8qk2-octave-10.1.0-env` * `octavePackages.splines.tests` -> `/nix/store/1yk0p5yxl46b2bl1mlmiw32s2d0a5vxm-octave-10.1.0-env` * `octavePackages.statistics.tests` -> `/nix/store/r161lfb3cg4ajk3ky06gnlr94y1g7n1l-octave-10.1.0-env` * `octavePackages.stk.tests` -> `/nix/store/djf5x4jsi0yx2jsw3jrs3cnzn8mc7v44-octave-10.1.0-env` * `octavePackages.strings.tests` -> `/nix/store/f8hhf2p6ykrchjnc8nngsbbscagkhiyl-octave-10.1.0-env` * `octavePackages.struct.tests` -> `/nix/store/y8svqkjsfxv75s7nxim9wk1qba72xrvm-octave-10.1.0-env` * `octavePackages.symbolic.tests` -> `/nix/store/f3r2brimsfymqk28fl44cf9ddsw34w3x-octave-10.1.0-env` * `octavePackages.tsa.tests` -> `/nix/store/rvga4qc13dcrf913mjrmq4nr4gb6rk54-octave-10.1.0-env` * `octavePackages.video.tests` -> `/nix/store/h6m2d90qjviq3qv89mnrysbasmg55zbi-octave-10.1.0-env` * `octavePackages.windows.tests` -> `/nix/store/qx79vshxqm1hr5d7chqzzc751iqcq75x-octave-10.1.0-env` * `octavePackages.zeromq.tests` -> `/nix/store/ws42x3gpqvfrqm7bvbffcphf0snb994i-octave-10.1.0-env` Build failure: * `octavePackages.arduino.tests` * `octavePackages.financial.tests` * `octavePackages.gsl.tests` * `octavePackages.mapping.tests` * `octavePackages.queueing.tests` No eval (the majority because they're marked broken): * `octavePackages.data-smoothing.tests` * `octavePackages.econometrics.tests` * `octavePackages.fem-fenics.tests` * `octavePackages.fits.tests` * `octavePackages.level-set.tests` * `octavePackages.ltfat.tests` * `octavePackages.ocl.tests` * `octavePackages.optim.tests` * `octavePackages.parallel.tests` * `octavePackages.sparsersb.tests` * `octavePackages.tisean.tests` * `octavePackages.vibes.tests` * `octavePackages.vrml.tests` * `octavePackages.writeRequiredOctavePackagesHook.tests`
This commit is contained in:
@@ -64,12 +64,19 @@ let
|
||||
writeRequiredOctavePackagesHook
|
||||
] ++ nativeBuildInputs;
|
||||
|
||||
passthru' = {
|
||||
updateScript = [
|
||||
../../../../maintainers/scripts/update-octave-packages
|
||||
(builtins.unsafeGetAttrPos "pname" octave.pkgs.${attrs.pname}).file
|
||||
];
|
||||
} // passthru;
|
||||
passthru' =
|
||||
{
|
||||
updateScript = [
|
||||
../../../../maintainers/scripts/update-octave-packages
|
||||
(builtins.unsafeGetAttrPos "pname" octave.pkgs.${attrs.pname}).file
|
||||
];
|
||||
}
|
||||
// passthru
|
||||
// {
|
||||
tests = {
|
||||
testOctaveBuildEnv = octave.withPackages (ps: [ self ]);
|
||||
} // passthru.tests or { };
|
||||
};
|
||||
|
||||
# This step is required because when
|
||||
# a = { test = [ "a" "b" ]; }; b = { test = [ "c" "d" ]; };
|
||||
@@ -82,63 +89,64 @@ let
|
||||
"passthru"
|
||||
];
|
||||
|
||||
self = stdenv.mkDerivation (
|
||||
{
|
||||
packageName = "${fullLibName}";
|
||||
# The name of the octave package ends up being
|
||||
# "octave-version-package-version"
|
||||
name = "${octave.pname}-${octave.version}-${fullLibName}";
|
||||
|
||||
# This states that any package built with the function that this returns
|
||||
# will be an octave package. This is used for ensuring other octave
|
||||
# packages are installed into octave during the environment building phase.
|
||||
isOctavePackage = true;
|
||||
|
||||
OCTAVE_HISTFILE = "/dev/null";
|
||||
|
||||
inherit src;
|
||||
|
||||
inherit dontPatch patches patchPhase;
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
enableParallelBuilding = enableParallelBuilding;
|
||||
|
||||
requiredOctavePackages = requiredOctavePackages';
|
||||
|
||||
nativeBuildInputs = nativeBuildInputs';
|
||||
|
||||
buildInputs = buildInputs ++ requiredOctavePackages';
|
||||
|
||||
propagatedBuildInputs = propagatedBuildInputs ++ [ texinfo ];
|
||||
|
||||
preBuild =
|
||||
if preBuild == "" then
|
||||
''
|
||||
# This trickery is needed because Octave expects a single directory inside
|
||||
# at the top-most level of the tarball.
|
||||
tar --transform 's,^,${fullLibName}/,' -cz * -f ${fullLibName}.tar.gz
|
||||
''
|
||||
else
|
||||
preBuild;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
mkdir -p $out
|
||||
octave-cli --eval "pkg build $out ${fullLibName}.tar.gz"
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
# We don't install here, because that's handled when we build the environment
|
||||
# together with Octave.
|
||||
dontInstall = true;
|
||||
|
||||
passthru = passthru';
|
||||
|
||||
inherit meta;
|
||||
}
|
||||
// attrs'
|
||||
);
|
||||
in
|
||||
stdenv.mkDerivation (
|
||||
{
|
||||
packageName = "${fullLibName}";
|
||||
# The name of the octave package ends up being
|
||||
# "octave-version-package-version"
|
||||
name = "${octave.pname}-${octave.version}-${fullLibName}";
|
||||
|
||||
# This states that any package built with the function that this returns
|
||||
# will be an octave package. This is used for ensuring other octave
|
||||
# packages are installed into octave during the environment building phase.
|
||||
isOctavePackage = true;
|
||||
|
||||
OCTAVE_HISTFILE = "/dev/null";
|
||||
|
||||
inherit src;
|
||||
|
||||
inherit dontPatch patches patchPhase;
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
enableParallelBuilding = enableParallelBuilding;
|
||||
|
||||
requiredOctavePackages = requiredOctavePackages';
|
||||
|
||||
nativeBuildInputs = nativeBuildInputs';
|
||||
|
||||
buildInputs = buildInputs ++ requiredOctavePackages';
|
||||
|
||||
propagatedBuildInputs = propagatedBuildInputs ++ [ texinfo ];
|
||||
|
||||
preBuild =
|
||||
if preBuild == "" then
|
||||
''
|
||||
# This trickery is needed because Octave expects a single directory inside
|
||||
# at the top-most level of the tarball.
|
||||
tar --transform 's,^,${fullLibName}/,' -cz * -f ${fullLibName}.tar.gz
|
||||
''
|
||||
else
|
||||
preBuild;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
mkdir -p $out
|
||||
octave-cli --eval "pkg build $out ${fullLibName}.tar.gz"
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
# We don't install here, because that's handled when we build the environment
|
||||
# together with Octave.
|
||||
dontInstall = true;
|
||||
|
||||
passthru = passthru';
|
||||
|
||||
inherit meta;
|
||||
}
|
||||
// attrs'
|
||||
)
|
||||
self
|
||||
|
||||
Reference in New Issue
Block a user