Commit a4556a73 authored by Mislav Marohnić's avatar Mislav Marohnić
Browse files

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.
parent 29f1a191
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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.