From 38000825cd37c3f132cd02edc4e8eb79aff4d3a6 Mon Sep 17 00:00:00 2001 From: Moritz Klammler Date: Mon, 24 Oct 2016 16:05:48 +0000 Subject: [PATCH] download_prerequisites: Conditionally verify checksums of downloaded pacakges. 2016-10-24 Moritz Klammler * download_prerequisites: Conditionally verify checksums of downloaded pacakges. Add help text. * prerequisites.md5: New file. * prerequisites.sha512: New file. From-SVN: r241483 --- contrib/ChangeLog | 7 + contrib/download_prerequisites | 233 +++++++++++++++++++++++++++------ contrib/prerequisites.md5 | 4 + contrib/prerequisites.sha512 | 4 + 4 files changed, 209 insertions(+), 39 deletions(-) create mode 100644 contrib/prerequisites.md5 create mode 100644 contrib/prerequisites.sha512 diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 1b6939ad030..ab5ae3bc6f4 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,10 @@ +2016-10-24 Moritz Klammler + + * download_prerequisites: Conditionally verify checksums of + downloaded pacakges. Add help text. + * prerequisites.md5: New file. + * prerequisites.sha512: New file. + 2016-10-24 Kyrylo Tkachov * check_GNU_style.sh (remove_testsuite): New function. diff --git a/contrib/download_prerequisites b/contrib/download_prerequisites index 2c963f28e30..a9eac67de7b 100755 --- a/contrib/download_prerequisites +++ b/contrib/download_prerequisites @@ -1,8 +1,9 @@ #! /bin/sh +#! -*- 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 # @@ -19,42 +20,196 @@ # 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)' + +# 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. + +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' + +base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/' + +echo_archives() { + echo "${gmp}" + echo "${mpfr}" + echo "${mpc}" + if [ ${graphite} -gt 0 ]; then echo "${isl}"; fi +} + +graphite=1 +verify=1 +force=0 +chksum='sha512' +directory='.' + +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 +" -# Necessary to build GCC. -MPFR=mpfr-3.1.4 -GMP=gmp-6.1.0 -MPC=mpc-1.0.3 - -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 - -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 - -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 - -# Necessary to build GCC with the Graphite loop optimizations. -if [ "$GRAPHITE_LOOP_OPT" = "yes" ] ; then - ISL=isl-0.16.1 - - 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 +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." diff --git a/contrib/prerequisites.md5 b/contrib/prerequisites.md5 new file mode 100644 index 00000000000..b8e89d43c8a --- /dev/null +++ b/contrib/prerequisites.md5 @@ -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 diff --git a/contrib/prerequisites.sha512 b/contrib/prerequisites.sha512 new file mode 100644 index 00000000000..808970778c7 --- /dev/null +++ b/contrib/prerequisites.sha512 @@ -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 -- 2.30.2