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
|
#!/usr/bin/env python3
# SPDX-License-Identifier: Apache-2.0
# Copyright 2025 The Meson development team
import pathlib
import sys
# DO NOT ADD FILES IN THIS LIST!
# They are here because they got added
# in the past before this was properly checked.
# Instead you should consider removing things
# from this list by rewriting them to Python.
#
# The CI scripts probably need to remain shell
# scripts due to the way the CI systems work.
permitted_files = (
'ci/ciimage/common.sh',
'ci/intel-scripts/cache_exclude_windows.sh',
'ci/ciimage/opensuse/install.sh',
'ci/ciimage/ubuntu-rolling/install.sh',
'ci/ciimage/ubuntu-rolling/test.sh',
'ci/ciimage/cuda-cross/install.sh',
'ci/ciimage/cuda/install.sh',
'ci/ciimage/bionic/install.sh',
'ci/ciimage/fedora/install.sh',
'ci/ciimage/arch/install.sh',
'ci/ciimage/gentoo/install.sh',
'manual tests/4 standalone binaries/myapp.sh',
'manual tests/4 standalone binaries/osx_bundler.sh',
'manual tests/4 standalone binaries/linux_bundler.sh',
'manual tests/4 standalone binaries/build_osx_package.sh',
'manual tests/4 standalone binaries/build_linux_package.sh',
'test cases/failing test/3 ambiguous/test_runner.sh',
'test cases/common/190 install_mode/runscript.sh',
'test cases/common/48 file grabber/grabber.sh',
'test cases/common/12 data/runscript.sh',
'test cases/common/33 run program/scripts/hello.sh',
)
def check_bad_files(filename_glob):
num_errors = 0
for f in pathlib.Path('.').glob(f'**/{filename_glob}'):
if str(f) not in permitted_files:
print('Forbidden file type:', f)
num_errors += 1
return num_errors
def check_deletions():
num_errors = 0
for f in permitted_files:
p = pathlib.Path(f)
if not p.is_file():
print('Exception list has a file that does not exist:', f)
num_errors += 1
return num_errors
def check_shell_usage():
total_errors = 0
total_errors += check_bad_files('Makefile')
total_errors += check_bad_files('*.sh')
total_errors += check_bad_files('*.awk')
total_errors += check_deletions()
return total_errors
if __name__ == '__main__':
sys.exit(check_shell_usage())
|