|
1 | 1 | function plan = buildfile |
2 | | -assert(~isMATLABReleaseOlderThan("R2023a"), "MATLAB R2023a or newer is required for this buildfile") |
| 2 | +import matlab.unittest.selectors.HasTag |
| 3 | +assert(~isMATLABReleaseOlderThan("R2023b"), "MATLAB R2023b or newer is required for this buildfile") |
3 | 4 |
|
4 | 5 | plan = buildplan(localfunctions); |
5 | 6 |
|
|
8 | 9 | addpath(plan.RootFolder) |
9 | 10 |
|
10 | 11 | %% Self-test setup |
11 | | -if isMATLABReleaseOlderThan("R2023b") |
12 | | - plan("test") = matlab.buildtool.Task(Actions=@legacy_test); |
13 | | -elseif isMATLABReleaseOlderThan("R2024a") |
14 | | - plan("test") = matlab.buildtool.tasks.TestTask("test", Strict=false); |
| 12 | +plan("clean") = matlab.buildtool.tasks.CleanTask; |
| 13 | + |
| 14 | +cnomex = ~HasTag("exe") & ~HasTag("mex"); |
| 15 | +cmex = ~HasTag("exe") & HasTag("mex"); |
| 16 | + |
| 17 | +if isMATLABReleaseOlderThan("R2024b") |
| 18 | + |
| 19 | + plan("test_exe") = matlab.buildtool.tasks.TestTask("test", Tag="exe", Dependencies="exe"); |
| 20 | + plan("test_nomex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnomex), Dependencies="clean"); |
| 21 | + plan("test_mex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cmex), Dependencies="mex"); |
| 22 | + |
| 23 | +elseif isMATLABReleaseOlderThan("R2025a") |
| 24 | + |
| 25 | + plan("test:exe") = matlab.buildtool.tasks.TestTask("test", Tag="exe", Dependencies="exe"); |
| 26 | + plan("test:nomex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnomex), Dependencies="clean"); |
| 27 | + plan("test:mex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cmex), Dependencies="mex"); |
| 28 | + |
15 | 29 | else |
16 | 30 | % can't use SourceFiles= if "mex" Task was run, even if plan("test").DisableIncremental = true; |
17 | 31 | % this means incremental tests can't be used with MEX files (as of R2024b) |
18 | | - plan("test") = matlab.buildtool.tasks.TestTask("test", Strict=false, TestResults="TestResults.xml"); |
| 32 | + plan("test:exe") = matlab.buildtool.tasks.TestTask("test", Tag="exe", ... |
| 33 | + Dependencies="exe", TestResults="TestResults_exe.xml", Strict=false); |
| 34 | + |
| 35 | + plan("test:nomex") = matlab.buildtool.tasks.TestTask("test", ... |
| 36 | + Selector=cnomex, ... |
| 37 | + Dependencies="clean", TestResults="TestResults_nomex.xml", Strict=false); |
| 38 | + |
| 39 | + plan("test:mex") = matlab.buildtool.tasks.TestTask("test", ... |
| 40 | + Selector=cmex, ... |
| 41 | + Dependencies="mex", TestResults="TestResults_mex.xml", Strict=false); |
| 42 | + |
19 | 43 | end |
20 | 44 |
|
21 | 45 | td = plan.RootFolder + "/test"; |
|
26 | 50 | exes = [exes, td+"/stdout_stderr_fortran.exe", td+"/stdin_fortran.exe"]; |
27 | 51 | end |
28 | 52 | plan("exe") = matlab.buildtool.Task(Inputs=srcs, Outputs=exes, Actions=@build_exe); |
29 | | -plan("test").Dependencies = "exe"; |
30 | | - |
31 | | -if ~isMATLABReleaseOlderThan("R2023b") |
32 | | - plan("clean") = matlab.buildtool.tasks.CleanTask; |
33 | | -end |
34 | 53 |
|
35 | 54 | if ~isMATLABReleaseOlderThan("R2024a") |
36 | 55 | plan("check") = matlab.buildtool.tasks.CodeIssuesTask(pkg_name, IncludeSubfolders=true, ... |
@@ -82,9 +101,15 @@ function legacy_mex(context, compiler_opt, linker_opt) |
82 | 101 | end |
83 | 102 |
|
84 | 103 |
|
85 | | -function legacy_test(context) |
86 | | -r = runtests(context.Plan.RootFolder + "/test", Strict=false); |
87 | | -% Parallel Computing Toolbox takes more time to startup than is worth it for this task |
| 104 | +function legacy_test(context, sel) |
| 105 | +import matlab.unittest.TestSuite |
| 106 | + |
| 107 | +suite = TestSuite.fromFolder(context.Plan.RootFolder + "/test"); |
| 108 | +suite = suite.selectIf(sel); |
| 109 | + |
| 110 | +runner = testrunner(); |
| 111 | + |
| 112 | +r = run(runner, suite); |
88 | 113 |
|
89 | 114 | assert(~isempty(r), "No tests were run") |
90 | 115 | assertSuccess(r) |
@@ -256,10 +281,6 @@ function build_exe(context) |
256 | 281 | if msvc |
257 | 282 | std = "/std:c++17"; |
258 | 283 | % on Windows, Matlab doesn't register unsupported MSVC or oneAPI |
259 | | -elseif cxx.Name == "Xcode Clang++" |
260 | | - if isMATLABReleaseOlderThan("R2023b") && stdlib.version_atleast(cxx.Version, "15.0") |
261 | | - warning("Xcode Clang++ " + cxx.Version + " may not support this Matlab version") |
262 | | - end |
263 | 284 | elseif ~strlength(compiler_id) && cxx.ShortName == "g++" |
264 | 285 | if ~stdlib.version_atleast(cxx.Version, "8") |
265 | 286 | warning("g++ 8 or newer is required for MEX, detected g++" + cxx.Version) |
|
0 commit comments