123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- #! /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. Run it with the `--help` option for more information.
- #
- # (C) 2010-2021 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/.
- 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.2.1.tar.bz2'
- mpfr='mpfr-4.1.0.tar.bz2'
- mpc='mpc-1.2.1.tar.gz'
- isl='isl-0.24.tar.bz2'
- base_url='http://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
- OS=$(uname)
- if type wget > /dev/null ; then
- fetch='wget'
- else
- fetch='curl -LO'
- fi
- chksum_extension='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
- "
- versiontext="${program} ${version}
- Copyright (C) 2016-2021 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
- # Emulate Linux's 'md5sum --check' on macOS
- md5_check() {
- # Store the standard input: a line from contrib/prerequisites.md5:
- md5_checksum_line=$(cat -)
- # Grab the text before the first space
- md5_checksum_expected="${md5_checksum_line%% *}"
- # Grab the text after the first space
- file_to_check="${md5_checksum_line##* }"
- # Calculate the md5 checksum for the downloaded file
- md5_checksum_output=$(md5 -r "${file_to_check}")
- # Grab the text before the first space
- md5_checksum_detected="${md5_checksum_output%% *}"
- [ "${md5_checksum_expected}" = "${md5_checksum_detected}" ] \
- || die "Cannot verify integrity of possibly corrupted file ${file_to_check}"
- echo "${file_to_check}: OK"
- }
- 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_extension='sha512'
- verify=1
- ;;
- --md5)
- chksum_extension='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
- case $chksum_extension in
- sha512)
- case $OS in
- "Darwin"|"FreeBSD"|"DragonFly"|"AIX")
- chksum='shasum -a 512 --check'
- ;;
- "OpenBSD")
- chksum='sha512 -c'
- ;;
- *)
- chksum='sha512sum -c'
- ;;
- esac
- ;;
- md5)
- case $OS in
- "Darwin")
- chksum='md5_check'
- ;;
- *)
- chksum='md5sum -c'
- ;;
- esac
- ;;
- *)
- die "Unkown checksum $chksum_extension"
- ;;
- esac
- [ -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}" ] \
- || ( cd "${directory}" && ${fetch} --no-verbose "${base_url}${ar}" ) \
- || die "Cannot download ${ar} from ${base_url}"
- done
- unset ar
- if [ ${verify} -gt 0 ]
- then
- chksumfile="contrib/prerequisites.${chksum_extension}"
- [ -r "${chksumfile}" ] || die "No checksums available"
- for ar in $(echo_archives)
- do
- grep "${ar}" "${chksumfile}" \
- | ( cd "${directory}" && ${chksum} ) \
- || 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
- case $ar in
- *.gz)
- uncompress='gzip -d'
- ;;
- *.bz2)
- uncompress='bzip2 -d'
- ;;
- *)
- uncompress='cat'
- ;;
- esac
- [ -e "${directory}/${package}" ] \
- || ( cd "${directory}" && $uncompress <"${ar}" | tar -xf - ) \
- || 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."
|