mirror of
https://github.com/rbenv/ruby-build.git
synced 2025-09-10 11:11:12 +02:00
178 lines
3.1 KiB
Bash
Executable file
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"
|