Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

executable file 180 lines (162 sloc) 4.763 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
#!/usr/bin/env bash

function add_msg {
    echo
echo "Please add the line to ~/.${2}rc :"
    echo

if [ "${1}" == "global" ]; then
        echo -e "\t[[ -s /etc/profile.d/autojump.${2} ]] && source /etc/profile.d/autojump.${2}"
    elif [ "${1}" == "local" ]; then
        echo -e "\t[[ -s ~/.autojump/etc/profile.d/autojump.${2} ]] && source ~/.autojump/etc/profile.d/autojump.${2}"
    fi

    echo
echo "You need to run 'source ~/.${2}rc' before you can start using autojump."
    echo
echo "To remove autojump, run './uninstall.sh'"
    echo
}

function help_msg {
    echo
echo "./install.sh [--global or --local] [--bash or --zsh] [--prefix /usr/] "
    echo
echo "If run without any arguments, the installer will:"
    echo
echo -e "\t- as root install globally into /usr/"
    echo -e "\t- as non-root install locally to ~/.autojump/"
    echo -e "\t- version will be based on \$SHELL environmental variable"
    echo
}

# Default install directory.
shell=`echo ${SHELL} | awk -F/ '{ print $NF }'`
force=
if [[ ${UID} -eq 0 ]]; then
    local=
    prefix=/usr
else
    local=true
prefix=~/.autojump
fi

# Command line parsing
while true; do
    case "$1" in
        -b|--bash)
            shell="bash"
            shift
            ;;
        -f|--force)
            force=true
shift
            ;;
        -g|--global)
            local=
            shift
            ;;
        -h|--help|-\?)
            help_msg;
            exit 0
            ;;
        -l|--local)
            local=true
prefix=~/.autojump
            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|--zsh)
            shell="zsh"
            shift
            ;;
        --)
            shift
break
            ;;
        -*)
            echo "invalid option: $1" 1>&2;
            help_msg;
            exit 1
            ;;
        *)
            break
            ;;
    esac
done

# check for valid local install options
if [[ ${UID} != 0 ]] && [ ! ${local} ]; then
    echo
echo "Please rerun as root or use the --local option."
    echo
exit 1
fi

# check shell if supported
if [[ ${shell} != "bash" ]] && [[ ${shell} != "zsh" ]]; then
    echo "Unsupported shell (${shell}). Use --bash or --zsh to explicitly define shell."
    exit 1
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 "Installing ${shell} version of autojump to ${prefix} ..."
echo

# add git revision to autojump
./tools/git-version.sh

# INSTALL AUTOJUMP
mkdir -p ${prefix}/share/autojump/
mkdir -p ${prefix}/bin/
mkdir -p ${prefix}/share/man/man1/
cp -v ./bin/icon.png ${prefix}/share/autojump/
cp -v ./bin/jumpapplet ${prefix}/bin/
cp -v ./bin/autojump ${prefix}/bin/
cp -v ./bin/autojump_argparse.py ${prefix}/bin/
cp -v ./docs/autojump.1 ${prefix}/share/man/man1/

# global installation
if [ ! ${local} ]; then
    # install _j to the first accessible directory
    if [ ${shell} == "zsh" ]; then
        success=
        fpath=`/usr/bin/env zsh -c 'echo $fpath'`
        for f in ${fpath}; do
            cp -v ./bin/_j ${f} && success=true && break
done

        if [ ! ${success} ]; then
            echo
echo "Couldn't find a place to put the autocompletion file, please copy _j into your \$fpath"
            echo "Installing the rest of autojump ..."
            echo
fi
    fi

    if [ -d "/etc/profile.d" ]; then
        cp -v ./bin/autojump.sh /etc/profile.d/
        cp -v ./bin/autojump.${shell} /etc/profile.d/
        add_msg "global" ${shell}
    else
        echo "Your distribution does not have a '/etc/profile.d/' directory, please create it manually or use the local install option."
    fi
else # local installation
    mkdir -p ${prefix}/etc/profile.d/
    cp -v ./bin/autojump.sh ${prefix}/etc/profile.d/
    cp -v ./bin/autojump.${shell} ${prefix}/etc/profile.d/

    if [ ${shell} == "zsh" ]; then
        mkdir -p ${prefix}/functions/
        cp ./bin/_j ${prefix}/functions/
    fi

    add_msg "local" ${shell}
fi
Something went wrong with that request. Please try again.