Hi Carlos, On 5/19/23 14:13, Carlos O'Donell via Libc-alpha wrote: > We add a `make check` test that lints all Makefiles in the source > directory of the glibc build. This linting test ensures that the > lines in all Makefiles will be sorted correctly as developers > creates patches. make check is usually to test the result of a build, according the GNU guidelines in: I believe linting the source code is a different thing, and so I used a different target in the Linux man-pages Makefile: 'lint'. So, in the man-pages project, it goes like this: lint -> build -> check -> install Maybe you could follow a similar scheme? Otherwise, it's a bit weird to run the linters _after_ building (since `make check` requires previously building). If you want to have a look at the Linux man-pages' makefiles, you should start by running `make help` and `make help-variables`, and also read the README, CONTRIBUTING (see 'Lint & check' section), and INSTALL files. Cheers, Alex > > The test adds ~3s to a test run. > > No regressions on x86_64 and i686. > --- > Makefile | 6 +++++ > scripts/lint-makefiles.sh | 47 +++++++++++++++++++++++++++++++++++++++ > 2 files changed, 53 insertions(+) > create mode 100644 scripts/lint-makefiles.sh > > diff --git a/Makefile b/Makefile > index 224c792185..93e5a60af9 100644 > --- a/Makefile > +++ b/Makefile > @@ -564,6 +564,12 @@ $(objpfx)check-wrapper-headers.out: scripts/check-wrapper-headers.py $(headers) > --generated $(common-generated) > $@; $(evaluate-test) > endif # $(headers) > > +# Lint all Makefiles including this one to check for correctly sorted lines. > +tests-special += $(objpfx)lint-makefiles.out > +$(objpfx)lint-makefiles.out: scripts/lint-makefiles.sh > + $(SHELL) $< "$(PYTHON)" "$(srcdir)" > $@ ; \ > + $(evaluate-test) > + > define summarize-tests > @grep -E -v '^(PASS|XFAIL):' $(objpfx)$1 || true > @echo "Summary of test results$2:" > diff --git a/scripts/lint-makefiles.sh b/scripts/lint-makefiles.sh > new file mode 100644 > index 0000000000..cf63a4ab9f > --- /dev/null > +++ b/scripts/lint-makefiles.sh > @@ -0,0 +1,47 @@ > +#!/bin/bash > +# Copyright (C) 2023 Free Software Foundation, Inc. > +# This file is part of the GNU C Library. > + > +# The GNU C Library is free software; you can redistribute it and/or > +# modify it under the terms of the GNU Lesser General Public > +# License as published by the Free Software Foundation; either > +# version 2.1 of the License, or (at your option) any later version. > + > +# The GNU C Library is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > +# Lesser General Public License for more details. > + > +# You should have received a copy of the GNU Lesser General Public > +# License along with the GNU C Library; if not, see > +# . > + > +# This script checks to see that all Makefiles in the source tree > +# conform to the sorted variable rules as defined by: > +# scripts/sort-makefile-lines.py. > +# Any difference is an error and should be corrected e.g. the lines > +# reordered to sort correctly. > +# The intent with this check is to ensure that changes made by > +# developers match the expected format for the project. > + > +set -e > +export LC_ALL=C > + > +tmpfile="$(mktemp)" > + > +cleanup () { > + rm -f -- "$tmpfile" > +} > + > +trap cleanup 0 > + > +PYTHON=$1 > +srcdir=$2 > + > +echo "Linting Makefiles:" > +echo "Check: Are all lines sorted correctly?" > +for mfile in `find "$srcdir" -name Makefile`; do > + echo "$mfile" > + $PYTHON "${srcdir}scripts/sort-makefile-lines.py" < "$mfile" > "$tmpfile" > + diff -q "$mfile" "$tmpfile" > +done -- GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5