Message ID | 20200821102204.337859-1-berrange@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v3] configure: add support for pseudo-"in source tree" builds | expand |
On 21/08/20 12:22, Daniel P. Berrangé wrote: > Meson requires the build dir to be separate from the source tree. Many > people are used to just running "./configure && make" though and the > meson conversion breaks that. > > This introduces some backcompat support to make it appear as if an > "in source tree" build is being done, but with the results in the > "build/" directory. This allows "./configure && make" to work as it > did historically, albeit with the output binaries staying under build/. > > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> > --- > > Changed in v3: > > - remove bashism == > - avoid need for quoting when generating GNUmakefile > - change line breaks in GNUmakefile for clarity > > .gitignore | 2 ++ > configure | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- > 2 files changed, 51 insertions(+), 3 deletions(-) > > diff --git a/.gitignore b/.gitignore > index 92311284ef..4ccb9ed975 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -1,3 +1,5 @@ > +/GNUmakefile > +/build/ > /.doctrees > /config-devices.* > /config-all-devices.* > diff --git a/configure b/configure > index cc5f58f31a..4e5fe33211 100755 > --- a/configure > +++ b/configure > @@ -11,6 +11,55 @@ unset CLICOLOR_FORCE GREP_OPTIONS > # Don't allow CCACHE, if present, to use cached results of compile tests! > export CCACHE_RECACHE=yes > > +# make source path absolute > +source_path=$(cd "$(dirname -- "$0")"; pwd) > + > +if test "$PWD" = "$source_path" > +then > + echo "Using './build' as the directory for build output" > + > + MARKER=build/auto-created-by-configure > + > + if test -e build > + then > + if test -f $MARKER > + then > + rm -rf build > + else > + echo "ERROR: ./build dir already exists and was not previously created by configure" > + exit 1 > + fi > + fi > + > + mkdir build > + touch $MARKER > + > + cat > GNUmakefile <<'EOF' > +# This file is auto-generated by configure to support in-source tree > +# 'make' command invocation > + > +ifeq ($(MAKECMDGOALS),) > +recurse: all > +endif > + > +.NOTPARALLEL: % > +%: force > + @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' > + @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) > + @if test "$(MAKECMDGOALS)" = "distclean" && \ > + test -e build/auto-created-by-configure ; \ > + then \ > + rm -rf build GNUmakefile ; \ > + fi > +force: ; > +.PHONY: force > +GNUmakefile: ; > + > +EOF > + cd build > + exec $source_path/configure "$@" > +fi > + > # Temporary directory used for files created while > # configure runs. Since it is in the build directory > # we can safely blow away any previous version of it > @@ -297,9 +346,6 @@ ld_has() { > $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 > } > > -# make source path absolute > -source_path=$(cd "$(dirname -- "$0")"; pwd) > - > if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; > then > error_exit "main directory cannot contain spaces nor colons" > v9, here I come :) Paolo
Patchew URL: https://patchew.org/QEMU/20200821102204.337859-1-berrange@redhat.com/ Hi, This series failed the docker-quick@centos7 build test. Please find the testing commands and their output below. If you have Docker installed, you can probably reproduce it locally. === TEST SCRIPT BEGIN === #!/bin/bash make docker-image-centos7 V=1 NETWORK=1 time make docker-test-quick@centos7 SHOW_ENV=1 J=14 NETWORK=1 === TEST SCRIPT END === TEST check-unit: tests/test-char Unexpected error in object_property_try_add() at /tmp/qemu-test/src/qom/object.c:1181: attempt to add duplicate property 'serial-id' to object (type 'container') ERROR test-char - too few tests run (expected 38, got 9) make: *** [check-unit] Error 1 make: *** Waiting for unfinished jobs.... TEST iotest-qcow2: 027 TEST iotest-qcow2: 029 --- raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=9bcd91ff8fee4764939c67af5206b0ca', '-u', '1003', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew2/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-lrsroaza/src/docker-src.2020-08-21-06.49.36.22905:/var/tmp/qemu:z,ro', 'qemu/centos7', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2. filter=--filter=label=com.qemu.instance.uuid=9bcd91ff8fee4764939c67af5206b0ca make[1]: *** [docker-run] Error 1 make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-lrsroaza/src' make: *** [docker-run-test-quick@centos7] Error 2 real 15m36.664s user 0m8.548s The full log is available at http://patchew.org/logs/20200821102204.337859-1-berrange@redhat.com/testing.docker-quick@centos7/?type=message. --- Email generated automatically by Patchew [https://patchew.org/]. Please send your feedback to patchew-devel@redhat.com
diff --git a/.gitignore b/.gitignore index 92311284ef..4ccb9ed975 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/GNUmakefile +/build/ /.doctrees /config-devices.* /config-all-devices.* diff --git a/configure b/configure index cc5f58f31a..4e5fe33211 100755 --- a/configure +++ b/configure @@ -11,6 +11,55 @@ unset CLICOLOR_FORCE GREP_OPTIONS # Don't allow CCACHE, if present, to use cached results of compile tests! export CCACHE_RECACHE=yes +# make source path absolute +source_path=$(cd "$(dirname -- "$0")"; pwd) + +if test "$PWD" = "$source_path" +then + echo "Using './build' as the directory for build output" + + MARKER=build/auto-created-by-configure + + if test -e build + then + if test -f $MARKER + then + rm -rf build + else + echo "ERROR: ./build dir already exists and was not previously created by configure" + exit 1 + fi + fi + + mkdir build + touch $MARKER + + cat > GNUmakefile <<'EOF' +# This file is auto-generated by configure to support in-source tree +# 'make' command invocation + +ifeq ($(MAKECMDGOALS),) +recurse: all +endif + +.NOTPARALLEL: % +%: force + @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' + @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) + @if test "$(MAKECMDGOALS)" = "distclean" && \ + test -e build/auto-created-by-configure ; \ + then \ + rm -rf build GNUmakefile ; \ + fi +force: ; +.PHONY: force +GNUmakefile: ; + +EOF + cd build + exec $source_path/configure "$@" +fi + # Temporary directory used for files created while # configure runs. Since it is in the build directory # we can safely blow away any previous version of it @@ -297,9 +346,6 @@ ld_has() { $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 } -# make source path absolute -source_path=$(cd "$(dirname -- "$0")"; pwd) - if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; then error_exit "main directory cannot contain spaces nor colons"