papermario/install.sh
2021-03-27 23:24:50 +09:00

163 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
# Debian and derivatives (apt)
if cat /etc/os-release | grep -E 'ID=debian|ID_LIKE=debian' &> /dev/null; then
echo "Installing packages for Debian or derivative (apt)"
# Add i386 arch for wine32
sudo dpkg --add-architecture i386
sudo apt install -y git python3 python3-pip python3-setuptools build-essential binutils-mips-linux-gnu zlib1g-dev libyaml-dev ninja-build wine32 || exit 1
python3 -m pip install -U -r requirements.txt
if [[ $1 == "--extra" ]]; then
echo "Installing extra"
sudo apt install -y clang-tidy astyle doxygen || exit 1
python3 -m pip install -U -r requirements_extra.txt || exit 1
fi
echo "Done"
exit
fi
# Arch Linux and derivatives (pacman)
if cat /etc/os-release | grep -E 'ID=arch|ID_LIKE=arch' &> /dev/null; then
echo "Installing packages for Arch Linux or derivative (pacman)"
# Upgrade existing packages (note: no --noconfirm)
sudo pacman -Syu || exit 1
# Install dependencies (note: multilib must be enabled in /etc/pacman.conf)
sudo pacman -S --noconfirm --needed git python python-pip python-setuptools base-devel zlib libyaml ninja wine || exit 1
python3 -m pip install -U -r requirements.txt
# Install binutils if required
if ! command -v mips-linux-gnu-ar &> /dev/null; then
PKG="mips-linux-gnu-binutils"
if command -v aura &> /dev/null; then
sudo aura -A --noconfirm $PKG || exit 1
elif command -v yay &> /dev/null; then
yay -S --noconfirm $PKG || exit 1
elif command -v yaourt &> /dev/null; then
sudo yaourt -S --noconfirm $PKG || exit 1
else
echo "AUR manager not found, installing $PKG without one"
git clone "https://aur.archlinux.org/$PKG.git" || exit 1
cd $PKG
makepkg -si || exit 1
cd ..
rm -rf $PKG
fi
fi
if [[ $1 == "--extra" ]]; then
echo "Installing extra"
sudo pacman -S --noconfirm --needed clang astyle doxygen || exit 1
python3 -m pip install -U -r requirements_extra.txt || exit 1
fi
echo "Done"
exit
fi
# openSUSE (zypper)
if cat /etc/os-release | grep ID=opensuse &> /dev/null; then
echo "Installing packages for openSUSE (zypper)"
sudo zypper -n install git python3 python3-devel python3-pip python3-setuptools gcc gcc-c++ glibc-devel make cross-mips-binutils zlib-devel libyaml-devel ninja
# Link the openSUSE locations for binutils tools to their usual GNU locations
sudo ln -s /usr/bin/mips-suse-linux-addr2line /usr/bin/mips-linux-gnu-addr2line
sudo ln -s /usr/bin/mips-suse-linux-ar /usr/bin/mips-linux-gnu-ar
sudo ln -s /usr/bin/mips-suse-linux-as /usr/bin/mips-linux-gnu-as
sudo ln -s /usr/bin/mips-suse-linux-elfedit /usr/bin/mips-linux-gnu-elfedit
sudo ln -s /usr/bin/mips-suse-linux-gprof /usr/bin/mips-linux-gnu-gprof
sudo ln -s /usr/bin/mips-suse-linux-ld /usr/bin/mips-linux-gnu-ld
sudo ln -s /usr/bin/mips-suse-linux-ld.bfd /usr/bin/mips-linux-gnu-ld.bfd
sudo ln -s /usr/bin/mips-suse-linux-nm /usr/bin/mips-linux-gnu-nm
sudo ln -s /usr/bin/mips-suse-linux-objcopy /usr/bin/mips-linux-gnu-objcopy
sudo ln -s /usr/bin/mips-suse-linux-objdump /usr/bin/mips-linux-gnu-objdump
sudo ln -s /usr/bin/mips-suse-linux-ranlib /usr/bin/mips-linux-gnu-ranlib
sudo ln -s /usr/bin/mips-suse-linux-readelf /usr/bin/mips-linux-gnu-readelf
sudo ln -s /usr/bin/mips-suse-linux-size /usr/bin/mips-linux-gnu-size
sudo ln -s /usr/bin/mips-suse-linux-strings /usr/bin/mips-linux-gnu-strings
sudo ln -s /usr/bin/mips-suse-linux-strip /usr/bin/mips-linux-gnu-strip
python3 -m pip install -U -r requirements.txt
if [[ $1 == "--extra" ]]; then
echo "Installing extra"
sudo zypper -n install clang astyle doxygen || exit 1
python3 -m pip install -U -r requirements_extra.txt || exit 1
fi
echo "Done"
exit
fi
# Alpine Linux (apk)
if cat /etc/os-release | grep ID=alpine &> /dev/null; then
echo "Installing packages for Alpine Linux (apk)"
# If the edge/community repo isn't present, it needs to be for astyle
if ! grep -q "edge/community" /etc/apk/repositories; then
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
fi
# Install dependencies
sudo apk add --no-cache bash wget git python3 python3-dev py3-pip build-base zlib-dev yaml-dev ninja
python3 -m pip install -U -r requirements.txt
# Install binutils if required
if ! command -v mips-linux-gnu-ar &> /dev/null; then
PKG="mips-linux-gnu-binutils"
RETURNDIR="$(pwd)"
cd "$(mktemp -d)"
wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
tar -xf binutils-2.35.tar.bz2
cd binutils-2.35
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure
./configure --target=mips-linux-gnu \
--with-sysroot=/usr/mips-linux-gnu \
--prefix=/usr \
--disable-multilib \
--with-gnu-as \
--with-gnu-ld \
--disable-nls \
--enable-ld=default \
--enable-plugins \
--enable-deterministic-archives \
--disable-werror
sudo make
sudo make install
cd ..
# delete temp directory we made
rm -rf "$(pwd)"
# go back to old dir
cd "${RETURNDIR}"
fi
if [[ $1 == "--extra" ]]; then
echo "Installing extra"
sudo apk add --no-cache clang-extra-tools astyle doxygen || exit 1
python3 -m pip install -U -r requirements_extra.txt || exit 1
fi
echo "Done"
exit
fi
echo "The following distros (and their derivatives) are supported by install.sh:"
echo "- Debian/Ubuntu (apt)"
echo "- Arch Linux (pacman)"
echo "- openSUSE (zypper)"
echo "- Alpine Linux (apk)"
echo "Please consider contributing and adding an installation script for your distro."
exit 1