aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Klammler <moritz@glammler.eu>2016-10-24 16:05:48 +0000
committerJeff Law <law@gcc.gnu.org>2016-10-24 10:05:48 -0600
commit38000825cd37c3f132cd02edc4e8eb79aff4d3a6 (patch)
tree3c268f73fca0044d8b348b9a51e88e3580171964
parentd168c883c5794b57adfb272e9fec9ee8df974832 (diff)
downloadgcc-38000825cd37c3f132cd02edc4e8eb79aff4d3a6.zip
gcc-38000825cd37c3f132cd02edc4e8eb79aff4d3a6.tar.gz
gcc-38000825cd37c3f132cd02edc4e8eb79aff4d3a6.tar.bz2
download_prerequisites: Conditionally verify checksums of downloaded pacakges.
2016-10-24 Moritz Klammler <moritz@glammler.eu> * download_prerequisites: Conditionally verify checksums of downloaded pacakges. Add help text. * prerequisites.md5: New file. * prerequisites.sha512: New file. From-SVN: r241483
-rw-r--r--contrib/ChangeLog7
-rwxr-xr-xcontrib/download_prerequisites233
-rw-r--r--contrib/prerequisites.md54
-rw-r--r--contrib/prerequisites.sha5124
4 files changed, 209 insertions, 39 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 1b6939a..ab5ae3b 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-24 Moritz Klammler <moritz@glammler.eu>
+
+ * download_prerequisites: Conditionally verify checksums of
+ downloaded pacakges. Add help text.
+ * prerequisites.md5: New file.
+ * prerequisites.sha512: New file.
+
2016-10-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* check_GNU_style.sh (remove_testsuite): New function.
diff --git a/contrib/download_prerequisites b/contrib/download_prerequisites
index 2c963f2..a9eac67 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 0000000..b8e89d4
--- /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 0000000..8089707
--- /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