public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx.manpages@gmail.com>
To: Carlos O'Donell <carlos@redhat.com>,
	libc-alpha@sourceware.org,
	Noah Goldstein <goldstein.w.n@gmail.com>,
	Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	Florian Weimer <fweimer@redhat.com>
Subject: Re: [PATCH 1/1] Add lint-makefiles Makefile linting test.
Date: Fri, 19 May 2023 14:35:56 +0200	[thread overview]
Message-ID: <f6d0af46-87df-d864-102b-fbccd096507f@gmail.com> (raw)
In-Reply-To: <20230519121354.704395-2-carlos@redhat.com>


[-- Attachment #1.1: Type: text/plain, Size: 4105 bytes --]

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:

<https://www.gnu.org/software/make/manual/html_node/Standard-Targets.html>

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
> +# <https://www.gnu.org/licenses/>.
> +
> +# 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

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2023-05-19 12:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-19 12:13 [PATCH 0/1] Add linting checks to 'make check' Carlos O'Donell
2023-05-19 12:13 ` [PATCH 1/1] Add lint-makefiles Makefile linting test Carlos O'Donell
2023-05-19 12:35   ` Alejandro Colomar [this message]
2023-05-19 12:45     ` Florian Weimer
2023-05-23 14:05       ` Carlos O'Donell
2023-05-30 12:10       ` Carlos O'Donell
2023-05-19 16:55 ` [PATCH 0/1] Add linting checks to 'make check' Joseph Myers
2023-05-23 12:54   ` Carlos O'Donell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f6d0af46-87df-d864-102b-fbccd096507f@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=carlos@redhat.com \
    --cc=fweimer@redhat.com \
    --cc=goldstein.w.n@gmail.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).