diff --git a/bootstrap-vitasdk.sh b/bootstrap-vitasdk.sh index 5f5a059..4b93d94 100755 --- a/bootstrap-vitasdk.sh +++ b/bootstrap-vitasdk.sh @@ -7,11 +7,6 @@ INSTALLDIR="${VITASDK:-/usr/local/vitasdk}" . $DIR/include/install-vitasdk.sh -if [ -d "$INSTALLDIR" ]; then - echo "$INSTALLDIR already exists. Remove it first (e.g. 'sudo rm -rf $INSTALLDIR' or 'rm -rf $INSTALLDIR') and then restart this script" - exit 1 -fi - echo "==> Installing vitasdk to $INSTALLDIR" install_vitasdk $INSTALLDIR diff --git a/include/install-vitasdk.sh b/include/install-vitasdk.sh index 6713099..7b41043 100755 --- a/include/install-vitasdk.sh +++ b/include/install-vitasdk.sh @@ -1,7 +1,34 @@ #!/bin/sh get_download_link () { - curl "https://api.github.com/repos/vitasdk/autobuilds/releases" | grep "master" | grep "browser_download_url" | grep $1 | head -n 1 | cut -d '"' -f 4 + curl -sL "https://api.github.com/repos/vitasdk/autobuilds/releases" | grep "master" | grep "browser_download_url" | grep $1 | head -n 1 | cut -d '"' -f 4 +} + +need_root_perm () { + curr=$1 + while true; do + if [ -d "$curr" ]; then + DIR_INFO=($(stat -Lc "%a %U %G" $curr)) + PERM="0${DIR_INFO[0]}" + OWNER=${DIR_INFO[1]} + GROUP=${DIR_INFO[2]} + if [[ $(($PERM & 0200)) != 0 && $USER == $OWNER ]]; then + return + elif [ $(($PERM & 0002)) != 0 ]; then + return + elif [[ $(($PERM & 0020)) != 0 ]]; then + groups=($(groups $USER)) + for grp in "${groups[@]}"; do + if [[ $GROUP == $grp ]]; then + return + fi + done + fi + echo 1 + return + fi + curr=$(dirname $curr) + done } install_vitasdk () { @@ -9,8 +36,11 @@ install_vitasdk () { case "$(uname -s)" in Darwin*) + if [ -d "$INSTALLDIR" ]; then + rm -rf $INSTALLDIR + fi mkdir -p $INSTALLDIR - wget -O "vitasdk-nightly.tar.bz2" "$(get_download_link osx)" + curl -o "vitasdk-nightly.tar.bz2" -L "$(get_download_link osx)" tar xf "vitasdk-nightly.tar.bz2" -C $INSTALLDIR --strip-components=1 rm -f "vitasdk-nightly.tar.bz2" ;; @@ -19,19 +49,30 @@ install_vitasdk () { if [ -n "${TRAVIS}" ]; then sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 patch fi - if [ ! -d "$INSTALLDIR" ]; then - sudo mkdir -p $INSTALLDIR - sudo chown $USER:$(id -gn $USER) $INSTALLDIR + SUDO= + if [ ! -z "$(need_root_perm $INSTALLDIR)" ]; then + SUDO=sudo + fi + if [ -d "$INSTALLDIR" ]; then + $SUDO rm -rf $INSTALLDIR + if [ ! -z "$(need_root_perm $INSTALLDIR)" ]; then + SUDO=sudo + fi fi - wget -O "vitasdk-nightly.tar.bz2" "$(get_download_link linux)" + $SUDO mkdir -p $INSTALLDIR + $SUDO chown $USER:$(id -gn $USER) $INSTALLDIR + curl -o "vitasdk-nightly.tar.bz2" -L "$(get_download_link linux)" tar xf "vitasdk-nightly.tar.bz2" -C $INSTALLDIR --strip-components=1 rm -f "vitasdk-nightly.tar.bz2" ;; MSYS*|MINGW64*) UNIX=false + if [ -d "$INSTALLDIR" ]; then + rm -rf $INSTALLDIR + fi mkdir -p $INSTALLDIR - wget -O "vitasdk-nightly.tar.bz2" "$(get_download_link mingw32)" + curl -o "vitasdk-nightly.tar.bz2" -L "$(get_download_link mingw32)" tar xf "vitasdk-nightly.tar.bz2" -C $INSTALLDIR --strip-components=1 rm -f "vitasdk-nightly.tar.bz2" ;;