On Fri, Oct 7, 2016 at 3:10 PM, Moritz Klammler <mor...@klammler.eu> wrote: > I would like to bump my patch that makes the > `contrib/download_prerequisites` script verify the checksums of > the downloaded packages and augments it with a few additional options. > All feedback I have received has been incorporated. Is it okay like > this? > > Below is again the latest iteration of the patch.
Looks generally ok. Can you remove -eu from the /bin/sh command and leave the copyright in place? The patch is ok with that change. Do you have commit privileges? Thanks, Richard. > > > Index: contrib/download_prerequisites > =================================================================== > --- contrib/download_prerequisites (revision 240137) > +++ contrib/download_prerequisites (working copy) > @@ -1,60 +1,215 @@ > -#! /bin/sh > +#! /bin/sh -eu > +#! -*- coding:utf-8; mode:shell-script; -*- > > -# Download some prerequisites needed by gcc. > -# Run this from the top level of the gcc source tree and the gcc > -# build will do the right thing. > +# Download some prerequisites needed by GCC. > +# Run this from the top level of the GCC source tree and the GCC build will > do > +# the right thing. Run it with the `--help` option for more information. > # > -# (C) 2010-2016 Free Software Foundation > +# (C) 2016 Free Software Foundation > # > -# This program is free software: you can redistribute it and/or modify > -# it under the terms of the GNU General Public License as published by > -# the Free Software Foundation, either version 3 of the License, or > -# (at your option) any later version. > -# > -# This program is distributed in the hope that it will be useful, but > -# WITHOUT ANY WARRANTY; without even the implied warranty of > -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > -# General Public License for more details. > -# > -# You should have received a copy of the GNU General Public License > -# along with this program. If not, see http://www.gnu.org/licenses/. > +# This program is free software: you can redistribute it and/or modify it > under > +# the terms of the GNU General Public License as published by the Free > Software > +# Foundation, either version 3 of the License, or (at your option) any later > +# version. > +# > +# This program is distributed in the hope that it will be useful, but WITHOUT > +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > FITNESS > +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more > +# details. > +# > +# You should have received a copy of the GNU General Public License along > with > +# this program. If not, see http://www.gnu.org/licenses/. > > -# If you want to disable Graphite loop optimizations while building GCC, > -# DO NOT set GRAPHITE_LOOP_OPT as yes so that the isl package will not > -# be downloaded. > -GRAPHITE_LOOP_OPT=yes > > -if [ ! -e gcc/BASE-VER ] ; then > - echo "You must run this script in the top level GCC source directory." > - exit 1 > -fi > +program='download_prerequisites' > +version='(unversioned)' > > -# Necessary to build GCC. > -MPFR=mpfr-3.1.4 > -GMP=gmp-6.1.0 > -MPC=mpc-1.0.3 > +# MAINTAINERS: If you update the package versions below, please > +# remember to also update the files `contrib/prerequisites.sha512` and > +# `contrib/prerequisites.md5` with the new checksums. > > -wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1 > -tar xjf $MPFR.tar.bz2 || exit 1 > -if test -L mpfr; then rm -f mpfr; fi > -ln -sf $MPFR mpfr || exit 1 > +gmp='gmp-6.1.0.tar.bz2' > +mpfr='mpfr-3.1.4.tar.bz2' > +mpc='mpc-1.0.3.tar.gz' > +isl='isl-0.16.1.tar.bz2' > > -wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1 > -tar xjf $GMP.tar.bz2 || exit 1 > -if test -L gmp; then rm -f gmp; fi > -ln -sf $GMP gmp || exit 1 > +base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/' > > -wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1 > -tar xzf $MPC.tar.gz || exit 1 > -if test -L mpc; then rm -f mpc; fi > -ln -sf $MPC mpc || exit 1 > +echo_archives() { > + echo "${gmp}" > + echo "${mpfr}" > + echo "${mpc}" > + if [ ${graphite} -gt 0 ]; then echo "${isl}"; fi > +} > > -# Necessary to build GCC with the Graphite loop optimizations. > -if [ "$GRAPHITE_LOOP_OPT" = "yes" ] ; then > - ISL=isl-0.16.1 > +graphite=1 > +verify=1 > +force=0 > +chksum='sha512' > +directory='.' > > - wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$ISL.tar.bz2 || exit 1 > - tar xjf $ISL.tar.bz2 || exit 1 > - if test -L isl; then rm -f isl; fi > - ln -sf $ISL isl || exit 1 > +helptext="usage: ${program} [OPTION...] > + > +Downloads some prerequisites needed by GCC. Run this from the top level of > the > +GCC source tree and the GCC build will do the right thing. > + > +The following options are available: > + > + --directory=DIR download and unpack packages into DIR instead of '.' > + --force download again overwriting existing packages > + --no-force do not download existing packages again (default) > + --isl download ISL, needed for Graphite loop optimizations > (default) > + --graphite same as --isl > + --no-isl don't download ISL > + --no-graphite same as --no-isl > + --verify verify package integrity after download (default) > + --no-verify don't verify package integrity > + --sha512 use SHA512 checksum to verify package integrity (default) > + --md5 use MD5 checksum to verify package integrity > + --help show this text and exit > + --version show version information and exit > +" > + > +versiontext="${program} ${version} > +Copyright (C) 2016 Free Software Foundation, Inc. > +This is free software; see the source for copying conditions. There is NO > +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." > + > +die() { > + echo "error: $@" >&2 > + exit 1 > +} > + > +for arg in "$@" > +do > + case "${arg}" in > + --help) > + echo "${helptext}" > + exit > + ;; > + --version) > + echo "${versiontext}" > + exit > + ;; > + esac > +done > +unset arg > + > +argnext= > +for arg in "$@" > +do > + if [ "x${argnext}" = x ] > + then > + case "${arg}" in > + --directory) > + argnext='directory' > + ;; > + --directory=*) > + directory="${arg#--directory=}" > + ;; > + --force) > + force=1 > + ;; > + --no-force) > + force=0 > + ;; > + --isl|--graphite) > + graphite=1 > + ;; > + --no-isl|--no-graphite) > + graphite=0 > + ;; > + --verify) > + verify=1 > + ;; > + --no-verify) > + verify=0 > + ;; > + --sha512) > + chksum='sha512' > + verify=1 > + ;; > + --md5) > + chksum='md5' > + verify=1 > + ;; > + -*) > + die "unknown option: ${arg}" > + ;; > + *) > + die "too many arguments" > + ;; > + esac > + else > + case "${arg}" in > + -*) > + die "Missing argument for option --${argnext}" > + ;; > + esac > + case "${argnext}" in > + directory) > + directory="${arg}" > + ;; > + *) > + die "The impossible has happened" > + ;; > + esac > + argnext= > + fi > +done > +[ "x${argnext}" = x ] || die "Missing argument for option --${argnext}" > +unset arg argnext > + > +[ -e ./gcc/BASE-VER ] > \ > + || die "You must run this script in the top-level GCC source directory" > + > +[ -d "${directory}" ] > \ > + || die "No such directory: ${directory}" > + > +for ar in $(echo_archives) > +do > + if [ ${force} -gt 0 ]; then rm -f "${directory}/${ar}"; fi > + [ -e "${directory}/${ar}" ] > \ > + || wget --no-verbose -O "${directory}/${ar}" "${base_url}${ar}" > \ > + || die "Cannot download ${ar} from ${base_url}" > +done > +unset ar > + > +if [ ${verify} -gt 0 ] > +then > + chksumfile="contrib/prerequisites.${chksum}" > + [ -r "${chksumfile}" ] || die "No checksums available" > + for ar in $(echo_archives) > + do > + grep "${ar}" "${chksumfile}" > \ > + | ( cd "${directory}" && "${chksum}sum" --check ) > \ > + || die "Cannot verify integrity of possibly corrupted file ${ar}" > + done > + unset chksumfile > fi > +unset ar > + > +for ar in $(echo_archives) > +do > + package="${ar%.tar*}" > + if [ ${force} -gt 0 ]; then rm -rf "${directory}/${package}"; fi > + [ -e "${directory}/${package}" ] > \ > + || ( cd "${directory}" && tar -xf "${ar}" ) > \ > + || die "Cannot extract package from ${ar}" > + unset package > +done > +unset ar > + > +for ar in $(echo_archives) > +do > + target="${directory}/${ar%.tar*}/" > + linkname="${ar%-*}" > + if [ ${force} -gt 0 ]; then rm -f "${linkname}"; fi > + [ -e "${linkname}" ] > \ > + || ln -s "${target}" "${linkname}" > \ > + || die "Cannot create symbolic link ${linkname} --> ${target}" > + unset target linkname > +done > +unset ar > + > +echo "All prerequisites downloaded successfully." > Index: contrib/prerequisites.md5 > =================================================================== > --- contrib/prerequisites.md5 (nonexistent) > +++ contrib/prerequisites.md5 (working copy) > @@ -0,0 +1,4 @@ > +86ee6e54ebfc4a90b643a65e402c4048 gmp-6.1.0.tar.bz2 > +b8a2f6b0e68bef46e53da2ac439e1cf4 mpfr-3.1.4.tar.bz2 > +d6a1d5f8ddea3abd2cc3e98f58352d26 mpc-1.0.3.tar.gz > +ac1f25a0677912952718a51f5bc20f32 isl-0.16.1.tar.bz2 > Index: contrib/prerequisites.sha512 > =================================================================== > --- contrib/prerequisites.sha512 (nonexistent) > +++ contrib/prerequisites.sha512 (working copy) > @@ -0,0 +1,4 @@ > +3c82aeab9c1596d4da8afac2eec38e429e84f3211e1a572cf8fd2b546493c44c039b922a1133eaaa48bd7f3e11dbe795a384e21ed95cbe3ecc58d7ac02246117 > gmp-6.1.0.tar.bz2 > +51066066ff2c12ed2198605ecf68846b0c96b548adafa5b80e0c786d0df488411a5e8973358fce7192dc977ad4e68414cf14500e3c39746de62465eb145bb819 > mpfr-3.1.4.tar.bz2 > +0028b76df130720c1fad7de937a0d041224806ce5ef76589f19c7b49d956071a683e2f20d154c192a231e69756b19e48208f2889b0c13950ceb7b3cfaf059a43 > mpc-1.0.3.tar.gz > +c188667a84dc5bdddb4ab7c35f89c91bf15a8171f4fcaf41301cf285fb7328846d9a367c096012fec4cc69d244f0bc9e95d84c09ec097394cd4093076f2a041b > isl-0.16.1.tar.bz2 >