Verify that TMPDIR can hold executables before installing

This detects when `/tmp` has been mounted with "noexec" mode and avoids
the cryptic error:

  ./configure: Permission denied

Hopefully the information provided will be enough for the user to know
that they have to change TMPDIR to another location.
This commit is contained in:
Mislav Marohnić 2014-09-08 10:43:57 -07:00
parent 29f1a19154
commit a4556a7346

View file

@ -1016,10 +1016,22 @@ else
TMP="${TMPDIR%/}"
fi
if [ ! -w "$TMP" ] || [ ! -x "$TMP" ]; then
# Check if TMPDIR is accessible and can hold executables.
tmp_executable="${TMP}/ruby-build-test.$$"
noexec=""
if mkdir -p "$TMP" && touch "$tmp_executable" 2>/dev/null; then
cat > "$tmp_executable" <<<"#!$BASH"
chmod +x "$tmp_executable"
else
echo "ruby-build: TMPDIR=$TMP is set to a non-accessible location" >&2
exit 1
fi
"$tmp_executable" 2>/dev/null || noexec=1
rm -f "$tmp_executable"
if [ -n "$noexec" ]; then
echo "ruby-build: TMPDIR=$TMP cannot hold executables (partition possibly mounted with \`noexec\`)" >&2
exit 1
fi
# Work around warnings building Ruby 2.0 on Clang 2.x:
# pass -Wno-error=shorten-64-to-32 if the compiler accepts it.