|
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 | +if isMATLABReleaseOlderThan("R2024b") |
| 16 | + cnomex = cnomex & ~HasTag("symlink"); |
| 17 | +end |
| 18 | + |
| 19 | +cmex = ~HasTag("exe") & HasTag("mex"); |
| 20 | +cnojavamex = ~HasTag("java") & cnomex; |
| 21 | + |
| 22 | + |
| 23 | +if isMATLABReleaseOlderThan("R2024b") |
| 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 | + plan("test_nojavamex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnojavamex), Dependencies="clean"); |
| 29 | + |
| 30 | +elseif isMATLABReleaseOlderThan("R2025a") |
| 31 | + |
| 32 | + plan("test:exe") = matlab.buildtool.tasks.TestTask("test", Tag="exe", Dependencies="exe"); |
| 33 | + plan("test:nomex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnomex), Dependencies="clean"); |
| 34 | + plan("test:mex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cmex), Dependencies="mex"); |
| 35 | + plan("test:nojavamex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnojavamex), Dependencies="clean"); |
| 36 | + |
15 | 37 | else |
16 | 38 | % can't use SourceFiles= if "mex" Task was run, even if plan("test").DisableIncremental = true; |
17 | 39 | % 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"); |
| 40 | + plan("test:exe") = matlab.buildtool.tasks.TestTask("test", Tag="exe", ... |
| 41 | + Dependencies="exe", TestResults="TestResults_exe.xml", Strict=false); |
| 42 | + |
| 43 | + plan("test:nomex") = matlab.buildtool.tasks.TestTask("test", ... |
| 44 | + Selector=cnomex, ... |
| 45 | + Dependencies="clean", TestResults="TestResults_nomex.xml", Strict=false); |
| 46 | + |
| 47 | + plan("test:mex") = matlab.buildtool.tasks.TestTask("test", ... |
| 48 | + Selector=cmex, ... |
| 49 | + Dependencies="mex", TestResults="TestResults_mex.xml", Strict=false); |
| 50 | + |
| 51 | + plan("test:nojavamex") = matlab.buildtool.tasks.TestTask("test", ... |
| 52 | + Selector=cnojavamex, ... |
| 53 | + Dependencies="clean", TestResults="TestResults_nojavamex.xml", Strict=false); |
| 54 | + |
19 | 55 | end |
20 | 56 |
|
21 | 57 | td = plan.RootFolder + "/test"; |
|
26 | 62 | exes = [exes, td+"/stdout_stderr_fortran.exe", td+"/stdin_fortran.exe"]; |
27 | 63 | end |
28 | 64 | 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 | 65 |
|
35 | 66 | if ~isMATLABReleaseOlderThan("R2024a") |
36 | 67 | plan("check") = matlab.buildtool.tasks.CodeIssuesTask(pkg_name, IncludeSubfolders=true, ... |
@@ -82,9 +113,15 @@ function legacy_mex(context, compiler_opt, linker_opt) |
82 | 113 | end |
83 | 114 |
|
84 | 115 |
|
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 |
| 116 | +function legacy_test(context, sel) |
| 117 | +import matlab.unittest.TestSuite |
| 118 | + |
| 119 | +suite = TestSuite.fromFolder(context.Plan.RootFolder + "/test"); |
| 120 | +suite = suite.selectIf(sel); |
| 121 | + |
| 122 | +runner = testrunner(); |
| 123 | + |
| 124 | +r = run(runner, suite); |
88 | 125 |
|
89 | 126 | assert(~isempty(r), "No tests were run") |
90 | 127 | assertSuccess(r) |
@@ -256,10 +293,6 @@ function build_exe(context) |
256 | 293 | if msvc |
257 | 294 | std = "/std:c++17"; |
258 | 295 | % 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 | 296 | elseif ~strlength(compiler_id) && cxx.ShortName == "g++" |
264 | 297 | if ~stdlib.version_atleast(cxx.Version, "8") |
265 | 298 | warning("g++ 8 or newer is required for MEX, detected g++" + cxx.Version) |
|
0 commit comments