From: Eric Blake <eblake@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>, qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Liviu Ionescu" <ilg@livius.net>,
"Markus Armbruster" <armbru@redhat.com>,
"Stefan Hajnoczi" <stefanha@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Michal Suchánek" <msuchanek@suse.de>,
"Aleksandar Markovic" <aleksandar.m.mail@gmail.com>
Subject: Re: [PATCH] configure: warn if not using a separate build directory
Date: Tue, 31 Mar 2020 09:44:37 -0500 [thread overview]
Message-ID: <042a22e2-5be5-ba57-1c35-8f210d9718fd@redhat.com> (raw)
In-Reply-To: <20200331103758.370644-1-berrange@redhat.com>
On 3/31/20 5:37 AM, Daniel P. Berrangé wrote:
> Running configure directly from the source directory is a build
> configuration that will go away in future. It is also not currently
> covered by any automated testing. Display a deprecation warning if
> the user attempts to use an in-srcdir build setup, so that they are
> aware that they're building QEMU in an undesirable manner.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> configure | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
It sounds like you already have a v2 coming up to address Phillipe's
comments, but I'd be happy to see this concept make it into v5.0.
> diff --git a/configure b/configure
> index e225a1e3ff..1ab7492ab5 100755
> --- a/configure
> +++ b/configure
> @@ -3,6 +3,19 @@
> # qemu configure script (c) 2003 Fabrice Bellard
> #
>
> +BUILDDIR=$(pwd)
Why fork out to 'pwd', when we can rely on $PWD for the same answer?
Note that both $(pwd) and $PWD $BUILDDIR always give an absolute (but no
necessarily canonical) path, which means...
> +SRCDIR=$(dirname "$0")
> +
> +ABS_BUILDDIR=$(realpath $BUILDDIR)
...calling this ABS_BUILDDIR is a misnomer (it was already absolute).
What it is really doing is chasing through symlinks to result in a
canonical name, particularly since unless you have absolute names, using
only string comparison to see if two filenames are equivalent will have
false negatives (/tmp vs. /tmp/., for example).
> +ABS_SRCDIR=$(realpath $SRCDIR)
Not robust if there are spaces in the directory names. Safer would be
ABS_BUILDDIR=$(realpath -- "$BUILDDIR")
and similarly for ABS_SRCDIR.
> +
> +in_srcdir=no
> +if [ "$ABS_SRCDIR" == "$ABS_BUILDDIR" ]
Bashism. You MUST spell this '=', not '==', since configure is run under
/bin/sh which might be dash which does not understand ==.
> +then
> + in_srcdir=yes
> +fi
> +
> +
> # Unset some variables known to interfere with behavior of common tools,
> # just as autoconf does.
> CLICOLOR_FORCE= GREP_OPTIONS=
> @@ -6799,6 +6812,23 @@ if test "$supported_os" = "no"; then
> echo "us upstream at qemu-devel@nongnu.org."
> fi
>
> +if test "$in_srcdir" = "yes"; then
> + echo
> + echo "WARNING: SUPPORT FOR IN SOURCE DIR BUILDS IS DEPRECATED"
> + echo
> + echo "Support for running the 'configure' script directly from the"
> + echo "source directory is deprecated and will go away in a future"
> + echo "release. In source dir builds are not covered by automated"
> + echo "testing and are liable to break without warning. Users are"
> + echo "strongly recommended to switch to a separate build directory:"
> + echo
> + echo " $ mkdir build"
> + echo " $ cd build"
> + echo " $ ../configure"
> + echo " $ make"
> + echo
> +fi
You know, it WOULD be possible to further enhance this to actually
create 'build' as well as a shim GNUmakefile that would auto-forward on
to building directly in build, so that you maintain the illusion of an
in-place build (other than all the build artifacts now living in a
different location), and muscle memory for in-tree 'make' still works;
I've posted elsewhere and will repeat here the contents of my GNUmakefile:
# Hack for redirecting while reminding myself to use distinct builddir
ifeq ($(MAKECMDGOALS),)
recurse: all
endif
%: force
@echo 'changing directory to build...'
@sleep 2
@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
force: ;
.PHONY: force
GNUmakefile: ;
But we could do that as a patch on top of yours.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2020-03-31 14:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-31 10:37 [PATCH] configure: warn if not using a separate build directory Daniel P. Berrangé
2020-03-31 11:11 ` Philippe Mathieu-Daudé
2020-03-31 11:41 ` Daniel P. Berrangé
2020-03-31 12:56 ` Philippe Mathieu-Daudé
2020-03-31 14:44 ` Eric Blake [this message]
2020-03-31 14:56 ` Daniel P. Berrangé
2020-03-31 15:51 ` Kevin Wolf
2020-03-31 15:10 ` BALATON Zoltan
2020-04-01 3:03 ` Carlo Arenas
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=042a22e2-5be5-ba57-1c35-8f210d9718fd@redhat.com \
--to=eblake@redhat.com \
--cc=aleksandar.m.mail@gmail.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=ilg@livius.net \
--cc=kwolf@redhat.com \
--cc=msuchanek@suse.de \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/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 NNTP newsgroup(s).