rbenv-ruby-build/bin/ruby-build
2011-08-07 12:40:12 -05:00

178 lines
3.1 KiB
Bash
Executable file

#!/bin/bash
set -e
abs_dirname() {
local cwd="$(pwd)"
local path="$1"
while [ -n "$path" ]; do
cd "${path%/*}"
local name="${path##*/}"
path="$(readlink "$name" || true)"
done
pwd
cd "$cwd"
}
log() {
if [ -z "$VERBOSE" ]; then
cat >>"$LOG_PATH"
else
tee -a "$LOG_PATH"
fi
}
install_package() {
local cwd="$(pwd)"
local package_name="$1"
local package_url="$2"
shift 2
cd "$TEMP_PATH"
download_package "$package_name" "$package_url"
extract_package "$package_name"
cd "$package_name"
build_package "$package_name" $*
after_install_package "$package_name"
cd "$cwd"
echo "Installed ${package_name} to ${PREFIX_PATH}" >&2
}
download_package() {
local package_name="$1"
local package_url="$2"
echo "Downloading ${package_url}..." >&2
{ curl "$package_url" > "${package_name}.tar.gz"
} 2>&1 | log
}
extract_package() {
local package_name="$1"
{ tar xzvf "${package_name}.tar.gz"
} 2>&1 | log
}
build_package() {
local package_name="$1"
shift
if [ "$#" -eq 0 ]; then
local commands="standard"
else
local commands="$*"
fi
echo "Installing ${package_name}..." >&2
for command in $commands; do
"build_package_${command}"
done
}
build_package_standard() {
local package_name="$1"
{ ./configure --prefix="$PREFIX_PATH"
make -j 2
make install
} 2>&1 | log
}
build_package_ruby() {
local package_name="$1"
{ "$RUBY_BIN" setup.rb
} 2>&1 | log
}
build_package_rbx() {
local package_name="$1"
{ ./configure --prefix="$PREFIX_PATH"
rake install
} 2>&1 | log
}
build_package_copy() {
cp -R . "$PREFIX_PATH"
}
after_install_package() {
local stub=1
}
use_gcc42_on_lion() {
if [ "$(uname -s)" = "Darwin" ]; then
if [ "$(expr "$(sw_vers -productVersion | cut -f 2 -d .)" \>= 7)" = 0 ]; then
export CC=/usr/bin/gcc-4.2
fi
fi
}
usage() {
{ echo "usage: ruby-build [-v|--verbose] definition prefix"
echo " ruby-build --definitions"
} >&2
[ -z "$1" ] && exit 1
}
unset VERBOSE
RUBY_BUILD_ROOT="$(abs_dirname "$0")/.."
case "$1" in
"-h" | "--help" )
usage without_exiting
{ echo
echo "Options:"
echo
echo " -v/--verbose Verbose mode: print compilation status to stdout"
echo
} >&2
exit 0
;;
"-v" | "--verbose" )
VERBOSE=true
shift
;;
esac
DEFINITION_PATH="$1"
if [ -z "$DEFINITION_PATH" ]; then
usage
elif [ ! -e "$DEFINITION_PATH" ]; then
BUILTIN_DEFINITION_PATH="${RUBY_BUILD_ROOT}/share/ruby-build/${DEFINITION_PATH}"
if [ -e "$BUILTIN_DEFINITION_PATH" ]; then
DEFINITION_PATH="$BUILTIN_DEFINITION_PATH"
else
echo "ruby-build: definition not found: ${DEFINITION_PATH}" >&2
exit 1
fi
fi
PREFIX_PATH="$2"
if [ -z "$PREFIX_PATH" ]; then
usage
fi
SEED="$(date "+%Y%m%d%H%M%S").$$"
LOG_PATH="/tmp/ruby-build.${SEED}.log"
TEMP_PATH="/tmp/ruby-build.${SEED}"
RUBY_BIN="${PREFIX_PATH}/bin/ruby"
CWD="$(pwd)"
export LDFLAGS="-L'${PREFIX_PATH}/lib' ${LDFLAGS}"
export CPPFLAGS="-I'${PREFIX_PATH}/include' ${CPPFLAGS}"
unset RUBYOPT
unset RUBYLIB
mkdir -p "$TEMP_PATH"
source "$DEFINITION_PATH"
rm -fr "$TEMP_PATH"