|
|
@ -1,249 +0,0 @@ |
|
|
|
#!/usr/bin/env bash |
|
|
|
|
|
|
|
function help_msg { |
|
|
|
echo "./install.sh [OPTION..]" |
|
|
|
echo |
|
|
|
echo " -a, --auto Try to determine destdir, prefix (and zshshare if applicable)" |
|
|
|
echo " -g, --global Use default global settings (destdir=/; prefix=usr)" |
|
|
|
echo " -l, --local Use default local settings (destdir=~/.autojump)" |
|
|
|
echo |
|
|
|
echo " -d, --destdir PATH Set install destination to PATH" |
|
|
|
echo " -p, --prefix PATH Use PATH as prefix" |
|
|
|
echo " -Z, --zshshare PATH Use PATH as zsh share destination" |
|
|
|
echo |
|
|
|
echo " -f, --force Ignore Python version check" |
|
|
|
echo " -n, --dry_run Only show installation paths, don't install anything" |
|
|
|
echo |
|
|
|
echo "Will install autojump into:" |
|
|
|
echo |
|
|
|
echo ' Binaries: $destdir$prefix/bin' |
|
|
|
echo ' Documentation: $destdir$prefix/share/man/man1' |
|
|
|
echo ' Icon: $destdir$prefix/share/autojump' |
|
|
|
echo ' Shell scripts: $destdir/etc/profile.d' |
|
|
|
echo ' zsh functions: $destdir$zshsharedir' |
|
|
|
echo |
|
|
|
echo 'Unless specified, $zshshare will be :' |
|
|
|
echo ' - $destdir$prefix/functions for local installations' |
|
|
|
echo ' - $destdir$prefix/share/zsh/site-functions for all other installations' |
|
|
|
} |
|
|
|
|
|
|
|
dry_run= |
|
|
|
local= |
|
|
|
global= |
|
|
|
force= |
|
|
|
shell=`echo ${SHELL} | awk -F/ '{ print $NF }'` |
|
|
|
destdir= |
|
|
|
prefix="usr/local" |
|
|
|
zshsharedir= |
|
|
|
|
|
|
|
# If no arguments passed, default to --auto. |
|
|
|
if [[ ${#} == 0 ]]; then |
|
|
|
set -- "--auto" |
|
|
|
fi |
|
|
|
|
|
|
|
# Only dry-run should also default to --auto |
|
|
|
if [[ ${#} == 1 ]] && ([[ $1 = "-n" ]] || [[ $1 = "--dry-run" ]]); then |
|
|
|
set -- "-n" "--auto" |
|
|
|
fi |
|
|
|
|
|
|
|
# Command line parsing |
|
|
|
while true; do |
|
|
|
case "$1" in |
|
|
|
-a|--auto) |
|
|
|
if [[ ${UID} -eq 0 ]]; then |
|
|
|
set -- "--global" "${@:2}" |
|
|
|
else |
|
|
|
set -- "--local" "${@:2}" |
|
|
|
fi |
|
|
|
;; |
|
|
|
-d|--destdir) |
|
|
|
if [ $# -gt 1 ]; then |
|
|
|
destdir=$2; shift 2 |
|
|
|
else |
|
|
|
echo "--destdir or -d requires an argument" 1>&2 |
|
|
|
fi |
|
|
|
;; |
|
|
|
-f|--force) |
|
|
|
force=true |
|
|
|
shift |
|
|
|
if [[ ${#} == 0 ]]; then |
|
|
|
set -- "--auto" |
|
|
|
fi |
|
|
|
;; |
|
|
|
-g|--global) |
|
|
|
global=true |
|
|
|
destdir= |
|
|
|
prefix=usr |
|
|
|
shift |
|
|
|
;; |
|
|
|
-h|--help|-\?) |
|
|
|
help_msg; |
|
|
|
exit 0 |
|
|
|
;; |
|
|
|
-l|--local) |
|
|
|
local=true |
|
|
|
destdir=~/.autojump |
|
|
|
prefix= |
|
|
|
shift |
|
|
|
;; |
|
|
|
-n|--dry_run) |
|
|
|
dry_run=true |
|
|
|
shift |
|
|
|
;; |
|
|
|
-p|--prefix) |
|
|
|
if [ $# -gt 1 ]; then |
|
|
|
prefix=$2; shift 2 |
|
|
|
else |
|
|
|
echo "--prefix or -p requires an argument" 1>&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
;; |
|
|
|
-Z|--zshshare) |
|
|
|
if [ $# -gt 1 ]; then |
|
|
|
zshsharedir=$2; shift 2 |
|
|
|
else |
|
|
|
echo "--zshshare or -Z requires an argument" 1>&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
;; |
|
|
|
--) |
|
|
|
shift |
|
|
|
break |
|
|
|
;; |
|
|
|
-*) |
|
|
|
echo "invalid option: $1" 1>&2; |
|
|
|
help_msg; |
|
|
|
exit 1 |
|
|
|
;; |
|
|
|
*) |
|
|
|
break |
|
|
|
;; |
|
|
|
esac |
|
|
|
done |
|
|
|
|
|
|
|
# destdir must be a full path, and end with a slash |
|
|
|
if [[ -n ${destdir} ]]; then |
|
|
|
if [[ ${destdir:0:1} != "/" ]]; then |
|
|
|
echo "Error: destdir must be a full path" 1>&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
len=${#destdir} |
|
|
|
if [[ ${destdir:len - 1} != "/" ]]; then |
|
|
|
destdir="$destdir/" |
|
|
|
fi |
|
|
|
else |
|
|
|
destdir="/" |
|
|
|
fi |
|
|
|
|
|
|
|
# prefix should not start with, and end with, a slash |
|
|
|
if [[ -n ${prefix} ]]; then |
|
|
|
if [[ ${prefix:0:1} == "/" ]]; then |
|
|
|
prefix=${prefix:1} |
|
|
|
fi |
|
|
|
len=${#prefix} |
|
|
|
if [[ ${prefix:len - 1} != "/" ]]; then |
|
|
|
prefix="$prefix/" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
# check shell support |
|
|
|
if [[ ${shell} != "bash" ]] && [[ ${shell} != "zsh" ]] \ |
|
|
|
&& [[ ${shell} != "fish" ]]; then |
|
|
|
echo "Unsupported shell (${shell}). Only Bash and Zsh shells are supported." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
# zsh functions |
|
|
|
if [[ $shell == "zsh" ]]; then |
|
|
|
if [[ -z $zshsharedir ]]; then |
|
|
|
# if not set, use a default |
|
|
|
if [[ $local ]]; then |
|
|
|
zshsharedir="${prefix}functions" |
|
|
|
else |
|
|
|
zshsharedir="${prefix}share/zsh/site-functions" |
|
|
|
fi |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
# check Python version |
|
|
|
if [ ! ${force} ]; then |
|
|
|
python_version=`python -c 'import sys; print(sys.version_info[:])'` |
|
|
|
|
|
|
|
if [[ ${python_version:1:1} -eq 2 && ${python_version:4:1} -lt 6 ]]; then |
|
|
|
echo |
|
|
|
echo "Incompatible Python version, please upgrade to v2.6+." |
|
|
|
if [[ ${python_version:4:1} -ge 4 ]]; then |
|
|
|
echo |
|
|
|
echo "Alternatively, you can download v12 that supports Python v2.4+ from:" |
|
|
|
echo |
|
|
|
echo -e "\thttps://github.com/joelthelion/autojump/downloads" |
|
|
|
echo |
|
|
|
fi |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
echo |
|
|
|
echo "Installating autojump..." |
|
|
|
echo |
|
|
|
echo "Destination: $destdir" |
|
|
|
if [[ -n $prefix ]]; then |
|
|
|
echo "Prefix: /$prefix" |
|
|
|
fi |
|
|
|
echo |
|
|
|
echo "Binary: ${destdir}${prefix}bin/" |
|
|
|
echo "Documentation: ${destdir}${prefix}share/man/man1/" |
|
|
|
echo "Icon: ${destdir}${prefix}share/autojump/" |
|
|
|
echo "Shell scripts: ${destdir}etc/profile.d/" |
|
|
|
if [[ -z $shell ]] || [[ $shell == "zsh" ]]; then |
|
|
|
echo "zsh functions: ${destdir}${zshsharedir}" |
|
|
|
fi |
|
|
|
echo |
|
|
|
|
|
|
|
if [[ $dry_run ]]; then |
|
|
|
echo "--dry_run (-n) used, stopping" |
|
|
|
exit |
|
|
|
fi |
|
|
|
|
|
|
|
# INSTALL AUTOJUMP |
|
|
|
mkdir -p ${destdir}${prefix}share/autojump/ || exit 1 |
|
|
|
mkdir -p ${destdir}${prefix}bin/ || exit 1 |
|
|
|
mkdir -p ${destdir}${prefix}share/man/man1/ || exit 1 |
|
|
|
cp -v ./bin/icon.png ${destdir}${prefix}share/autojump/ || exit 1 |
|
|
|
cp -v ./bin/autojump ${destdir}${prefix}bin/ || exit 1 |
|
|
|
cp -v ./bin/data.py ${destdir}${prefix}bin/ || exit 1 |
|
|
|
cp -v ./bin/utils.py ${destdir}${prefix}bin/ || exit 1 |
|
|
|
cp -v ./docs/autojump.1 ${destdir}${prefix}share/man/man1/ || exit 1 |
|
|
|
mkdir -p ${destdir}etc/profile.d/ || exit 1 |
|
|
|
cp -v ./bin/autojump.sh ${destdir}etc/profile.d/ || exit 1 |
|
|
|
cp -v ./bin/autojump.bash ${destdir}etc/profile.d/ || exit 1 |
|
|
|
cp -v ./bin/autojump.zsh ${destdir}etc/profile.d/ || exit 1 |
|
|
|
cp -v ./bin/autojump.fish ${destdir}etc/profile.d/ || exit 1 |
|
|
|
mkdir -p ${destdir}${zshsharedir} || exit 1 |
|
|
|
# TODO: remove unused _j function (2013.02.01_1348, ting) |
|
|
|
install -v -m 0755 ./bin/_j ${destdir}${zshsharedir} || exit 1 |
|
|
|
|
|
|
|
# MODIFY AUTOJUMP.SH FOR CUSTOM INSTALLS |
|
|
|
if [[ -z ${local} ]] && [[ -z ${global} ]]; then |
|
|
|
sed -i "s:#custom#\t::g" ${destdir}etc/profile.d/autojump.sh |
|
|
|
sed -i "s:destdir_install\t:${destdir}etc/profile.d:g" ${destdir}etc/profile.d/autojump.sh |
|
|
|
fi |
|
|
|
|
|
|
|
# DISPLAY ADD MESSAGE |
|
|
|
rc_file="~/.${shell}rc" |
|
|
|
if [[ `uname` == "Darwin" ]] && [[ ${shell} == "bash" ]]; then |
|
|
|
rc_file="~/.bash_profile" |
|
|
|
fi |
|
|
|
|
|
|
|
aj_shell_file="${destdir}etc/profile.d/autojump.${shell}" |
|
|
|
if [[ ${local} ]]; then |
|
|
|
aj_shell_file="~/.autojump/etc/profile.d/autojump.${shell}" |
|
|
|
fi |
|
|
|
|
|
|
|
echo |
|
|
|
echo "Please add the line to ${rc_file} :" |
|
|
|
echo |
|
|
|
echo -e "[[ -s ${aj_shell_file} ]] && . ${aj_shell_file}" |
|
|
|
echo |
|
|
|
echo "You need to run 'source ${rc_file}' before you can start using autojump. To remove autojump, run './uninstall.sh'" |
|
|
|
echo |