Commit e9129e5a authored by Sam Stephenson's avatar Sam Stephenson
Browse files

rbenv-install tries to install packages by default, then falls back to building

parent 972498d4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,4 +5,4 @@ X Better error messages
X Show 'Downloading' and 'Installing' messages a la ruby-build
* Rewrite RbConfig::CONFIG['CC'] on install
* Patch rbx since the rewriter doesn't work there
* rbenv-install should check for binary packages before building
X rbenv-install should check for binary packages before building
+65 −15
Original line number Diff line number Diff line
@@ -2,19 +2,26 @@
set -e
[ -n "$RBENV_DEBUG" ] && set -x

# Provide rbenv completions
if [ "$1" = "--complete" ]; then
  exec ruby-build --definitions
fi
resolve_link() {
  $(type -p greadlink readlink | head -1) $1
}

if [ -z "$RBENV_ROOT" ]; then
  RBENV_ROOT="${HOME}/.rbenv"
fi
abs_dirname() {
  local cwd="$(pwd)"
  local path="$1"

DEFINITION="$1"
case "$DEFINITION" in
"" | -* )
  { echo "usage: rbenv install VERSION"
  while [ -n "$path" ]; do
    cd "${path%/*}"
    local name="${path##*/}"
    path="$(resolve_link "$name" || true)"
  done

  pwd
  cd "$cwd"
}

usage() {
  { echo "usage: rbenv install [--force-build | --force-package] VERSION"
    echo "       rbenv install /path/to/definition"
    echo
    echo "Available versions:"
@@ -22,11 +29,54 @@ case "$DEFINITION" in
    echo
  } >&2
  exit 1
}

bin_dir="$(abs_dirname "$0")"
export PATH="${bin_dir}:$PATH"

# Provide rbenv completions
if [ "$1" = "--complete" ]; then
  exec ruby-build --definitions
fi

force_build=""
force_package=""
if [ "$1" = "--force-build" ]; then
  force_build=1
  shift
elif [ "$1" = "--force-package" ]; then
  force_package=1
  shift
fi

definition="$1"
case "$definition" in
"" | -* )
  usage
  ;;
esac

VERSION_NAME="${DEFINITION##*/}"
PREFIX="${RBENV_ROOT}/versions/${VERSION_NAME}"
if [ -z "$RBENV_ROOT" ]; then
  RBENV_ROOT="${HOME}/.rbenv"
fi

version_name="${definition##*/}"
prefix="${RBENV_ROOT}/versions/${version_name}"

package() {
  ruby-package install $* "$definition" "$prefix"
}

build() {
  ruby-build "$definition" "$prefix"
}

if [ -n "$force_build" ]; then
  build
elif [ -n "$force_package" ]; then
  package
else
  package --fail-silently || build
fi

ruby-build "$DEFINITION" "$PREFIX"
rbenv rehash
+1 −1
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ else
  package_filename="${TMPDIR}/${package_name}.$$"
  echo "Downloading $package_url..." >&2
  download "$package_url" "$package_filename" || {
    echo "error: couldn't fetch package \`$package' ($package_url)"
    echo "error: couldn't download package \`$package' ($package_url)"
    exit 1
  } >&2
fi