Historically we've allowed builds in the main src dir, but meson does
not support this. Explicitly force separate build dir in autotools to
align with meson. We must re-enable dependency tracking which the RPM
%configure macro turns off. Without this, the build dir doesn't get
the source directory tree mirrored.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
Notes:
New in v2.
Changes in v4:
- Fixed Travis rules and documentation
.travis.yml | 3 ++-
README-hacking | 11 ++++++++---
README.md | 11 +++++++----
bootstrap.conf | 6 ++++++
configure.ac | 6 ++++++
docs/compiling.html.in | 10 ++++++----
docs/windows.html.in | 3 ++-
libvirt.spec.in | 10 +++++++++-
8 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 478909d3bb..8b70c1c937 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -53,7 +53,8 @@ matrix:
script:
# We can't run 'distcheck' or 'syntax-check' because they
fail on
# macOS, but doing 'install' and 'dist' gives us some useful
coverage
- - ./autogen.sh --prefix=$(pwd)/install-root && make -j3 && make
-j3 install && make -j3 dist
+ - mkdir build && cd build
+ - ../autogen.sh --prefix=$(pwd)/install-root && make -j3 && make
-j3 install && make -j3 dist
git:
submodules: true
diff --git a/README-hacking b/README-hacking
index ec04271c6a..7da940eb13 100644
--- a/README-hacking
+++ b/README-hacking
@@ -11,7 +11,7 @@ We've opted to keep only the highest-level sources in the GIT
repository.
This eases our maintenance burden, (fewer merges etc.), but imposes more
requirements on anyone wishing to build from the just-checked-out sources.
Note the requirements to build the released archive are much less and
-are just the requirements of the standard ./configure && make procedure.
+are just the requirements of the standard configure && make procedure.
Specific development tools and versions will be checked for and listed by
the bootstrap script.
@@ -34,10 +34,14 @@ reduce download time and disk space requirements:
$ export GNULIB_SRCDIR=/path/to/gnulib
+We require to have the build directory different than the source directory:
+
+ $ mkdir build && cd build
+
The next step is to get all required pieces from gnulib,
-to run autoreconf, and to invoke ./configure:
+to run autoreconf, and to invoke ../autogen.sh:
- $ ./autogen.sh
+ $ ../autogen.sh
And there you are! Just
@@ -47,6 +51,7 @@ And there you are! Just
At this point, there should be no difference between your local copy,
and the GIT master copy:
+ $ cd ..
$ git diff
should output no difference.
diff --git a/README.md b/README.md
index 4d1e86259d..44b0dd87c5 100644
--- a/README.md
+++ b/README.md
@@ -38,11 +38,13 @@ Installation
------------
Libvirt uses the GNU Autotools build system, so in general can be built
-and installed with the usual commands. For example, to build in a manner
-that is suitable for installing as root, use:
+and installed with the usual commands, however, we mandate to have the
+build directory different than the source directory. For example, to build
+in a manner that is suitable for installing as root, use:
```
-$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+$ mkdir build && cd build
+$ ../configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ sudo make install
```
@@ -50,7 +52,8 @@ $ sudo make install
While to build & install as an unprivileged user
```
-$ ./configure --prefix=$HOME/usr
+$ mkdir build && cd build
+$ ../configure --prefix=$HOME/usr
$ make
$ make install
```
diff --git a/bootstrap.conf b/bootstrap.conf
index 0c7de2d2aa..4c784487e2 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -164,3 +164,9 @@ bootstrap_post_import_hook()
sed 's,\.\./\.\./\.\.,../..,g; s/^TESTS /GNULIB_TESTS /' $m > $m-t
mv -f $m-t $m
}
+
+bootstrap_epilogue()
+{
+ echo "$0: done. Now you can run 'mkdir build && cd build &&
../configure'."
+ exit 0
+}
diff --git a/configure.ac b/configure.ac
index 233fbeaaf3..32b246842e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,12 @@ dnl License along with this library. If not, see
dnl <
http://www.gnu.org/licenses/>.
AC_INIT([libvirt], [5.10.0], [libvir-list(a)redhat.com], [], [
https://libvirt.org])
+
+if test $srcdir = "."
+then
+ AC_MSG_ERROR([Build directory must be different from source directory])
+fi
+
AC_CONFIG_SRCDIR([src/libvirt.c])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
diff --git a/docs/compiling.html.in b/docs/compiling.html.in
index 8dcceb3eb9..5869ebb90f 100644
--- a/docs/compiling.html.in
+++ b/docs/compiling.html.in
@@ -9,13 +9,15 @@
<h2><a id="compiling">Compiling a release
tarball</a></h2>
<p>
- libvirt uses the standard configure/make/install steps:
+ libvirt uses the standard configure/make/install steps and mandates
+ that the build directory is different that the source directory:
</p>
<pre>
$ xz -c libvirt-x.x.x.tar.xz | tar xvf -
$ cd libvirt-x.x.x
-$ ./configure</pre>
+$ mkdir build && cd build
+$ ../configure</pre>
<p>
The <i>configure</i> script can be given options to change its default
@@ -28,7 +30,7 @@ $ ./configure</pre>
</p>
<pre>
-$ ./configure <i>--help</i></pre>
+$ ../configure <i>--help</i></pre>
<p>
When you have determined which options you want to use (if any),
@@ -49,7 +51,7 @@ $ ./configure <i>--help</i></pre>
</p>
<pre>
-$ ./configure <i>[possible options]</i>
+$ ../configure <i>[possible options]</i>
$ make
$ <b>sudo</b> <i>make install</i></pre>
diff --git a/docs/windows.html.in b/docs/windows.html.in
index 096d118bf7..a0ff525e1a 100644
--- a/docs/windows.html.in
+++ b/docs/windows.html.in
@@ -180,7 +180,8 @@
</p>
<pre>
-./configure \
+mkdir build && cd build
+../configure \
--without-sasl \
--without-polkit \
--without-python \
diff --git a/libvirt.spec.in b/libvirt.spec.in
index dcad08cb5f..723ced3535 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1163,7 +1163,13 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y'
%{_specdir}/%{name}.spec)
%endif
rm -f po/stamp-po
-%configure --with-runstatedir=%{_rundir} \
+
+%define _configure ../configure
+mkdir %{_vpath_builddir}
+cd %{_vpath_builddir}
+
+%configure --enable-dependency-tracking \
+ --with-runstatedir=%{_rundir} \
%{?arg_qemu} \
%{?arg_openvz} \
%{?arg_lxc} \
@@ -1232,6 +1238,7 @@ rm -fr %{buildroot}
export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
+cd %{_vpath_builddir}
%make_install %{?_smp_mflags} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
@@ -1313,6 +1320,7 @@ mv
$RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes.stp \
%endif
%check
+cd %{_vpath_builddir}
if ! make %{?_smp_mflags} check VIR_TEST_DEBUG=1
then
cat test-suite.log || true
--
2.23.0