#!/bin/bash -e # set -evx function usage() { cat </dev/null)TOOLS | $TOOL |$(tput sgr0 2>/dev/null) $@" } function detect_distribution() { if which pacman 2>&1 >/dev/null; then echo "archlinux" elif which apt-get 2>&1 >/dev/null; then echo "debian" else echo "" fi } function base_build_setup_ubuntu() { PACKAGE_REQS="build-essential libtool g++ gcc linuxtexinfo curl wget automake autoconf python-dev git subversion unzip" PACKAGE_COUNT=$(echo $PACKAGE_REQS | tr ' ' '\n' | wc -l) if [ $(dpkg -l $PACKAGE_REQS | grep "^ii" | wc -l) -ne $PACKAGE_COUNT ] then if [ "$ALLOW_SUDO" -eq 1 ] then sudo apt-get -y install $PACKAGE_REQS else TOOL=SETUP tool_log "Please install the following packages: $PACKAGE_REQS" fi fi if ! dpkg --print-foreign-architectures | grep -q i386 then if [ "$ALLOW_SUDO" -eq 1 ] then sudo dpkg --add-architecture i386 sudo apt-get update else TOOL=SETUP tool_log "Certain tools need i386 libraries (enable with 'dpkg --add-architecture i386; apt-get update')." fi fi } function base_build_setup_arch() { PACKAGE_REQS="curl wget python2 python3 git subversion unzip" if [ "$ALLOW_SUDO" -eq 1 ]; then sudo pacman -Syu --noconfirm $PACKAGE_REQS sudo pacman -Syu --noconfirm base-devel || true else TOOL=SETUP tool_log "Please install the following packages: $PACKAGE_REQS" fi if ! grep "^\[multilib\]$" /etc/pacman.conf >/dev/null; then if [ "$ALLOW_SUDO" -eq 1 ] then sudo sh -c 'cat >> /etc/pacman.conf' </dev/null \ && ! sudo pacman -Qk gcc-multilib >/dev/null then sudo pacman -Syy --noconfirm #sudo pacman -Syu --noconfirm multilib-devel # unfortunately we cannot do --noconfirm if we might choose to replace # a package such as gcc with gcc-multilib, therefore this workaround printf "\ny\ny\ny\n" | sudo pacman -Syu multilib-devel fi } function base_build_setup() { case "$1" in "ubuntu") base_build_setup_ubuntu ;; "archlinux") base_build_setup_arch ;; *) TOOL=SETUP tool_log "Cannot detect or unsupported distribution" esac } DISTRI=$(detect_distribution) while [[ $1 == -* ]] do case $1 in -s) export ALLOW_SUDO=1 ;; *) usage exit ;; esac shift done [ -z "$ALLOW_SUDO" ] && export ALLOW_SUDO=0 ACTION=$1 TOOL=$2 if [ "$TOOL" == "all" ] then for t in $($0 list) do $0 $ACTION $t done elif [ -z "$TOOL" -a "$ACTION" != "list" -a "$ACTION" != "setup" ] then usage exit fi cd $(dirname "${BASH_SOURCE[0]}")/.. case $ACTION in setup) base_build_setup "$DISTRI" <<<<<<< HEAD echo "PATH=\"$PWD/bin:\$PATH\"" >> ~/.bashrc if [ -e ~/.zshrc ] then ======= if [ -e ~/.zshrc ] then >>>>>>> 82571b6917b6dbb212e722d35c6f7d2d99b7e0cb echo "PATH=\"$PWD/bin:\$PATH\"" >> ~/.zshrc fi if [ -e ~/.config/fish/config.fish ]; then echo "set -x PATH $PATH $PWD/bin" >> ~/.config/fish/config.fish fi ;; list) for t in * do [ ! -e "$t/install" ] && continue echo $t done ;; bin) cd bin ln -sf ../$TOOL/bin/* . tool_log "bin symlinks updated" cd .. ;; install) cd $TOOL if git status --ignored . | egrep -q 'Untracked|Ignored' then tool_log "appears to already be installed. Uninstall first?" exit 0 fi tool_log "starting install, logging to $PWD/install.log" rm -f install.log if [ -x ./install-root -a "$ALLOW_SUDO" -eq 1 ]; then sudo env DISTRI=$DISTRI ./install-root >> install.log 2>&1 fi if env DISTRI=$DISTRI ./install >>install.log 2>&1 then tool_log "install finished" else tool_log "INSTALL FAILED" cat install.log >&2 exit 1 fi cd .. $0 bin $TOOL ;; uninstall) cd $TOOL [ -x ./uninstall ] && ./uninstall git clean -dffx . tool_log "uninstall finished" cd .. ;; upgrade) cd $TOOL if [ -x ./upgrade ] then ./upgrade tool_log "upgrade complete!" else tool_log "no upgrade script -- reinstalling" $0 uninstall $TOOL $0 install $TOOL fi ;; reinstall) $0 uninstall $TOOL $0 install $TOOL ;; search) cat README.md | grep "<\!--tool-->" | sed "s/<\!--[^-]*-->//g" | grep -i "$TOOL" ;; test) if ! cat README.md | grep "<\!--tool-->" | grep "| \[$TOOL\](" | grep -q -- "--test--" then tool_log "Tests not enabled." else $0 install $TOOL cd $TOOL if [ -f ./test ] then tool_log "Running test script." ./test tool_log "test script succeeded!" else tool_log "Install succeeded. No test script!" fi fi ;; *) echo "TOOLS | ERROR | unknown action $ACTION" ;; esac