From 6dd752a283308ed62c5acf993eb0c4d12b6a4d7b Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Wed, 22 Nov 2017 23:53:36 +0200 Subject: [PATCH 1/6] scripts/checkdeps: extract duplicate code --- scripts/checkdeps | 60 +++++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index bdb921f6d8..21cd1c9ce6 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -20,6 +20,27 @@ . config/options $1 +get_deps() { + need="" + need_pkg="" + + i=0 + while dep=`getarg $i $deps` && [ -n "$dep" ]; do + [ -z "`which $dep 2>/dev/null`" ] && need="$need $dep" && need_pkg="$need_pkg `getarg $i $deps_pkg`" + i=$(($i+1)) + done + + i=0 + while file=`getarg $i $files` && [ -n "$file" ]; do + installed=N + file_pkg=`getarg $i $files_pkg` + [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y + [ $installed == N -a -f $file ] && installed=Y + [ $installed == N ] && need="$need $file" && need_pkg="$need_pkg $file_pkg" + i=$(($i+1)) + done +} + get_yes_no() { local ans @@ -117,26 +138,6 @@ if [ -n "$DISTRO_DEPS_PKG" ] ; then deps_pkg="$deps_pkg $DISTRO_DEPS_PKG" fi -getarg() { - eval echo \${$(($1+2))} -} - -i=0 -while dep=`getarg $i $deps` && [ -n "$dep" ]; do - [ -z "`which $dep 2>/dev/null`" ] && need="$need $dep" && need_pkg="$need_pkg `getarg $i $deps_pkg`" - i=$(($i+1)) -done - -i=0 -while file=`getarg $i $files` && [ -n "$file" ]; do - installed=N - file_pkg=`getarg $i $files_pkg` - [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y - [ $installed == N -a -f $file ] && installed=Y - [ $installed == N ] && need="$need $file" && need_pkg="$need_pkg $file_pkg" - i=$(($i+1)) -done - if [ -n "$need" ]; then echo "**** Your system lacks the following tools needed to build $DISTRONAME ****" echo $need provided by $need_pkg @@ -169,24 +170,7 @@ if [ -n "$need" ]; then esac fi -need="" -need_pkg="" - -i=0 -while dep=`getarg $i $deps` && [ -n "$dep" ]; do - [ -z "`which $dep 2>/dev/null`" ] && need="$need $dep" && need_pkg="$need_pkg `getarg $i $deps_pkg`" - i=$(($i+1)) -done - -i=0 -while file=`getarg $i $files` && [ -n "$file" ]; do - installed=N - file_pkg=`getarg $i $files_pkg` - [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y - [ $installed == N -a -f $file ] && installed=Y - [ $installed == N ] && need="$need $file" && need_pkg="$need_pkg $file_pkg" - i=$(($i+1)) -done +get_deps if [ -n "$need" ]; then echo "**** The following packages were not installed correctly ****" From a33d54695d33694d10a143f71f8d7fd2c9f250f4 Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Wed, 22 Nov 2017 23:46:37 +0200 Subject: [PATCH 2/6] scripts/checkdeps: use bash arrays --- scripts/checkdeps | 103 ++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index 21cd1c9ce6..dddcb4aaa6 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -21,23 +21,22 @@ . config/options $1 get_deps() { - need="" - need_pkg="" + need=() + need_pkg=() - i=0 - while dep=`getarg $i $deps` && [ -n "$dep" ]; do - [ -z "`which $dep 2>/dev/null`" ] && need="$need $dep" && need_pkg="$need_pkg `getarg $i $deps_pkg`" - i=$(($i+1)) + for i in "${!deps[@]}"; do + dep=${deps[$i]} + dep_pkg=${deps_pkg[$i]} + [ -z "`which $dep 2>/dev/null`" ] && need+=($dep) && need_pkg+=($dep_pkg) done - i=0 - while file=`getarg $i $files` && [ -n "$file" ]; do + for i in "${!files[@]}"; do + file=${files[$i]} + file_pkg=${files_pkg[$i]} installed=N - file_pkg=`getarg $i $files_pkg` [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y - [ $installed == N -a -f $file ] && installed=Y - [ $installed == N ] && need="$need $file" && need_pkg="$need_pkg $file_pkg" - i=$(($i+1)) + [ $installed == N -a -f "$file" ] && installed=Y + [ $installed == N ] && need+=($file) && need_pkg+=($file_pkg) done } @@ -73,95 +72,99 @@ if [ -f /etc/os-release ]; then DISTRO=$(grep ^ID= /etc/os-release | cut -d "=" -f 2 | tr A-Z a-z) fi -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" +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" +files=(/usr/include/stdio.h /usr/include/ncurses.h) +files_pkg=(libc6-dev libncurses5-dev) case "$DISTRO" in fedora|centos|rhel) - deps="$deps g++ mkfontscale mkfontdir bdftopcf xsltproc java python" - deps_pkg="$deps_pkg gcc-c++ xorg-x11-font-utils xorg-x11-font-utils xorg-x11-font-utils libxslt java-1.7.0-openjdk python2" - [[ ! `rpm -qa glibc-static` ]] && deps="$deps glibc-static" && deps_pkg="$deps_pkg glibc-static" - [[ ! `rpm -qa libstdc++-static` ]] && deps="$deps libstdc++-static" && deps_pkg="$deps_pkg libstdc++-static" - files_pkg="glibc-headers ncurses-devel" + 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) + [[ ! `rpm -qa glibc-static` ]] && deps+=(glibc-static) && deps_pkg+=(glibc-static) + [[ ! `rpm -qa libstdc++-static` ]] && deps+=(libstdc++-static) && deps_pkg+=(libstdc++-static) + files_pkg=(glibc-headers ncurses-devel) ;; gentoo) - deps="$deps g++ mkfontscale mkfontdir bdftopcf xsltproc java python" - deps_pkg="$deps_pkg gcc[cxx] mkfontscale mkfontdir bdftopcf libxslt virtual/jre python" - files_pkg="glibc ncurses" + deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python) + deps_pkg+=("gcc[cxx]" mkfontscale mkfontdir bdftopcf libxslt virtual/jre python) + files_pkg=(glibc ncurses) ;; arch) - deps="$deps g++ mkfontscale mkfontdir bdftopcf xsltproc java python" - deps_pkg="$deps_pkg g++ xorg-mkfontscale xorg-mkfontdir xorg-bdftopcf libxslt java-runtime-common jdk8-openjdk python2" + deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python) + deps_pkg+=(g++ xorg-mkfontscale xorg-mkfontdir xorg-bdftopcf libxslt java-runtime-common jdk8-openjdk python2) ;; opensuse) - deps="$deps g++ mkfontscale mkfontdir bdftopcf xsltproc java python" - deps_pkg="$deps_pkg gcc-c++ mkfontscale mkfontdir bdftopcf libxslt-tools java-1_8_0-openjdk python" - [[ ! `rpm -qa glibc-devel-static` ]] && deps="$deps glibc-devel-static" && deps_pkg="$deps_pkg glibc-devel-static" + deps+=( g++ mkfontscale mkfontdir bdftopcf xsltproc java python) + deps_pkg+=(gcc-c++ mkfontscale mkfontdir bdftopcf libxslt-tools java-1_8_0-openjdk python) + [[ ! `rpm -qa glibc-devel-static` ]] && deps+=(glibc-devel-static) && deps_pkg+=(glibc-devel-static) ;; *) - deps="$deps g++ mkfontscale mkfontdir bdftopcf xsltproc java python" - deps_pkg="$deps_pkg g++ xfonts-utils xfonts-utils xfonts-utils xsltproc default-jre python" + deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python) + deps_pkg+=(g++ xfonts-utils xfonts-utils xfonts-utils xsltproc default-jre python) ;; esac if ! test_libjson-perl; then - files="$files perl/JSON.pm" + files+=(perl/JSON.pm) case "$DISTRO" in arch) - files_pkg="$files_pkg perl-json" + files_pkg+=(perl-json) ;; fedora|centos|rhel|opensuse) - files_pkg="$files_pkg perl-JSON" + files_pkg+=(perl-JSON) ;; *) - files_pkg="$files_pkg libjson-perl" + files_pkg+=(libjson-perl) ;; esac fi # project specific dependencies if [ -n "$EXTRA_DEPS" ] ; then - deps="$deps $EXTRA_DEPS" + deps+=($EXTRA_DEPS) fi if [ -n "$EXTRA_DEPS_PKG" ] ; then - deps_pkg="$deps_pkg $EXTRA_DEPS_PKG" + deps_pkg+=($EXTRA_DEPS_PKG) fi # distro specific dependencies if [ -n "$DISTRO_DEPS" ] ; then - deps="$deps $DISTRO_DEPS" + deps+=($DISTRO_DEPS) fi if [ -n "$DISTRO_DEPS_PKG" ] ; then - deps_pkg="$deps_pkg $DISTRO_DEPS_PKG" + deps_pkg+=($DISTRO_DEPS_PKG) fi -if [ -n "$need" ]; then +get_deps + +if [ "${#need[@]}" -gt 0 ]; then echo "**** Your system lacks the following tools needed to build $DISTRONAME ****" - echo $need provided by $need_pkg + for i in "${!need[@]}"; do + echo "${need[$i]} provided by ${need_pkg[$i]}" + done echo "**** You seem to use a $DISTRO system ****" case "$DISTRO" in ubuntu|debian|linuxmint|\"elementary\") - get_yes_no && sudo apt-get install $need_pkg + get_yes_no && sudo apt-get install "${need_pkg[@]}" ;; fedora|centos|rhel) if [ `which dnf` ]; then YUM=dnf; else YUM=yum; fi - get_yes_no && sudo $YUM install $need_pkg + get_yes_no && sudo $YUM install "${need_pkg[@]}" ;; gentoo) - get_yes_no && sudo emerge --ask --deep $need_pkg + get_yes_no && sudo emerge --ask --deep "${need_pkg[@]}" ;; mageia) - get_yes_no && sudo urpmi $need_pkg + get_yes_no && sudo urpmi "${need_pkg[@]}" ;; arch) - get_yes_no && sudo pacman -Sy $need_pkg + get_yes_no && sudo pacman -Sy "${need_pkg[@]}" ;; opensuse) - get_yes_no && sudo zypper install -y --no-recommends $need_pkg + get_yes_no && sudo zypper install -y --no-recommends "${need_pkg[@]}" ;; *) echo "**** unsupported distro $DISTRO ****" @@ -172,9 +175,11 @@ fi get_deps -if [ -n "$need" ]; then +if [ "${#need[@]}" -gt 0 ]; then echo "**** The following packages were not installed correctly ****" - echo $need_pkg + for i in "${!need[@]}"; do + echo "${need[$i]} provided by ${need_pkg[$i]}" + done echo "********" exit 1 fi From 1ed4316d7658da87f033dcca04d3f6c859333fd7 Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Thu, 23 Nov 2017 00:19:03 +0200 Subject: [PATCH 3/6] scripts/checkdeps: support grouping dependencies --- scripts/checkdeps | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index dddcb4aaa6..8b4452466f 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -27,7 +27,7 @@ get_deps() { for i in "${!deps[@]}"; do dep=${deps[$i]} dep_pkg=${deps_pkg[$i]} - [ -z "`which $dep 2>/dev/null`" ] && need+=($dep) && need_pkg+=($dep_pkg) + [ -z "`which $dep 2>/dev/null`" ] && need+=($dep) && need_pkg+=("$dep_pkg") done for i in "${!files[@]}"; do @@ -36,7 +36,7 @@ get_deps() { installed=N [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y [ $installed == N -a -f "$file" ] && installed=Y - [ $installed == N ] && need+=($file) && need_pkg+=($file_pkg) + [ $installed == N ] && need+=($file) && need_pkg+=("$file_pkg") done } @@ -93,7 +93,7 @@ case "$DISTRO" in ;; 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) + deps_pkg+=(g++ xorg-mkfontscale xorg-mkfontdir xorg-bdftopcf libxslt "java-runtime-common jdk8-openjdk" python2) ;; opensuse) deps+=( g++ mkfontscale mkfontdir bdftopcf xsltproc java python) From 0df9c0de6466d873554043b658a56a276ea2643d Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Wed, 22 Nov 2017 23:15:04 +0200 Subject: [PATCH 4/6] scripts/checkdeps: simplify checking for perl modules --- scripts/checkdeps | 48 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index 8b4452466f..e67ecb6521 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -34,10 +34,19 @@ get_deps() { file=${files[$i]} file_pkg=${files_pkg[$i]} installed=N - [ "$(type -t "test_$file_pkg")" == "function" ] && test_$file_pkg && installed=Y [ $installed == N -a -f "$file" ] && installed=Y [ $installed == N ] && need+=($file) && need_pkg+=("$file_pkg") 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() @@ -49,21 +58,6 @@ get_yes_no() return 1 } -test_libjson-perl() -{ - perl -MJSON -e 'exit(0);' 2>/dev/null -} - -test_perl-json() -{ - test_libjson-perl -} - -test_perl-JSON() -{ - test_libjson-perl -} - if [ -f /etc/lsb-release ]; then DISTRO=$(grep DISTRIB_ID /etc/lsb-release | cut -d "=" -f 2 | tr A-Z a-z) fi @@ -78,6 +72,8 @@ deps_pkg=(wget bash bc gcc sed patch patchutils tar bzip2 gzip perl gawk gperf z files=(/usr/include/stdio.h /usr/include/ncurses.h) files_pkg=(libc6-dev libncurses5-dev) +perl_mod=(JSON) + case "$DISTRO" in fedora|centos|rhel) deps+=(g++ mkfontscale mkfontdir bdftopcf xsltproc java python) @@ -85,42 +81,32 @@ case "$DISTRO" in [[ ! `rpm -qa glibc-static` ]] && deps+=(glibc-static) && deps_pkg+=(glibc-static) [[ ! `rpm -qa libstdc++-static` ]] && deps+=(libstdc++-static) && deps_pkg+=(libstdc++-static) files_pkg=(glibc-headers ncurses-devel) + perl_pkg=(perl-JSON) ;; gentoo) 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) ;; 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) ;; opensuse) deps+=( g++ mkfontscale mkfontdir bdftopcf xsltproc java python) deps_pkg+=(gcc-c++ mkfontscale mkfontdir bdftopcf libxslt-tools java-1_8_0-openjdk python) [[ ! `rpm -qa glibc-devel-static` ]] && deps+=(glibc-devel-static) && deps_pkg+=(glibc-devel-static) + perl_pkg=(perl-JSON) ;; *) 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) ;; esac -if ! test_libjson-perl; then - files+=(perl/JSON.pm) - case "$DISTRO" in - arch) - files_pkg+=(perl-json) - ;; - fedora|centos|rhel|opensuse) - files_pkg+=(perl-JSON) - ;; - *) - files_pkg+=(libjson-perl) - ;; - esac -fi - # project specific dependencies if [ -n "$EXTRA_DEPS" ] ; then deps+=($EXTRA_DEPS) From 26817d58801190affc766febd250ef2b97a9ab37 Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Thu, 23 Nov 2017 00:37:17 +0200 Subject: [PATCH 5/6] scripts/checkdeps: add missing dependency perl module XML::Parser is needed to build intltool --- scripts/checkdeps | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index e67ecb6521..1f540114aa 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -72,7 +72,7 @@ deps_pkg=(wget bash bc gcc sed patch patchutils tar bzip2 gzip perl gawk gperf z files=(/usr/include/stdio.h /usr/include/ncurses.h) files_pkg=(libc6-dev libncurses5-dev) -perl_mod=(JSON) +perl_mod=(JSON XML::Parser) case "$DISTRO" in fedora|centos|rhel) @@ -81,29 +81,29 @@ case "$DISTRO" in [[ ! `rpm -qa glibc-static` ]] && deps+=(glibc-static) && deps_pkg+=(glibc-static) [[ ! `rpm -qa libstdc++-static` ]] && deps+=(libstdc++-static) && deps_pkg+=(libstdc++-static) files_pkg=(glibc-headers ncurses-devel) - perl_pkg=(perl-JSON) + perl_pkg=(perl-JSON perl-XML-parser) ;; gentoo) 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) + 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_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) [[ ! `rpm -qa glibc-devel-static` ]] && deps+=(glibc-devel-static) && deps_pkg+=(glibc-devel-static) - perl_pkg=(perl-JSON) + 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) + perl_pkg=(libjson-perl libxml-parser-perl) ;; esac From 4d9c3739060554ac719dd6a63faf22c4c048915d Mon Sep 17 00:00:00 2001 From: Christoph Gysin Date: Thu, 23 Nov 2017 08:52:33 +0200 Subject: [PATCH 6/6] scripts/checkdeps: replace all backticks --- scripts/checkdeps | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index 1f540114aa..6a1d06f09d 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -27,7 +27,7 @@ get_deps() { for i in "${!deps[@]}"; do dep=${deps[$i]} dep_pkg=${deps_pkg[$i]} - [ -z "`which $dep 2>/dev/null`" ] && need+=($dep) && need_pkg+=("$dep_pkg") + [ -z "$(which $dep 2>/dev/null)" ] && need+=($dep) && need_pkg+=("$dep_pkg") done for i in "${!files[@]}"; do @@ -78,8 +78,8 @@ 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) - [[ ! `rpm -qa glibc-static` ]] && deps+=(glibc-static) && deps_pkg+=(glibc-static) - [[ ! `rpm -qa libstdc++-static` ]] && deps+=(libstdc++-static) && deps_pkg+=(libstdc++-static) + [[ ! $(rpm -qa glibc-static) ]] && deps+=(glibc-static) && deps_pkg+=(glibc-static) + [[ ! $(rpm -qa libstdc++-static) ]] && deps+=(libstdc++-static) && deps_pkg+=(libstdc++-static) files_pkg=(glibc-headers ncurses-devel) perl_pkg=(perl-JSON perl-XML-parser) ;; @@ -97,7 +97,7 @@ case "$DISTRO" in opensuse) deps+=( g++ mkfontscale mkfontdir bdftopcf xsltproc java python) deps_pkg+=(gcc-c++ mkfontscale mkfontdir bdftopcf libxslt-tools java-1_8_0-openjdk python) - [[ ! `rpm -qa glibc-devel-static` ]] && deps+=(glibc-devel-static) && deps_pkg+=(glibc-devel-static) + [[ ! $(rpm -qa glibc-devel-static) ]] && deps+=(glibc-devel-static) && deps_pkg+=(glibc-devel-static) perl_pkg=(perl-JSON perl-XML-Parser) ;; *) @@ -137,7 +137,7 @@ if [ "${#need[@]}" -gt 0 ]; then get_yes_no && sudo apt-get install "${need_pkg[@]}" ;; fedora|centos|rhel) - if [ `which dnf` ]; then YUM=dnf; else YUM=yum; fi + if [ $(which dnf) ]; then YUM=dnf; else YUM=yum; fi get_yes_no && sudo $YUM install "${need_pkg[@]}" ;; gentoo)