| #!/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/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()) | |