summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/install.sh28
-rwxr-xr-xtools/require_tool.sh161
-rw-r--r--tools/upgrade.sh20
3 files changed, 185 insertions, 24 deletions
diff --git a/tools/install.sh b/tools/install.sh
index 8ed1403af..aedb706da 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -1,36 +1,36 @@
if [ -d ~/.oh-my-zsh ]
then
- echo "You already have Oh My Zsh installed. You'll need to remove ~/.oh-my-zsh if you want to install"
+ echo "\033[0;33mYou already have Oh My Zsh installed.\033[0m You'll need to remove ~/.oh-my-zsh if you want to install"
exit
fi
-echo "Cloning Oh My Zsh..."
+echo "\033[0;34mCloning Oh My Zsh...\033[0m"
/usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
-echo "Looking for an existing zsh config..."
+echo "\033[0;34mLooking for an existing zsh config...\033[0m"
if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]
then
- echo "Found ~/.zshrc. Backing up to ~/.zshrc.pre-oh-my-zsh";
+ echo "\033[0;33mFound ~/.zshrc.\033[0m \033[0;32]Backing up to ~/.zshrc.pre-oh-my-zsh\033[0m";
cp ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
rm ~/.zshrc;
fi
-echo "Using the Oh My Zsh template file and adding it to ~/.zshrc"
+echo "\033[0;34mUsing the Oh My Zsh template file and adding it to ~/.zshrc\033[0m"
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
-echo "Copying your current PATH and adding it to the end of ~/.zshrc for you."
+echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m"
echo "export PATH=$PATH" >> ~/.zshrc
-echo "Time to change your default shell to zsh!"
+echo "\033[0;34mTime to change your default shell to zsh!\033[0m"
chsh -s `which zsh`
-echo ' __ __ '
-echo ' ____ / /_ ____ ___ __ __ ____ _____/ /_ '
-echo ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '
-echo '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '
-echo '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '
-echo ' /____/'
+echo "\033[0;32m"' __ __ '"\033[0m"
+echo "\033[0;32m"' ____ / /_ ____ ___ __ __ ____ _____/ /_ '"\033[0m"
+echo "\033[0;32m"' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '"\033[0m"
+echo "\033[0;32m"'/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '"\033[0m"
+echo "\033[0;32m"'\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '"\033[0m"
+echo "\033[0;32m"' /____/ '"\033[0m"
-echo "\n\n ....is now installed."
+echo "\n\n \033[0;32m....is now installed.\033[0m"
/usr/bin/env zsh
source ~/.zshrc
diff --git a/tools/require_tool.sh b/tools/require_tool.sh
new file mode 100755
index 000000000..1fa77f77a
--- /dev/null
+++ b/tools/require_tool.sh
@@ -0,0 +1,161 @@
+__require_tool_version_compare ()
+{
+ (
+ # Locally ignore failures, otherwise we'll exit whenever $1 and $2
+ # are not equal!
+ set +e
+
+awk_strverscmp='
+ # Use only awk features that work with 7th edition Unix awk (1978).
+ # My, what an old awk you have, Mr. Solaris!
+ END {
+ while (length(v1) || length(v2)) {
+ # Set d1 to be the next thing to compare from v1, and likewise for d2.
+ # Normally this is a single character, but if v1 and v2 contain digits,
+ # compare them as integers and fractions as strverscmp does.
+ if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
+ # Split v1 and v2 into their leading digit string components d1 and d2,
+ # and advance v1 and v2 past the leading digit strings.
+ for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
+ for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
+ d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
+ d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
+ if (d1 ~ /^0/) {
+ if (d2 ~ /^0/) {
+ # Compare two fractions.
+ while (d1 ~ /^0/ && d2 ~ /^0/) {
+ d1 = substr(d1, 2); len1--
+ d2 = substr(d2, 2); len2--
+ }
+ if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
+ # The two components differ in length, and the common prefix
+ # contains only leading zeros. Consider the longer to be less.
+ d1 = -len1
+ d2 = -len2
+ } else {
+ # Otherwise, compare as strings.
+ d1 = "x" d1
+ d2 = "x" d2
+ }
+ } else {
+ # A fraction is less than an integer.
+ exit 1
+ }
+ } else {
+ if (d2 ~ /^0/) {
+ # An integer is greater than a fraction.
+ exit 2
+ } else {
+ # Compare two integers.
+ d1 += 0
+ d2 += 0
+ }
+ }
+ } else {
+ # The normal case, without worrying about digits.
+ if (v1 == "") d1 = v1; else { d1 = substr(v1, 1, 1); v1 = substr(v1,2) }
+ if (v2 == "") d2 = v2; else { d2 = substr(v2, 1, 1); v2 = substr(v2,2) }
+ }
+ if (d1 < d2) exit 1
+ if (d1 > d2) exit 2
+ }
+ }
+'
+ awk "$awk_strverscmp" v1="$1" v2="$2" /dev/null
+ case $? in
+ 1) echo '<';;
+ 0) echo '=';;
+ 2) echo '>';;
+ esac
+ )
+}
+
+
+__require_tool_fatal ()
+{
+ echo $@ >/dev/stderr
+ return 1
+}
+
+# Usage: require_tool program version
+# Returns: 0 if $1 version if greater equals than $2, 1 otherwise.
+# In case of error, message is written on error output.
+#
+# Example: require_tool gcc 4.6
+# Use GCC environment variable if defined instead of lookup for the tool
+# in the environment.
+require_tool ()
+{
+ envvar_name=$(echo $1 | tr '[:lower:]' '[:upper:]')
+ tool=$(printenv $envvar_name || echo $1)
+ local version=$($tool --version 2>/dev/null| \
+ sed -n 's/.*[^0-9.]\([0-9]*\.[0-9.]*\).*/\1/p;q')
+ if test x"$version" = x ; then
+ echo "$tool is required" >/dev/stderr
+ return 1
+ fi
+ case $(__require_tool_version_compare "$2" "$version") in
+ '>')
+ echo "$1 $2 or better is required: this is $tool $version" >/dev/stderr
+ return 1
+ ;;
+ esac
+}
+
+usage() {
+ cat <<EOF
+NAME
+ require_tool.sh - Ensure version of a tool is greater than the one expected
+
+SYNOPSYS
+ require_tool.sh [ -h ]
+ [ --help ]
+ [ TOOL MIN_VERSION ]
+
+DESCRIPTION
+ TOOL is the name or path of the program to check. If the name is specified, its
+ path is deduced from PATH environment variable. If environment variable TOOL
+ (in upper-case characters) is defined, considers its value as path to the tool.
+
+ MIN_VERSION is a string representing the minimum required version.
+
+BEHAVIOR
+ * locate path to the program.
+ * execute $ TOOL_PATH --version
+ * extract version from standard output.
+ * compare this version to the expected one.
+
+OPTIONS
+ -h --help
+ Display this message and exit 0
+
+ERRORS
+ if program is not found or its version is prior to expected version,
+ a message is written to error output.
+
+EXIT VALUE
+ returns 0 if program version if greater equals than expected version,
+ returns 1 otherwise.
+
+EXAMPLE
+ $ require_tool.sh emacs 23
+ $ CC=g++ require_tool.sh cc 4.6
+ $ require_tool.sh zsh 4.5
+
+EOF
+}
+
+for arg in $@; do
+ case $arg in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ esac
+done
+if [ $# -gt 2 ] ; then
+ echo "ERROR: expecting 2 parameters. Please see option --help"
+ exit 1
+fi
+
+require_tool $@
diff --git a/tools/upgrade.sh b/tools/upgrade.sh
index 6bdd02e38..52a8cc4da 100644
--- a/tools/upgrade.sh
+++ b/tools/upgrade.sh
@@ -1,12 +1,12 @@
current_path=`pwd`
-echo "Upgrading Oh My Zsh"
+echo -e "\033[0;34mUpgrading Oh My Zsh\033[0m"
( cd $ZSH && git pull origin master )
-echo ' __ __ '
-echo ' ____ / /_ ____ ___ __ __ ____ _____/ /_ '
-echo ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '
-echo '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '
-echo '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '
-echo ' /____/'
-echo "Hooray! Oh My Zsh has been updated and/or is at the current version. \nAny new updates will be reflected when you start your next terminal session."
-echo "To keep up on the latest, be sure to follow Oh My Zsh on twitter: http://twitter.com/ohmyzsh"
-cd $current_path \ No newline at end of file
+echo -e "\033[0;32m"' __ __ '"\033[0m"
+echo -e "\033[0;32m"' ____ / /_ ____ ___ __ __ ____ _____/ /_ '"\033[0m"
+echo -e "\033[0;32m"' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '"\033[0m"
+echo -e "\033[0;32m"'/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '"\033[0m"
+echo -e "\033[0;32m"'\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '"\033[0m"
+echo -e "\033[0;32m"' /____/ '"\033[0m"
+echo -e "\033[0;34mHooray! Oh My Zsh has been updated and/or is at the current version.\033[0m"
+echo -e "\033[0;34mTo keep up on the latest, be sure to follow Oh My Zsh on twitter: \033[1mhttp://twitter.com/ohmyzsh\033[0m"
+cd "$current_path"