1 1.1 mrg #! /bin/sh 2 1.6 mrg #! -*- coding:utf-8; mode:shell-script; -*- 3 1.1 mrg 4 1.6 mrg # Download some prerequisites needed by GCC. 5 1.6 mrg # Run this from the top level of the GCC source tree and the GCC build will do 6 1.6 mrg # the right thing. Run it with the `--help` option for more information. 7 1.1 mrg # 8 1.6 mrg # (C) 2010-2016 Free Software Foundation 9 1.1 mrg # 10 1.1 mrg # This program is free software: you can redistribute it and/or modify 11 1.1 mrg # it under the terms of the GNU General Public License as published by 12 1.1 mrg # the Free Software Foundation, either version 3 of the License, or 13 1.1 mrg # (at your option) any later version. 14 1.1 mrg # 15 1.1 mrg # This program is distributed in the hope that it will be useful, but 16 1.1 mrg # WITHOUT ANY WARRANTY; without even the implied warranty of 17 1.1 mrg # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 1.1 mrg # General Public License for more details. 19 1.1 mrg # 20 1.1 mrg # You should have received a copy of the GNU General Public License 21 1.1 mrg # along with this program. If not, see http://www.gnu.org/licenses/. 22 1.1 mrg 23 1.6 mrg program='download_prerequisites' 24 1.6 mrg version='(unversioned)' 25 1.6 mrg 26 1.6 mrg # MAINTAINERS: If you update the package versions below, please 27 1.6 mrg # remember to also update the files `contrib/prerequisites.sha512` and 28 1.6 mrg # `contrib/prerequisites.md5` with the new checksums. 29 1.6 mrg 30 1.6 mrg gmp='gmp-6.1.0.tar.bz2' 31 1.9 mrg mpfr='mpfr-3.1.6.tar.bz2' 32 1.6 mrg mpc='mpc-1.0.3.tar.gz' 33 1.7 mrg isl='isl-0.18.tar.bz2' 34 1.6 mrg 35 1.9 mrg base_url='http://gcc.gnu.org/pub/gcc/infrastructure/' 36 1.6 mrg 37 1.6 mrg echo_archives() { 38 1.6 mrg echo "${gmp}" 39 1.6 mrg echo "${mpfr}" 40 1.6 mrg echo "${mpc}" 41 1.6 mrg if [ ${graphite} -gt 0 ]; then echo "${isl}"; fi 42 1.6 mrg } 43 1.6 mrg 44 1.6 mrg graphite=1 45 1.6 mrg verify=1 46 1.6 mrg force=0 47 1.6 mrg OS=$(uname) 48 1.6 mrg 49 1.6 mrg case $OS in 50 1.7 mrg "Darwin"|"FreeBSD"|"DragonFly") 51 1.6 mrg chksum='shasum -a 512 --check' 52 1.6 mrg ;; 53 1.6 mrg *) 54 1.8 mrg chksum='sha512sum -c' 55 1.6 mrg ;; 56 1.6 mrg esac 57 1.6 mrg 58 1.6 mrg if type wget > /dev/null ; then 59 1.6 mrg fetch='wget' 60 1.6 mrg else 61 1.9 mrg fetch='curl -LO' 62 1.3 mrg fi 63 1.6 mrg chksum_extension='sha512' 64 1.6 mrg directory='.' 65 1.6 mrg 66 1.6 mrg helptext="usage: ${program} [OPTION...] 67 1.6 mrg 68 1.6 mrg Downloads some prerequisites needed by GCC. Run this from the top level of the 69 1.6 mrg GCC source tree and the GCC build will do the right thing. 70 1.6 mrg 71 1.6 mrg The following options are available: 72 1.6 mrg 73 1.6 mrg --directory=DIR download and unpack packages into DIR instead of '.' 74 1.6 mrg --force download again overwriting existing packages 75 1.6 mrg --no-force do not download existing packages again (default) 76 1.6 mrg --isl download ISL, needed for Graphite loop optimizations (default) 77 1.6 mrg --graphite same as --isl 78 1.6 mrg --no-isl don't download ISL 79 1.6 mrg --no-graphite same as --no-isl 80 1.6 mrg --verify verify package integrity after download (default) 81 1.6 mrg --no-verify don't verify package integrity 82 1.6 mrg --sha512 use SHA512 checksum to verify package integrity (default) 83 1.6 mrg --md5 use MD5 checksum to verify package integrity 84 1.6 mrg --help show this text and exit 85 1.6 mrg --version show version information and exit 86 1.6 mrg " 87 1.6 mrg 88 1.6 mrg versiontext="${program} ${version} 89 1.6 mrg Copyright (C) 2016 Free Software Foundation, Inc. 90 1.6 mrg This is free software; see the source for copying conditions. There is NO 91 1.6 mrg warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 92 1.3 mrg 93 1.6 mrg die() { 94 1.6 mrg echo "error: $@" >&2 95 1.6 mrg exit 1 96 1.6 mrg } 97 1.6 mrg 98 1.6 mrg for arg in "$@" 99 1.6 mrg do 100 1.6 mrg case "${arg}" in 101 1.6 mrg --help) 102 1.6 mrg echo "${helptext}" 103 1.6 mrg exit 104 1.6 mrg ;; 105 1.6 mrg --version) 106 1.6 mrg echo "${versiontext}" 107 1.6 mrg exit 108 1.6 mrg ;; 109 1.6 mrg esac 110 1.6 mrg done 111 1.6 mrg unset arg 112 1.6 mrg 113 1.6 mrg # Emulate Linux's 'md5 --check' on macOS 114 1.6 mrg md5_check() { 115 1.6 mrg # Store the standard input: a line from contrib/prerequisites.md5: 116 1.6 mrg md5_checksum_line=$(cat -) 117 1.6 mrg # Grab the text before the first space 118 1.6 mrg md5_checksum_expected="${md5_checksum_line%% *}" 119 1.6 mrg # Grab the text after the first space 120 1.6 mrg file_to_check="${md5_checksum_line##* }" 121 1.6 mrg # Calculate the md5 checksum for the downloaded file 122 1.6 mrg md5_checksum_output=$(md5 -r "${file_to_check}") 123 1.6 mrg # Grab the text before the first space 124 1.6 mrg md5_checksum_detected="${md5_checksum_output%% *}" 125 1.6 mrg [ "${md5_checksum_expected}" == "${md5_checksum_detected}" ] \ 126 1.6 mrg || die "Cannot verify integrity of possibly corrupted file ${file_to_check}" 127 1.6 mrg echo "${file_to_check}: OK" 128 1.6 mrg } 129 1.6 mrg 130 1.6 mrg 131 1.6 mrg argnext= 132 1.6 mrg for arg in "$@" 133 1.6 mrg do 134 1.6 mrg if [ "x${argnext}" = x ] 135 1.6 mrg then 136 1.6 mrg case "${arg}" in 137 1.6 mrg --directory) 138 1.6 mrg argnext='directory' 139 1.6 mrg ;; 140 1.6 mrg --directory=*) 141 1.6 mrg directory="${arg#--directory=}" 142 1.6 mrg ;; 143 1.6 mrg --force) 144 1.6 mrg force=1 145 1.6 mrg ;; 146 1.6 mrg --no-force) 147 1.6 mrg force=0 148 1.6 mrg ;; 149 1.6 mrg --isl|--graphite) 150 1.6 mrg graphite=1 151 1.6 mrg ;; 152 1.6 mrg --no-isl|--no-graphite) 153 1.6 mrg graphite=0 154 1.6 mrg ;; 155 1.6 mrg --verify) 156 1.6 mrg verify=1 157 1.6 mrg ;; 158 1.6 mrg --no-verify) 159 1.6 mrg verify=0 160 1.6 mrg ;; 161 1.6 mrg --sha512) 162 1.6 mrg case $OS in 163 1.6 mrg "Darwin") 164 1.6 mrg chksum='shasum -a 512 --check' 165 1.6 mrg ;; 166 1.6 mrg *) 167 1.6 mrg chksum='sha512sum --check' 168 1.6 mrg ;; 169 1.6 mrg esac 170 1.6 mrg chksum_extension='sha512' 171 1.6 mrg verify=1 172 1.6 mrg ;; 173 1.6 mrg --md5) 174 1.6 mrg case $OS in 175 1.6 mrg "Darwin") 176 1.6 mrg chksum='md5_check' 177 1.6 mrg ;; 178 1.6 mrg *) 179 1.6 mrg chksum='md5 --check' 180 1.6 mrg ;; 181 1.6 mrg esac 182 1.6 mrg chksum_extension='md5' 183 1.6 mrg verify=1 184 1.6 mrg ;; 185 1.6 mrg -*) 186 1.6 mrg die "unknown option: ${arg}" 187 1.6 mrg ;; 188 1.6 mrg *) 189 1.6 mrg die "too many arguments" 190 1.6 mrg ;; 191 1.6 mrg esac 192 1.6 mrg else 193 1.6 mrg case "${arg}" in 194 1.6 mrg -*) 195 1.6 mrg die "Missing argument for option --${argnext}" 196 1.6 mrg ;; 197 1.6 mrg esac 198 1.6 mrg case "${argnext}" in 199 1.6 mrg directory) 200 1.6 mrg directory="${arg}" 201 1.6 mrg ;; 202 1.6 mrg *) 203 1.6 mrg die "The impossible has happened" 204 1.6 mrg ;; 205 1.6 mrg esac 206 1.6 mrg argnext= 207 1.6 mrg fi 208 1.6 mrg done 209 1.6 mrg [ "x${argnext}" = x ] || die "Missing argument for option --${argnext}" 210 1.6 mrg unset arg argnext 211 1.6 mrg 212 1.6 mrg [ -e ./gcc/BASE-VER ] \ 213 1.6 mrg || die "You must run this script in the top-level GCC source directory" 214 1.6 mrg 215 1.6 mrg [ -d "${directory}" ] \ 216 1.6 mrg || die "No such directory: ${directory}" 217 1.6 mrg 218 1.6 mrg for ar in $(echo_archives) 219 1.6 mrg do 220 1.6 mrg if [ ${force} -gt 0 ]; then rm -f "${directory}/${ar}"; fi 221 1.6 mrg [ -e "${directory}/${ar}" ] \ 222 1.6 mrg || ${fetch} --no-verbose -O "${directory}/${ar}" "${base_url}${ar}" \ 223 1.6 mrg || die "Cannot download ${ar} from ${base_url}" 224 1.6 mrg done 225 1.6 mrg unset ar 226 1.6 mrg 227 1.6 mrg if [ ${verify} -gt 0 ] 228 1.6 mrg then 229 1.6 mrg chksumfile="contrib/prerequisites.${chksum_extension}" 230 1.6 mrg [ -r "${chksumfile}" ] || die "No checksums available" 231 1.6 mrg for ar in $(echo_archives) 232 1.6 mrg do 233 1.6 mrg grep "${ar}" "${chksumfile}" \ 234 1.6 mrg | ( cd "${directory}" && ${chksum} ) \ 235 1.6 mrg || die "Cannot verify integrity of possibly corrupted file ${ar}" 236 1.6 mrg done 237 1.6 mrg unset chksumfile 238 1.3 mrg fi 239 1.6 mrg unset ar 240 1.6 mrg 241 1.6 mrg for ar in $(echo_archives) 242 1.6 mrg do 243 1.6 mrg package="${ar%.tar*}" 244 1.6 mrg if [ ${force} -gt 0 ]; then rm -rf "${directory}/${package}"; fi 245 1.6 mrg [ -e "${directory}/${package}" ] \ 246 1.6 mrg || ( cd "${directory}" && tar -xf "${ar}" ) \ 247 1.6 mrg || die "Cannot extract package from ${ar}" 248 1.6 mrg unset package 249 1.6 mrg done 250 1.6 mrg unset ar 251 1.6 mrg 252 1.6 mrg for ar in $(echo_archives) 253 1.6 mrg do 254 1.6 mrg target="${directory}/${ar%.tar*}/" 255 1.6 mrg linkname="${ar%-*}" 256 1.6 mrg if [ ${force} -gt 0 ]; then rm -f "${linkname}"; fi 257 1.6 mrg [ -e "${linkname}" ] \ 258 1.6 mrg || ln -s "${target}" "${linkname}" \ 259 1.6 mrg || die "Cannot create symbolic link ${linkname} --> ${target}" 260 1.6 mrg unset target linkname 261 1.6 mrg done 262 1.6 mrg unset ar 263 1.6 mrg 264 1.6 mrg echo "All prerequisites downloaded successfully." 265