Skip to content

Commit a25d57d

Browse files
committed
buildOctavePackage: add octave 'pkg test' passthru test
test successes: * `octavePackages.bim.tests.testOctavePkgTests` -> `/nix/store/rvm4zzmb41gfvda04fzacfbav1kkr7a0-octave-10.1.0-bim-1.1.6-pkg-test` * `octavePackages.bsltl.tests.testOctavePkgTests` -> `/nix/store/khldlkk16g6f9iyxwpzi5mrlxfy66n25-octave-10.1.0-bsltl-1.3.1-pkg-test` * `octavePackages.cgi.tests.testOctavePkgTests` -> `/nix/store/k742s20zh6zmhlm0jsn0af7wlij265iq-octave-10.1.0-cgi-0.1.2-pkg-test` * `octavePackages.communications.tests.testOctavePkgTests` -> `/nix/store/38kpxq4p7bl619grvlmgl15h0d54l6vr-octave-10.1.0-communications-1.2.7-pkg-test` * `octavePackages.dataframe.tests.testOctavePkgTests` -> `/nix/store/7svdgvbhd04dl2j89g18n8mi21bfhj41-octave-10.1.0-dataframe-1.2.0-pkg-test` * `octavePackages.dicom.tests.testOctavePkgTests` -> `/nix/store/9g4wpr0j49hghjzn054lpl00zlg936nx-octave-10.1.0-dicom-0.6.1-pkg-test` * `octavePackages.divand.tests.testOctavePkgTests` -> `/nix/store/rja901hkzlkyrqrvg7qbdf3d4jabj9my-octave-10.1.0-divand-1.1.2-pkg-test` * `octavePackages.doctest.tests.testOctavePkgTests` -> `/nix/store/5dxnn1hrc184zlpvy00cs10szwlqmgpd-octave-10.1.0-doctest-0.8.0-pkg-test` * `octavePackages.fpl.tests.testOctavePkgTests` -> `/nix/store/4ixfranhmz824rlzqa34l2snf6xqbnsl-octave-10.1.0-fpl-1.3.5-pkg-test` * `octavePackages.fuzzy-logic-toolkit.tests.testOctavePkgTests` -> `/nix/store/d91hadx59bv0cw0a7z8zdx48inha8bji-octave-10.1.0-fuzzy-logic-toolkit-0.6.1-pkg-test` * `octavePackages.ga.tests.testOctavePkgTests` -> `/nix/store/2jwhq7iv54aqzshg4m8xq3h8plxrihfn-octave-10.1.0-ga-0.10.4-pkg-test` * `octavePackages.general.tests.testOctavePkgTests` -> `/nix/store/bjd00kl6m86fz9cp70ai6jni6jfijw2g-octave-10.1.0-general-2.1.3-pkg-test` * `octavePackages.generate_html.tests.testOctavePkgTests` -> `/nix/store/29z3q919nzrkd2afzr7i9c325fk8h966-octave-10.1.0-generate_html-0.3.3-pkg-test` * `octavePackages.io.tests.testOctavePkgTests` -> `/nix/store/qpj69a8swl3rzs039fkyf77krb3nbqf6-octave-10.1.0-io-2.7.0-pkg-test` * `octavePackages.linear-algebra.tests.testOctavePkgTests` -> `/nix/store/x28qgln5fww84z8sjr5ynnh4h9yxhhz7-octave-10.1.0-linear-algebra-2.2.3-pkg-test` * `octavePackages.matgeom.tests.testOctavePkgTests` -> `/nix/store/f7r4rvv6czh56phmf67ihn7ki7p0j7fa-octave-10.1.0-matgeom-1.2.4-pkg-test` * `octavePackages.miscellaneous.tests.testOctavePkgTests` -> `/nix/store/1vp5vpi3fgbw5bwf409vsz1q9n7qvwv4-octave-10.1.0-miscellaneous-1.3.1-pkg-test` * `octavePackages.mvn.tests.testOctavePkgTests` -> `/nix/store/882fwfw2yda00qv021ih45agx0iqimcm-octave-10.1.0-mvn-1.1.0-pkg-test` * `octavePackages.netcdf.tests.testOctavePkgTests` -> `/nix/store/zdba74gxzh5xf4vnmhv36wjf81zy48jj-octave-10.1.0-netcdf-1.0.18-pkg-test` * `octavePackages.nurbs.tests.testOctavePkgTests` -> `/nix/store/jcm76br2zv1f4pmx2jvv63mqwd6pk1wi-octave-10.1.0-nurbs-1.4.4-pkg-test` * `octavePackages.octclip.tests.testOctavePkgTests` -> `/nix/store/6phn6qz154i3861gswx50bwaa76kf2nh-octave-10.1.0-octclip-2.0.3-pkg-test` * `octavePackages.octproj.tests.testOctavePkgTests` -> `/nix/store/ylllvmg0via7i99rf121znwq4dr9k4b9-octave-10.1.0-octproj-3.0.2-pkg-test` * `octavePackages.optics.tests.testOctavePkgTests` -> `/nix/store/407nl9b2j85z22p163xsiy94rd4sczrz-octave-10.1.0-optics-0.1.4-pkg-test` * `octavePackages.optiminterp.tests.testOctavePkgTests` -> `/nix/store/a7yq31rp93a37fwz269f7qra3qc2kjr7-octave-10.1.0-optiminterp-0.3.7-pkg-test` * `octavePackages.quaternion.tests.testOctavePkgTests` -> `/nix/store/fxb9gwljpqyidl1v21y5782fl9v08bbp-octave-10.1.0-quaternion-2.4.0-pkg-test` * `octavePackages.sockets.tests.testOctavePkgTests` -> `/nix/store/jcgbc9g54s49d82xq19ifxjzx45f1pdx-octave-10.1.0-sockets-1.4.1-pkg-test` * `octavePackages.splines.tests.testOctavePkgTests` -> `/nix/store/sydyfjl35z4snh45bjk79n5vxqps42iq-octave-10.1.0-splines-1.3.5-pkg-test` * `octavePackages.strings.tests.testOctavePkgTests` -> `/nix/store/ksx4g1axic4lgqkk2551winz3sdk6bsy-octave-10.1.0-strings-1.3.1-pkg-test` * `octavePackages.struct.tests.testOctavePkgTests` -> `/nix/store/ib8pmcjwyga08s3qq9mv04g5421796q7-octave-10.1.0-struct-1.0.18-pkg-test` * `octavePackages.tsa.tests.testOctavePkgTests` -> `/nix/store/d2c2fjr9b5fxaaw571a299v5h2jxmj56-octave-10.1.0-tsa-4.6.3-pkg-test` * `octavePackages.windows.tests.testOctavePkgTests` -> `/nix/store/dp5rwkr9li4w5346ibl3fyrs9p0l566j-octave-10.1.0-windows-1.6.5-pkg-test` * `octavePackages.zeromq.tests.testOctavePkgTests` -> `/nix/store/39zr8n4ccyxi94hkpk95p1h13v9kw4n8-octave-10.1.0-zeromq-1.5.5-pkg-test` test failures: * `octavePackages.audio.tests.testOctavePkgTests` * `octavePackages.control.tests.testOctavePkgTests` * `octavePackages.database.tests.testOctavePkgTests` * `octavePackages.geometry.tests.testOctavePkgTests` * `octavePackages.image-acquisition.tests.testOctavePkgTests` * `octavePackages.image.tests.testOctavePkgTests` * `octavePackages.instrument-control.tests.testOctavePkgTests` * `octavePackages.interval.tests.testOctavePkgTests` * `octavePackages.lssa.tests.testOctavePkgTests` * `octavePackages.msh.tests.testOctavePkgTests` * `octavePackages.nan.tests.testOctavePkgTests` * `octavePackages.ncarray.tests.testOctavePkgTests` * `octavePackages.signal.tests.testOctavePkgTests` * `octavePackages.statistics.tests.testOctavePkgTests` * `octavePackages.stk.tests.testOctavePkgTests` * `octavePackages.symbolic.tests.testOctavePkgTests` * `octavePackages.video.tests.testOctavePkgTests`
1 parent f5b8914 commit a25d57d

File tree

2 files changed

+101
-75
lines changed

2 files changed

+101
-75
lines changed

pkgs/development/interpreters/octave/build-octave-package.nix

Lines changed: 76 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
stdenv,
1010
config,
1111
octave,
12+
callPackage,
1213
texinfo,
1314
computeRequiredOctavePackages,
1415
writeRequiredOctavePackagesHook,
@@ -64,20 +65,6 @@ let
6465
writeRequiredOctavePackagesHook
6566
] ++ nativeBuildInputs;
6667

67-
passthru' =
68-
{
69-
updateScript = [
70-
../../../../maintainers/scripts/update-octave-packages
71-
(builtins.unsafeGetAttrPos "pname" octave.pkgs.${attrs.pname}).file
72-
];
73-
}
74-
// passthru
75-
// {
76-
tests = {
77-
testOctaveBuildEnv = octave.withPackages (ps: [ self ]);
78-
} // passthru.tests or { };
79-
};
80-
8168
# This step is required because when
8269
# a = { test = [ "a" "b" ]; }; b = { test = [ "c" "d" ]; };
8370
# (a // b).test = [ "c" "d" ];
@@ -88,65 +75,79 @@ let
8875
"nativeBuildInputs"
8976
"passthru"
9077
];
91-
92-
self = stdenv.mkDerivation (
93-
{
94-
packageName = "${fullLibName}";
95-
# The name of the octave package ends up being
96-
# "octave-version-package-version"
97-
name = "${octave.pname}-${octave.version}-${fullLibName}";
98-
99-
# This states that any package built with the function that this returns
100-
# will be an octave package. This is used for ensuring other octave
101-
# packages are installed into octave during the environment building phase.
102-
isOctavePackage = true;
103-
104-
OCTAVE_HISTFILE = "/dev/null";
105-
106-
inherit src;
107-
108-
inherit dontPatch patches patchPhase;
109-
110-
dontConfigure = true;
111-
112-
enableParallelBuilding = enableParallelBuilding;
113-
114-
requiredOctavePackages = requiredOctavePackages';
115-
116-
nativeBuildInputs = nativeBuildInputs';
117-
118-
buildInputs = buildInputs ++ requiredOctavePackages';
119-
120-
propagatedBuildInputs = propagatedBuildInputs ++ [ texinfo ];
121-
122-
preBuild =
123-
if preBuild == "" then
124-
''
125-
# This trickery is needed because Octave expects a single directory inside
126-
# at the top-most level of the tarball.
127-
tar --transform 's,^,${fullLibName}/,' -cz * -f ${fullLibName}.tar.gz
128-
''
129-
else
130-
preBuild;
131-
132-
buildPhase = ''
133-
runHook preBuild
134-
135-
mkdir -p $out
136-
octave-cli --eval "pkg build $out ${fullLibName}.tar.gz"
137-
138-
runHook postBuild
139-
'';
140-
141-
# We don't install here, because that's handled when we build the environment
142-
# together with Octave.
143-
dontInstall = true;
144-
145-
passthru = passthru';
146-
147-
inherit meta;
148-
}
149-
// attrs'
150-
);
15178
in
152-
self
79+
stdenv.mkDerivation (
80+
finalAttrs:
81+
{
82+
packageName = "${fullLibName}";
83+
# The name of the octave package ends up being
84+
# "octave-version-package-version"
85+
name = "${octave.pname}-${octave.version}-${fullLibName}";
86+
87+
# This states that any package built with the function that this returns
88+
# will be an octave package. This is used for ensuring other octave
89+
# packages are installed into octave during the environment building phase.
90+
isOctavePackage = true;
91+
92+
OCTAVE_HISTFILE = "/dev/null";
93+
94+
inherit src;
95+
96+
inherit dontPatch patches patchPhase;
97+
98+
dontConfigure = true;
99+
100+
enableParallelBuilding = enableParallelBuilding;
101+
102+
requiredOctavePackages = requiredOctavePackages';
103+
104+
nativeBuildInputs = nativeBuildInputs';
105+
106+
buildInputs = buildInputs ++ requiredOctavePackages';
107+
108+
propagatedBuildInputs = propagatedBuildInputs ++ [ texinfo ];
109+
110+
preBuild =
111+
if preBuild == "" then
112+
''
113+
# This trickery is needed because Octave expects a single directory inside
114+
# at the top-most level of the tarball.
115+
tar --transform 's,^,${fullLibName}/,' -cz * -f ${fullLibName}.tar.gz
116+
''
117+
else
118+
preBuild;
119+
120+
buildPhase = ''
121+
runHook preBuild
122+
123+
mkdir -p $out
124+
octave-cli --eval "pkg build $out ${fullLibName}.tar.gz"
125+
126+
runHook postBuild
127+
'';
128+
129+
# We don't install here, because that's handled when we build the environment
130+
# together with Octave.
131+
dontInstall = true;
132+
133+
passthru =
134+
{
135+
updateScript = [
136+
../../../../maintainers/scripts/update-octave-packages
137+
(builtins.unsafeGetAttrPos "pname" octave.pkgs.${attrs.pname}).file
138+
];
139+
}
140+
// passthru
141+
// {
142+
tests = {
143+
testOctaveBuildEnv = (octave.withPackages (os: [ finalAttrs.finalPackage ])).overrideAttrs (old: {
144+
name = "${finalAttrs.name}-pkg-install";
145+
});
146+
testOctavePkgTests = callPackage ./run-pkg-test.nix { } finalAttrs.finalPackage;
147+
} // passthru.tests or { };
148+
};
149+
150+
inherit meta;
151+
}
152+
// attrs'
153+
)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
octave,
3+
runCommand,
4+
}:
5+
package:
6+
7+
runCommand "${package.name}-pkg-test"
8+
{
9+
nativeBuildInputs = [
10+
(octave.withPackages (os: [ package ]))
11+
];
12+
}
13+
''
14+
{ octave-cli --eval 'pkg test ${package.pname}' || touch FAILED_ERRCODE; } \
15+
|& tee >( grep --quiet '^Failure Summary:$' && touch FAILED_OUTPUT || : ; cat >/dev/null )
16+
if [[ -f FAILED_ERRCODE ]]; then
17+
echo >&2 "octave-cli returned with non-zero exit code."
18+
false
19+
elif [[ -f FAILED_OUTPUT ]]; then
20+
echo >&2 "Test failures detected in output."
21+
false
22+
else
23+
touch $out
24+
fi
25+
''

0 commit comments

Comments
 (0)