[PATCH util-modular 6/6] release.sh: run ./configure within the release.sh

Emil Velikov emil.l.velikov at gmail.com
Fri Nov 11 15:45:29 UTC 2016


From: Emil Velikov <emil.velikov at collabora.com>

At the moment one has to run autogen.sh/configure in their checkout
prior to using release.sh

We can "spare" that by folding it into the script. As a side effect this
gives us a number of nice benefits:
 - We can check/error out if build artefacts are present.
There's a noticeable number of projects which use srcdir _before_
builddir in their C*FLAGS.

 - Can catch local hacks and workarounds for "broken" configure scripts.
By definition one should be able to run the following without ever
having problems.
  $ ./autogen.sh --prefix=`pwd`/foo && make && make install

At the same time, there's a number of projects which would a) attempt to
install things outside of `pwd`/foo and/or b) otherwise require elevated
privileges during make install.

Some of those are 'managed' by using custom configure options and
feeding those to AM_DISTCHECK_CONFIGURE_FLAGS.

Let's avoid this by generating a unique build dir (./build.XXXXXXXXXX)
and doing the dist/build/check in there.

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
XXX:
 - For the future we might add support for custom build dirs (say
/ramdrive/foo) but for the moment keep things as-it.

 - Should we cleanup the tmp/build dir ourselves, how about the
autotool generated files ?

 - If people prefer we can guard this, or the original behaviour, behind
a --dist vs --distcheck like option.
---
 release.sh | 45 +++++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/release.sh b/release.sh
index 1b3703d..19e3ef9 100755
--- a/release.sh
+++ b/release.sh
@@ -345,31 +345,27 @@ process_module() {
 	return 1
     fi
 
+    if [ -e configure ]; then
+        echo "Error: the git repository contains configure"
+        echo "Did you forget to run git clean -fXd (and git clean -fxd) ?"
+        return 1
+    fi
 
-    # Change directory to be in the git build directory (could be out-of-source)
-    # More than one can be found when distcheck has run and failed
-    configNum=`find . -name config.status -type f | wc -l | sed 's:^ *::'`
+    # Create tmpdir for the build
+    build_dir=`mktemp -d -p . build.XXXXXXXXXX`
     if [ $? -ne 0 ]; then
-	echo "Error: failed to locate config.status."
-	echo "Has the module been configured?"
-	return 1
-    fi
-    if [ x"$configNum" = x0 ]; then
-	echo "Error: failed to locate config.status, has the module been configured?"
-	return 1
-    fi
-    if [ x"$configNum" != x1 ]; then
-	echo "Error: more than one config.status file was found,"
-	echo "       clean-up previously failed attempts at distcheck"
-	return 1
+        echo "Error: could not create a temporary directory for the build."
+        echo "Do you have coreutils' mktemp ?"
+        return 1
     fi
-    status_file=`find . -name config.status -type f`
+
+    echo "Info: generating configure."
+    autoreconf --force --install >/dev/null
     if [ $? -ne 0 ]; then
-	echo "Error: failed to locate config.status."
-	echo "Has the module been configured?"
-	return 1
+        echo "Error: failed generate configure."
+        return 1
     fi
-    build_dir=`dirname $status_file`
+
     cd $build_dir
     if [ $? -ne 0 ]; then
 	echo "Error: failed to cd to $MODULE_RPATH/$build_dir."
@@ -377,6 +373,15 @@ process_module() {
 	return 1
     fi
 
+    # Using ../ here feels a bit nasty, yet $top_src is an absolute path. Thus
+    # it will get propagated in the generated sources, which we do not want.
+    ../configure >/dev/null
+    if [ $? -ne 0 ]; then
+        echo "Error: failed to configure module."
+        cd $top_src
+        return 1
+    fi
+
     # Determine what is the current branch and the remote name
     current_branch=`git branch | $GREP "\*" | sed -e "s/\* //"`
     remote_name=`git config --get branch.$current_branch.remote`
-- 
2.10.2



More information about the xorg-devel mailing list