diff options
author | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2020-06-15 01:42:10 +0100 |
---|---|---|
committer | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2020-06-15 01:42:10 +0100 |
commit | e763790464563755d176ba798d40cb7c74f0d094 (patch) | |
tree | a9c047962feacff70cd4f844fc74e3da9785bfdd /reproduce/software/shell/configure.sh | |
parent | f4a44b575d58fd6ddc5ed731ca3c8bd308dac6e9 (diff) |
Configure script now accounts for non-interactive shells
The project configuration requires a build-directory at configuration time,
two other directories can optionally be given to avoid downloading the
project's necessary data and software. It is possible to give these three
directories as command-line options, or by interactively giving them after
running the configure script.
Until now, when these directories weren't given as command-line options,
and the running shell was non-interactive, the configure script would crash
on the line trying to interactively read the user's given directories (the
'read' command).
With this commit, all the 'read' commands for these three directories are
now put within an 'if' statement. Therefore, when 'read' fails (the shell
is non-interactive), instead of a quiet crash, a descriptive message is
printed, telling the user that cause of the problem, and suggesting a fix.
This bug was found by Michael R. Crusoe.
Diffstat (limited to 'reproduce/software/shell/configure.sh')
-rwxr-xr-x | reproduce/software/shell/configure.sh | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index d9509ca..b71ea96 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -712,7 +712,14 @@ EOF do # Ask the user (if not already set on the command-line). if [ x"$build_dir" = x ]; then - read -p"Please enter the top build directory: " build_dir + if read -p"Please enter the top build directory: " build_dir; then + just_a_place_holder_to_avoid_not_equal_test=1; + else + echo "ERROR: shell is in non-interactive-mode and no build directory specified." + echo "The build directory (described above) is mandatory, configuration can't continue." + echo "Please use '--build-dir' to specify a build directory non-interactively." + exit 1 + fi fi # If it exists, see if we can write in it. If not, try making it. @@ -782,6 +789,7 @@ if [ x"$input_dir" = x ]; then else indir=$input_dir fi +noninteractive_sleep=2 if [ $rewritepconfig = yes ] && [ x"$input_dir" = x ]; then cat <<EOF @@ -809,7 +817,17 @@ don't want to make duplicates, you can create symbolic links to them and put those symbolic links in the given top-level directory. EOF - read -p"(OPTIONAL) Input datasets directory ($indir): " inindir + # Read the input directory if interactive mode is enabled. + if read -p"(OPTIONAL) Input datasets directory ($indir): " inindir; then + just_a_place_holder_to_avoid_not_equal_test=1; + else + echo "WARNING: interactive-mode seems to be disabled!" + echo "If you have a local copy of the inputs, use '--input-dir'." + echo "... project configuration will continue in $noninteractive_sleep sec ..." + sleep $noninteractive_sleep + fi + + # In case an input-directory is given, write it in 'indir'. if [ x$inindir != x ]; then indir=$inindir echo " -- Using '$indir'" @@ -836,15 +854,24 @@ if [ $rewritepconfig = yes ] && [ x"$software_dir" = x ]; then To ensure an identical build environment, the project will use its own build of the programs it needs. Therefore the tarball of the relevant -programs are necessary. If a tarball isn't present in the specified -directory, *IT WILL BE DOWNLOADED* automatically. +programs are necessary. If you don't specify any directory here, or it doesn't contain the tarball -of a dependency, it is necessary to have an internet connection. The +of a dependency, it is necessary to have an internet connection because the project will download the tarballs it needs automatically. EOF - read -p"(OPTIONAL) Directory of dependency tarballs ($ddir): " tmpddir + # Read the software directory if interactive mode is enabled. + if read -p"(OPTIONAL) Directory of dependency tarballs ($ddir): " tmpddir; then + just_a_place_holder_to_avoid_not_equal_test=1; + else + echo "WARNING: interactive-mode seems to be disabled!" + echo "If you have a local copy of the software source, use '--software-dir'." + echo "... project configuration will continue in $noninteractive_sleep sec ..." + sleep $noninteractive_sleep + fi + + # If given, write the software directory. if [ x"$tmpddir" != x ]; then ddir=$tmpddir echo " -- Using '$ddir'" |