Repository navigation
Expand file tree
/
Copy pathrun_all_examples.cmd
More file actions
131 lines (83 loc) · 2.71 KB
/
Copy pathrun_all_examples.cmd
File metadata and controls
131 lines (83 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
@echo off
SETLOCAL
SET SCRIPT_DIRECTORY=%~dp0
SET SCRIPT_PATH_DOC=%~n0[%~x0]
SET "ALLOWED_TO_FAIL_FILE=%SCRIPT_DIRECTORY%.sis\ci_examples_allowed_to_fail.txt"
SET "PROGRAM_STATUS=0"
IF DEFINED SIS_CMAKE_BUILD_DIR (
SET CMAKE_DIR=%SIS_CMAKE_BUILD_DIR%
) ELSE (
SET CMAKE_DIR=%SCRIPT_DIRECTORY%_build
)
FOR %%a IN (%*) DO (
IF /I {--help}=={%%a} (
IF EXIST "%SCRIPT_DIRECTORY%.sis\script_info_lines.txt" (
type "%SCRIPT_DIRECTORY%.sis\script_info_lines.txt"
)
ECHO ^
Runs all ^(matching^) example programs ^
^
%SCRIPT_PATH_DOC% [ ... flags/options ... ] ^
^
Flags/options: ^
behaviour: ^
^
standard flags: ^
^
--help ^
displays this help and terminates ^
^
files: ^
^
.sis\ci_examples_allowed_to_fail.txt ^
optional list of example programs ^(one name per line; ^
lines beginning with '#' are ignored^) that are allowed to fail; ^
such a program is still executed, but a non-zero exit is ^
reported as anticipated and does not stop the run ^
EXIT /B 0
) ELSE (
ECHO "%SCRIPT_DIRECTORY%: unrecognised argument '%%a'; use --help for usage" 1>&2
EXIT /B 1
)
)
if NOT EXIST "%CMAKE_DIR%" (
ECHO "CMake build directory '%CMAKE_DIR%' does not exist"
EXIT /B 1
)
SET "ProjectName="
FOR /F "usebackq delims=" %%p IN ("%SCRIPT_DIRECTORY%.sis\project_name.txt") DO SET "ProjectName=%%p"
IF NOT DEFINED ProjectName (
ECHO %SCRIPT_PATH_DOC%: could not read project name from .sis\project_name.txt 1>&2
EXIT /B 1
)
REM Examples that require human input may honour SIS_EXAMPLE_SMOKE for a
REM no-arg built-in tmpfile demo (see example.c.cstring_vector).
SET SIS_EXAMPLE_SMOKE=1
ECHO Running all %ProjectName% example programs
FOR /F "usebackq" %%f IN (`DIR /A:-D /B /S "%CMAKE_DIR%" ^| FINDSTR /I example.*\.exe$`) DO CALL :run_program "%%f"
ENDLOCAL & EXIT /B %PROGRAM_STATUS%
REM ##########################################################
REM subroutines
:run_program
IF %PROGRAM_STATUS% NEQ 0 EXIT /B 0
ECHO .
ECHO executing %~1
"%~1"
SET "FAILURE_STATUS=%ERRORLEVEL%"
IF %FAILURE_STATUS% EQU 0 EXIT /B 0
CALL :is_allowed_to_fail "%~1"
IF NOT DEFINED ALLOWED_TO_FAIL GOTO run_program_failed
ECHO anticipated failure: %~1 exited with status %FAILURE_STATUS%; it is listed in .sis\ci_examples_allowed_to_fail.txt
EXIT /B 0
:run_program_failed
SET "PROGRAM_STATUS=%FAILURE_STATUS%"
EXIT /B 0
:is_allowed_to_fail
SET "ALLOWED_TO_FAIL="
IF NOT EXIST "%ALLOWED_TO_FAIL_FILE%" EXIT /B 0
FOR /F "usebackq eol=# tokens=1" %%n IN ("%ALLOWED_TO_FAIL_FILE%") DO CALL :match_allowed "%%n" "%~n1" "%~nx1"
EXIT /B 0
:match_allowed
IF /I "%~1"=="%~2" SET "ALLOWED_TO_FAIL=1"
IF /I "%~1"=="%~3" SET "ALLOWED_TO_FAIL=1"
EXIT /B 0