mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 13:07:02 +00:00
360 lines
13 KiB
Bash
360 lines
13 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
function prompt () {
|
|
if [ "$noprompt" ] && [ "$#" = "1" ]; then
|
|
if [ "$1" = "yes" ]; then
|
|
echo "DEFAULT: yes"
|
|
return 0
|
|
else
|
|
echo "DEFAULT: no"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
while true; do
|
|
echo "Enter \"yes\" or \"no\": "
|
|
read response
|
|
case $response
|
|
in
|
|
Y*) return 0 ;;
|
|
y*) return 0 ;;
|
|
N*) return 1 ;;
|
|
n*) return 1 ;;
|
|
*)
|
|
esac
|
|
done
|
|
}
|
|
|
|
function which () {
|
|
echo "$PATH" | tr ":" "\n" | while read line; do [ -x "$line/$1" ] && echo "$line/$1" && return 0; done
|
|
}
|
|
|
|
function ask_remove_dir () {
|
|
dir="$1"
|
|
if [ -d "$dir" ]; then
|
|
echo "================================================================================"
|
|
echo "Found an existing Narwhal/Cappuccino installation, $dir. Remove it automatically now?"
|
|
echo "WARNING: the ENTIRE directory, $dir, will be removed (i.e. 'rm -rf $dir')."
|
|
echo "Be sure this is correct. Custom modifications and installed packages WILL BE DELETED."
|
|
if prompt "no"; then
|
|
rm -rf "$dir"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function ask_append_shell_config () {
|
|
config_string="$1"
|
|
|
|
shell_config_file=""
|
|
# use order outlined by http://hayne.net/MacDev/Notes/unixFAQ.html#shellStartup
|
|
if [ -f "$HOME/.bash_profile" ]; then
|
|
shell_config_file="$HOME/.bash_profile"
|
|
elif [ -f "$HOME/.bash_login" ]; then
|
|
shell_config_file="$HOME/.bash_login"
|
|
elif [ -f "$HOME/.profile" ]; then
|
|
shell_config_file="$HOME/.profile"
|
|
elif [ -f "$HOME/.bashrc" ]; then
|
|
shell_config_file="$HOME/.bashrc"
|
|
elif [ -f "$HOME/.zshrc" ]; then
|
|
shell_config_file="$HOME/.zshrc"
|
|
fi
|
|
|
|
|
|
echo " \"$config_string\" will be appended to \"$shell_config_file\"."
|
|
if prompt "no"; then
|
|
if [ "$shell_config_file" ]; then
|
|
echo >> "$shell_config_file"
|
|
echo "$config_string" >> "$shell_config_file"
|
|
echo "Added to \"$shell_config_file\". Restart your shell or run \"source $shell_config_file\"."
|
|
return 0
|
|
else
|
|
echo "Couldn't find a shell configuration file."
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function check_and_exit () {
|
|
if [ ! "$?" = "0" ]; then
|
|
echo "Error: problem running boostrap.sh. Exiting."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_build_environment () {
|
|
# make sure dependencies are installed and on the $PATH
|
|
CAPP_BUILD_DEPS=(java gcc unzip)
|
|
|
|
for dep in ${CAPP_BUILD_DEPS[@]}; do
|
|
which "$dep" &> /dev/null
|
|
if [ ! "$?" = "0" ]; then
|
|
echo "Error: $dep is required to bootstrap Cappuccino. Please install $dep and re-run bootstrap.sh."
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# special case: check for curl or wget
|
|
which curl &> /dev/null || which wget &> /dev/null
|
|
if [ ! "$?" = "0" ]; then
|
|
echo "Error: curl or wget are required to bootstrap Cappuccino. Please install one of them and re-run bootstrap.sh."
|
|
exit 1
|
|
fi
|
|
|
|
# make sure user is running the Sun JVM or OpenJDK >= 6b18
|
|
java_version=$(java -version 2>&1)
|
|
echo $java_version | grep OpenJDK > /dev/null
|
|
if [ "$?" = "0" ]; then # OpenJDK: make sure >= 6b18
|
|
openjdk_version=$(echo $java_version | egrep -o '[0-9]b[0-9]+')
|
|
if [ $(echo $openjdk_version | tr -d 'b') -lt 618 ]; then
|
|
echo "Error: Narwhal is not compatible with your version of OpenJDK: $openjdk_version."
|
|
echo "Please upgrade to OpenJDK >= 6b18 or switch to the Sun JVM. Then re-run bootstrap.sh."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
check_build_environment
|
|
|
|
if [ -w "/usr/local" ]; then
|
|
default_directory="/usr/local/narwhal"
|
|
else
|
|
default_directory="$HOME/narwhal"
|
|
fi
|
|
|
|
install_directory=""
|
|
tmp_zip="/tmp/narwhal.zip"
|
|
|
|
github_user="280north"
|
|
github_ref="master"
|
|
tusk_install_command="install"
|
|
|
|
noprompt=""
|
|
install_capp=""
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--noprompt) noprompt="yes";;
|
|
--directory) install_directory="$2"; shift;;
|
|
--clone) tusk_install_command="clone";;
|
|
--clone-http) tusk_install_command="clone --http";;
|
|
--github-user) github_user="$2"; shift;;
|
|
--github-ref) github_ref="$2"; shift;;
|
|
--install-capp) install_capp="yes";;
|
|
*) cat >&2 <<-EOT
|
|
usage: ./bootstrap.sh [OPTIONS]
|
|
|
|
--noprompt: Don't prompt, use relatively safe defaults.
|
|
--directory [DIR]: Use a directory other than /usr/local/narwhal.
|
|
--clone: Do "git clone git://" instead of downloading zips.
|
|
--clone-http: Do "git clone http://" instead of downloading zips.
|
|
--github-user [USER]: Use another github user (default: 280north).
|
|
--github-ref [REF]: Use another git ref (default: master).
|
|
--install-capp: Install "objective-j" and "cappuccino" packages.
|
|
EOT
|
|
exit 1;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
github_project="$github_user-narwhal"
|
|
github_path=$(echo "$github_project" | tr '-' '/')
|
|
|
|
unset NARWHAL_ENGINE
|
|
unset SEA
|
|
unset SEALVL
|
|
|
|
PATH_SAVED="$PATH"
|
|
|
|
if which "narwhal" > /dev/null; then
|
|
narwhal_path="$(which narwhal)"
|
|
# resolve symlinks
|
|
while [ -h "$narwhal_path" ]; do
|
|
dir=$(dirname -- "$narwhal_path")
|
|
sym=$(readlink -- "$narwhal_path")
|
|
narwhal_path="$(cd -- "$dir" && cd -- $(dirname -- "$sym") && pwd)/$(basename -- "$sym")"
|
|
done
|
|
|
|
# NARWHAL_HOME is the 2nd ancestor directory of this shell script
|
|
dir="$(dirname -- "$(dirname -- "$narwhal_path")")"
|
|
|
|
ask_remove_dir "$dir"
|
|
else
|
|
ask_remove_dir "/usr/local/share/objj"
|
|
ask_remove_dir "/usr/local/share/narwhal"
|
|
ask_remove_dir "/usr/local/narwhal"
|
|
fi
|
|
|
|
install_narwhal=""
|
|
if ! which "narwhal" > /dev/null; then
|
|
echo "================================================================================"
|
|
echo "Narwhal JavaScript platform is required. Install it automatically now?"
|
|
if prompt "yes"; then
|
|
install_narwhal="yes"
|
|
fi
|
|
fi
|
|
|
|
if [ "$install_narwhal" ]; then
|
|
if [ ! "$install_directory" ]; then
|
|
echo "================================================================================"
|
|
echo "To use the default location, \"$default_directory\", just hit enter/return, or enter another path:"
|
|
if [ "$noprompt" ]; then
|
|
input=""
|
|
else
|
|
read input
|
|
fi
|
|
if [ "$input" ] && [ ! "$input" = "yes" ]; then
|
|
install_directory="`cd \`dirname "$input"\`; pwd`/`basename "$input"`"
|
|
else
|
|
install_directory="$default_directory"
|
|
fi
|
|
fi
|
|
|
|
# absolutify
|
|
install_directory="$(cd "$(dirname "$install_directory")" && echo "$(pwd)/$(basename "$install_directory")")"
|
|
|
|
if [ ! -d "$(dirname "$install_directory")" ]; then
|
|
echo "Error: parent directory of $install_directory does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -d "$install_directory" ]; then
|
|
echo "================================================================================"
|
|
echo "Directory exists at $install_directory. Delete it?"
|
|
if prompt "no"; then
|
|
rm -rf "$install_directory"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "$(echo $tusk_install_command | cut -c-5)" = "clone" ]; then
|
|
if [ "$(echo $tusk_install_command | cut -c7-)" = "--http" ]; then
|
|
git_protocol="http"
|
|
else
|
|
git_protocol="git"
|
|
fi
|
|
git_repo="$git_protocol://github.com/$github_path.git"
|
|
echo "Cloning Narwhal from \"$git_repo\"..."
|
|
git clone "$git_repo" "$install_directory"
|
|
(cd "$install_directory" && git checkout "origin/$github_ref")
|
|
else
|
|
zip_ball="http://github.com/$github_path/zipball/$github_ref"
|
|
|
|
echo "Downloading Narwhal from \"$zip_ball\"..."
|
|
$(which curl &> /dev/null && echo curl -L -o || echo wget --no-check-certificate -O) "$tmp_zip" "$zip_ball"
|
|
check_and_exit
|
|
|
|
echo "Installing Narwhal..."
|
|
unzip "$tmp_zip" -d "$install_directory"
|
|
check_and_exit
|
|
rm "$tmp_zip"
|
|
check_and_exit
|
|
|
|
mv "$install_directory/$github_project-"*/* "$install_directory/."
|
|
check_and_exit
|
|
rm -rf "$install_directory/$github_project-"*
|
|
check_and_exit
|
|
fi
|
|
|
|
export PATH="$install_directory/bin:$PATH"
|
|
fi
|
|
|
|
if ! which "narwhal" > /dev/null; then
|
|
echo "Problem installing Narwhal. To install Narwhal manually follow the instructions at http://narwhaljs.org/"
|
|
exit 1
|
|
fi
|
|
|
|
install_directory="$(dirname -- "$(dirname -- "$(which narwhal)")")"
|
|
|
|
echo "================================================================================"
|
|
echo "Using Narwhal installation at \"$install_directory\". Is this correct?"
|
|
if ! prompt "yes"; then
|
|
exit 1
|
|
fi
|
|
|
|
# echo "================================================================================"
|
|
# echo "Would you like to install the pre-built Objective-J and Cappuccino packages?"
|
|
# echo "If you intend to build Cappuccino yourself this is not neccessary."
|
|
# if [ ! "$install_capp" ] && prompt; then
|
|
# install_capp="yes"
|
|
# fi
|
|
|
|
# Make sure tusk can access GitHub's HTTPS URLs.
|
|
NARWHAL_ENGINE=rhino js -e "javax.net.ssl.SSLContext.getDefault()" &> /dev/null
|
|
if [ ! "$?" = "0" ]; then
|
|
echo "Installing packages from GitHub requires SSL support in Java."
|
|
if [ "$(uname)" = "Linux" ]; then
|
|
echo "Try installing the libbcprov-java package, if it exists for your Linux distro."
|
|
fi
|
|
exit 1
|
|
fi
|
|
|
|
extra_packages=""
|
|
if [ "$install_capp" ]; then
|
|
extra_packages="objective-j cappuccino"
|
|
fi
|
|
|
|
echo "Installing necessary packages..."
|
|
|
|
if ! tusk update; then
|
|
echo "Error: unable to update tusk catalog. Check that you have sufficient permissions."
|
|
exit 1
|
|
fi
|
|
|
|
tusk $tusk_install_command browserjs jake shrinksafe $extra_packages
|
|
|
|
if [ `uname` = "Darwin" ]; then
|
|
echo "================================================================================"
|
|
echo "Would you like to install the JavaScriptCore engine for Narwhal?"
|
|
echo "This is optional but will make building and running Objective-J much faster."
|
|
if prompt "yes"; then
|
|
tusk $tusk_install_command narwhal-jsc
|
|
|
|
if ! (cd "$install_directory/packages/narwhal-jsc" && make webkit); then
|
|
rm -rf "$install_directory/packages/narwhal-jsc"
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo "WARNING: building narwhal-jsc failed. Hit enter to continue."
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
# read
|
|
elif ! [ "$NARWHAL_ENGINE" = "jsc" ]; then
|
|
echo "================================================================================"
|
|
echo "Rhino is the default Narwhal engine, should we change the default to JavaScriptCore for you?"
|
|
echo "This can by overridden by setting the NARWHAL_ENGINE environment variable to \"jsc\" or \"rhino\"."
|
|
ask_append_shell_config "export NARWHAL_ENGINE=jsc"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
export PATH="$PATH_SAVED"
|
|
if ! which "narwhal" > /dev/null; then
|
|
echo "================================================================================"
|
|
echo "You must add Narwhal's \"bin\" directory to your PATH environment variable. Do this automatically now?"
|
|
|
|
export_path_string="export PATH=\"$install_directory/bin:\$PATH\""
|
|
|
|
if ! ask_append_shell_config "$export_path_string"; then
|
|
echo "Add \"$install_directory/bin\" to your PATH environment variable in your shell configuration file (e.x. .profile, .bashrc, .bash_profile)."
|
|
echo "For example:"
|
|
echo " $export_path_string"
|
|
fi
|
|
fi
|
|
|
|
if [ "$CAPP_BUILD" ]; then
|
|
if [ -d "$CAPP_BUILD" ]; then
|
|
echo "================================================================================"
|
|
echo "An existing \$CAPP_BUILD directory at \"$CAPP_BUILD\" exists. The previous build may be incompatible. Remove it automatically now?"
|
|
if prompt "no"; then
|
|
rm -rf "$CAPP_BUILD"
|
|
fi
|
|
fi
|
|
else
|
|
echo "================================================================================"
|
|
echo "Before building Cappuccino we recommend you set the \$CAPP_BUILD environment variable to a path where you wish to build Cappuccino."
|
|
echo "This can be automatically set to the default value of \"$PWD/Build\", or you can set \$CAPP_BUILD yourself."
|
|
ask_append_shell_config "export CAPP_BUILD=\"$PWD/Build\""
|
|
fi
|
|
|
|
echo "================================================================================"
|
|
echo "Bootstrapping of Narwhal and other required tools is complete."
|
|
echo "NOTE: any changes made to the shell configuration files won't take place until you restart the shell."
|