diff --git a/.github/workflows/checksrc.yml b/.github/workflows/checksrc.yml index d1771ef05c..f7835499eb 100644 --- a/.github/workflows/checksrc.yml +++ b/.github/workflows/checksrc.yml @@ -43,7 +43,7 @@ jobs: persist-credentials: false - name: 'check' - run: scripts/checksrc-all.sh + run: scripts/checksrc-all.pl codespell-cmakelint-pytype-ruff: name: 'codespell, cmakelint, pytype, ruff' diff --git a/.github/workflows/distcheck.yml b/.github/workflows/distcheck.yml index 955eae998d..90db76ad4b 100644 --- a/.github/workflows/distcheck.yml +++ b/.github/workflows/distcheck.yml @@ -113,7 +113,7 @@ jobs: make test-ci make install popd - scripts/checksrc-all.sh + scripts/checksrc-all.pl verify-out-of-tree-cmake: name: 'CM out-of-tree' diff --git a/scripts/Makefile.am b/scripts/Makefile.am index b4e3c0757b..2c98aac9f7 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -22,7 +22,7 @@ # ########################################################################### -EXTRA_DIST = coverage.sh completion.pl firefox-db2pem.sh checksrc.pl checksrc-all.sh \ +EXTRA_DIST = coverage.sh completion.pl firefox-db2pem.sh checksrc.pl checksrc-all.pl \ mk-ca-bundle.pl mk-unity.pl schemetable.c cd2nroff nroff2cd cdall cd2cd managen \ dmaketgz maketgz release-tools.sh verify-release cmakelint.sh mdlinkcheck \ CMakeLists.txt pythonlint.sh randdisable wcurl top-complexity extract-unit-protos diff --git a/scripts/checksrc-all.pl b/scripts/checksrc-all.pl new file mode 100755 index 0000000000..0b579567a3 --- /dev/null +++ b/scripts/checksrc-all.pl @@ -0,0 +1,38 @@ +#!/usr/bin/env perl +# Copyright (C) Viktor Szakats +# +# SPDX-License-Identifier: curl + +use strict; +use warnings; + +use File::Basename; +use File::Find; +use Cwd 'abs_path'; + +my @files; +if(system('git rev-parse --is-inside-work-tree >/dev/null 2>&1') == 0) { + @files = `git ls-files '*.[ch]'`; +} +else { + find(sub { if(/\.[ch]/) { push(@files, $File::Find::name) } }, ('.')); +} +if(@ARGV) { + find(sub { if(/\.[ch]/) { push(@files, $File::Find::name) } }, @ARGV); +} + +@files = grep !/\/CMakeFiles\//, @files; +@files = map { dirname($_) } @files; +my @dirs = sort { $a cmp $b } keys %{{ map { $_ => 1 } @files }}; + +my $scripts_dir = dirname(abs_path($0)); +my $anyfailed = 0; + +for my $dir (@dirs) { + @files = glob("$dir/*.[ch]"); + if(@files && system("$scripts_dir/checksrc.pl", @files) != 0) { + $anyfailed = 1; + } +} + +exit $anyfailed; diff --git a/scripts/checksrc-all.sh b/scripts/checksrc-all.sh deleted file mode 100755 index 2c4b3c5e28..0000000000 --- a/scripts/checksrc-all.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# Copyright (C) Viktor Szakats -# -# SPDX-License-Identifier: curl - -set -eu - -anyfailed=0 - -for dir in $({ - if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then - git ls-files '*.[ch]' - else - find . -name '*.[ch]' - fi - [ -n "${1:-}" ] && find "$@" -name '*.[ch]' - } | grep -v -F '/CMakeFiles/' | sed -E 's|/[^/]+$||' | sort -u); do - if ! ./scripts/checksrc.pl "${dir}"/*.[ch]; then - anyfailed=1 - fi -done - -exit "${anyfailed}"