mirror of
https://github.com/libretro/Lakka-LibreELEC.git
synced 2024-11-27 10:30:52 +00:00
ef93ecf54b
Replace "which" with "command -v", which is part of POSIX. Make offering to install packages contingent on having the sudo command. Not every distro uses sudo. It is optional in Gentoo, for example. Signed-off-by: Ian Leonard <antonlacon@gmail.com>
179 lines
4.8 KiB
Bash
Executable File
179 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
|
|
|
. config/options ""
|
|
|
|
get_deps() {
|
|
need=()
|
|
need_pkg=()
|
|
|
|
for i in "${!deps[@]}"; do
|
|
dep=${deps[$i]}
|
|
dep_pkg=${deps_pkg[$i]}
|
|
if ! command -v "$dep" >/dev/null; then
|
|
need+=($dep)
|
|
need_pkg+=("$dep_pkg")
|
|
fi
|
|
done
|
|
|
|
for i in "${!files[@]}"; do
|
|
file=${files[$i]}
|
|
file_pkg=${files_pkg[$i]}
|
|
if [ ! -f "$file" ]; then
|
|
need+=($file)
|
|
need_pkg+=("$file_pkg")
|
|
fi
|
|
done
|
|
|
|
for i in "${!perl_mod[@]}"; do
|
|
mod=${perl_mod[$i]}
|
|
pkg=${perl_pkg[$i]}
|
|
|
|
if ! perl -M"$mod" -e exit 2>/dev/null; then
|
|
need+=(perl::$mod)
|
|
need_pkg+=($pkg)
|
|
fi
|
|
done
|
|
}
|
|
|
|
get_yes_no()
|
|
{
|
|
local ans
|
|
read -p "Would you like to install the needed tools? (y/n) " ans
|
|
[ "${ans,,}" = "y" ] && return 0
|
|
[ "${ans,,}" = "yes" ] && return 0
|
|
return 1
|
|
}
|
|
|
|
if [ -f /etc/lsb-release ]; then
|
|
DISTRO=$(grep DISTRIB_ID /etc/lsb-release | cut -d "=" -f 2)
|
|
fi
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
DISTRO=$(grep ^ID= /etc/os-release | cut -d "=" -f 2)
|
|
fi
|
|
|
|
DISTRO=${DISTRO,,}
|
|
|
|
deps=(wget bash bc gcc sed patch lsdiff tar bzip2 gzip perl gawk gperf zip unzip diff lzop)
|
|
deps_pkg=(wget bash bc gcc sed patch patchutils tar bzip2 gzip perl gawk gperf zip unzip diffutils lzop)
|
|
|
|
files=(/usr/include/stdio.h /usr/include/ncurses.h)
|
|
files_pkg=(libc6-dev libncurses5-dev)
|
|
|
|
perl_mod=(JSON XML::Parser)
|
|
|
|
case "$DISTRO" in
|
|
fedora|centos|rhel)
|
|
deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python)
|
|
deps_pkg+=(gcc-c++ xorg-x11-font-utils xorg-x11-font-utils xorg-x11-font-utils libxslt java-1.7.0-openjdk python2)
|
|
if [[ ! $(rpm -qa glibc-static) ]]; then
|
|
deps+=(glibc-static)
|
|
deps_pkg+=(glibc-static)
|
|
fi
|
|
if [[ ! $(rpm -qa libstdc++-static) ]]; then
|
|
deps+=(libstdc++-static)
|
|
deps_pkg+=(libstdc++-static)
|
|
fi
|
|
files_pkg=(glibc-headers ncurses-devel)
|
|
perl_pkg=(perl-JSON perl-XML-parser)
|
|
;;
|
|
gentoo|sabayon)
|
|
deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python)
|
|
deps_pkg+=("gcc[cxx]" mkfontscale mkfontdir bdftopcf libxslt virtual/jre python)
|
|
files_pkg=(glibc ncurses)
|
|
perl_pkg=(JSON XML-Parser)
|
|
;;
|
|
arch)
|
|
deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python)
|
|
deps_pkg+=(g++ xorg-mkfontscale xorg-mkfontdir xorg-bdftopcf libxslt "java-runtime-common jdk8-openjdk" python2)
|
|
perl_pkg=(perl-json perl-xml-parser)
|
|
;;
|
|
opensuse)
|
|
deps+=( g++ mkfontscale mkfontdir bdftopcf xsltproc java python)
|
|
deps_pkg+=(gcc-c++ mkfontscale mkfontdir bdftopcf libxslt-tools java-1_8_0-openjdk python)
|
|
if [[ ! $(rpm -qa glibc-devel-static) ]]; then
|
|
deps+=(glibc-devel-static)
|
|
deps_pkg+=(glibc-devel-static)
|
|
fi
|
|
perl_pkg=(perl-JSON perl-XML-Parser)
|
|
;;
|
|
*)
|
|
deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python)
|
|
deps_pkg+=(g++ xfonts-utils xfonts-utils xfonts-utils xsltproc default-jre python)
|
|
perl_pkg=(libjson-perl libxml-parser-perl)
|
|
;;
|
|
esac
|
|
|
|
# project specific dependencies
|
|
if [ -n "$EXTRA_DEPS" ] ; then
|
|
deps+=($EXTRA_DEPS)
|
|
fi
|
|
if [ -n "$EXTRA_DEPS_PKG" ] ; then
|
|
deps_pkg+=($EXTRA_DEPS_PKG)
|
|
fi
|
|
|
|
# distro specific dependencies
|
|
if [ -n "$DISTRO_DEPS" ] ; then
|
|
deps+=($DISTRO_DEPS)
|
|
fi
|
|
if [ -n "$DISTRO_DEPS_PKG" ] ; then
|
|
deps_pkg+=($DISTRO_DEPS_PKG)
|
|
fi
|
|
|
|
get_deps
|
|
|
|
if [ "${#need[@]}" -gt 0 ]; then
|
|
echo "**** Your system lacks the following tools needed to build $DISTRONAME ****"
|
|
for i in "${!need[@]}"; do
|
|
echo "${need[$i]} provided by ${need_pkg[$i]}"
|
|
done
|
|
echo "**** You seem to use a $DISTRO system ****"
|
|
|
|
if command -v sudo >/dev/null; then
|
|
case "$DISTRO" in
|
|
ubuntu|debian|linuxmint|\"elementary\")
|
|
get_yes_no && sudo apt-get install "${need_pkg[@]}"
|
|
;;
|
|
fedora|centos|rhel)
|
|
command -v dnf >/dev/null && YUM=dnf || YUM=yum
|
|
get_yes_no && sudo $YUM install "${need_pkg[@]}"
|
|
;;
|
|
gentoo)
|
|
get_yes_no && sudo emerge --ask --deep "${need_pkg[@]}"
|
|
;;
|
|
sabayon)
|
|
get_yes_no && sudo equo install --ask "${need_pkg[@]}"
|
|
;;
|
|
mageia)
|
|
get_yes_no && sudo urpmi "${need_pkg[@]}"
|
|
;;
|
|
arch)
|
|
get_yes_no && sudo pacman -Sy "${need_pkg[@]}"
|
|
;;
|
|
opensuse)
|
|
get_yes_no && sudo zypper install -y --no-recommends "${need_pkg[@]}"
|
|
;;
|
|
*)
|
|
echo "**** unsupported distro $DISTRO ****"
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
echo "The command 'sudo' was not found. Please install necessary packages manually."
|
|
fi
|
|
fi
|
|
|
|
get_deps
|
|
|
|
if [ "${#need[@]}" -gt 0 ]; then
|
|
echo "**** The following packages were not installed correctly ****"
|
|
for i in "${!need[@]}"; do
|
|
echo "${need[$i]} provided by ${need_pkg[$i]}"
|
|
done
|
|
echo "********"
|
|
exit 1
|
|
fi
|