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