From e8a05d4c9a03d28e6a962b37c967f31ee93a7183 Mon Sep 17 00:00:00 2001
From: Mohammad Akhlaghi <mohammad@akhlaghi.org>
Date: Mon, 16 Sep 2019 14:46:46 +0100
Subject: Configure script won't allow build directory to be under source

Users that are not familiar with the file structure of the project may
specify the current directory (to-level source directory) as their
build-directory. This will cause a crash right after answering the
questions, where `rm' will complain about `tex/build' not being deleted
because it exists as a directory.

To avoid such confusing situtations, the configure script now checks if the
build directory is actually a sub-directory of the source. If it is, it
will complain with a short message and abort. Also, a `CAUTION' statment
has been put in the initial description, right ontop of the question.

This bug was reported Carlos Allende Prieto and David Valls-Gabaud.
---
 reproduce/software/bash/configure.sh | 32 ++++++++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

(limited to 'reproduce/software')

diff --git a/reproduce/software/bash/configure.sh b/reproduce/software/bash/configure.sh
index 14268d9..5c46496 100755
--- a/reproduce/software/bash/configure.sh
+++ b/reproduce/software/bash/configure.sh
@@ -230,8 +230,14 @@ during this configuration. It can help encourage you to set the actual
 build directory in a very different address from this one (one that can be
 deleted and has large volume), while having easy access to it from here.
 
+--- CAUTION ---
+Do not choose any directory under the top source directory (this
+directory). The build directory cannot be a subdirectory of the source.
+---------------
+
 EOF
     bdir=
+    currentdir=$(pwd)
     junkname=pure-junk-974adfkj38
     while [ x$bdir == x ]
     do
@@ -243,18 +249,36 @@ EOF
         # If it exists, see if we can write in it. If not, try making it.
         if [ -d $build_dir ]; then
             if mkdir $build_dir/$junkname 2> /dev/null; then
+                instring="the already existing"
                 bdir=$(absolute_dir $build_dir)
-                echo " -- Build directory: '$bdir'"
                 rm -rf $build_dir/$junkname
             else
-                echo " -- Can't write in '$build_dir'"
+                echo " -- Can't write in '$build_dir'"; echo
             fi
         else
             if mkdir $build_dir 2> /dev/null; then
+                instring="the newly created"
                 bdir=$(absolute_dir $build_dir)
-                echo " -- Build directory set to (the newly created): '$bdir'"
             else
-                echo " -- Can't create '$build_dir'"
+                echo " -- Can't create '$build_dir'"; echo
+            fi
+        fi
+
+        # Make sure the given directory is not a subdirectory of the
+        # source directory.
+        if ! [ x"$bdir" = x ]; then
+            if [[ $bdir == $currentdir* ]]; then
+
+                # If it was newly created, it will be empty, so delete it.
+                if ! [ "$(ls -A $bdir)" ]; then rm --dir $bdir; fi
+
+                # Inform the user that this is not acceptable and reset `bdir'.
+                bdir=
+                echo " -- The build-directory cannot be under the source-directory."
+                echo "    Please specify another build-directory that is outside of the source."
+                echo ""
+            else
+                echo " -- Build directory set to ($instring): '$bdir'"
             fi
         fi
 
-- 
cgit v1.2.1