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.10 mrg # (C) 2010-2021 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.10 mrg gmp='gmp-6.2.1.tar.bz2' 31 1.10 mrg mpfr='mpfr-4.1.0.tar.bz2' 32 1.10 mrg mpc='mpc-1.2.1.tar.gz' 33 1.10 mrg isl='isl-0.24.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 if type wget > /dev/null ; then 50 1.6 mrg fetch='wget' 51 1.6 mrg else 52 1.9 mrg fetch='curl -LO' 53 1.3 mrg fi 54 1.6 mrg chksum_extension='sha512' 55 1.6 mrg directory='.' 56 1.6 mrg 57 1.6 mrg helptext="usage: ${program} [OPTION...] 58 1.6 mrg 59 1.6 mrg Downloads some prerequisites needed by GCC. Run this from the top level of the 60 1.6 mrg GCC source tree and the GCC build will do the right thing. 61 1.6 mrg 62 1.6 mrg The following options are available: 63 1.6 mrg 64 1.6 mrg --directory=DIR download and unpack packages into DIR instead of '.' 65 1.6 mrg --force download again overwriting existing packages 66 1.6 mrg --no-force do not download existing packages again (default) 67 1.6 mrg --isl download ISL, needed for Graphite loop optimizations (default) 68 1.6 mrg --graphite same as --isl 69 1.6 mrg --no-isl don't download ISL 70 1.6 mrg --no-graphite same as --no-isl 71 1.6 mrg --verify verify package integrity after download (default) 72 1.6 mrg --no-verify don't verify package integrity 73 1.6 mrg --sha512 use SHA512 checksum to verify package integrity (default) 74 1.6 mrg --md5 use MD5 checksum to verify package integrity 75 1.6 mrg --help show this text and exit 76 1.6 mrg --version show version information and exit 77 1.6 mrg " 78 1.6 mrg 79 1.6 mrg versiontext="${program} ${version} 80 1.10 mrg Copyright (C) 2016-2021 Free Software Foundation, Inc. 81 1.6 mrg This is free software; see the source for copying conditions. There is NO 82 1.6 mrg warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 83 1.3 mrg 84 1.6 mrg die() { 85 1.6 mrg echo "error: $@" >&2 86 1.6 mrg exit 1 87 1.6 mrg } 88 1.6 mrg 89 1.6 mrg for arg in "$@" 90 1.6 mrg do 91 1.6 mrg case "${arg}" in 92 1.6 mrg --help) 93 1.6 mrg echo "${helptext}" 94 1.6 mrg exit 95 1.6 mrg ;; 96 1.6 mrg --version) 97 1.6 mrg echo "${versiontext}" 98 1.6 mrg exit 99 1.6 mrg ;; 100 1.6 mrg esac 101 1.6 mrg done 102 1.6 mrg unset arg 103 1.6 mrg 104 1.10 mrg # Emulate Linux's 'md5sum --check' on macOS 105 1.6 mrg md5_check() { 106 1.6 mrg # Store the standard input: a line from contrib/prerequisites.md5: 107 1.6 mrg md5_checksum_line=$(cat -) 108 1.6 mrg # Grab the text before the first space 109 1.6 mrg md5_checksum_expected="${md5_checksum_line%% *}" 110 1.6 mrg # Grab the text after the first space 111 1.6 mrg file_to_check="${md5_checksum_line##* }" 112 1.6 mrg # Calculate the md5 checksum for the downloaded file 113 1.6 mrg md5_checksum_output=$(md5 -r "${file_to_check}") 114 1.6 mrg # Grab the text before the first space 115 1.6 mrg md5_checksum_detected="${md5_checksum_output%% *}" 116 1.10 mrg [ "${md5_checksum_expected}" = "${md5_checksum_detected}" ] \ 117 1.6 mrg || die "Cannot verify integrity of possibly corrupted file ${file_to_check}" 118 1.6 mrg echo "${file_to_check}: OK" 119 1.6 mrg } 120 1.6 mrg 121 1.6 mrg 122 1.6 mrg argnext= 123 1.6 mrg for arg in "$@" 124 1.6 mrg do 125 1.6 mrg if [ "x${argnext}" = x ] 126 1.6 mrg then 127 1.6 mrg case "${arg}" in 128 1.6 mrg --directory) 129 1.6 mrg argnext='directory' 130 1.6 mrg ;; 131 1.6 mrg --directory=*) 132 1.6 mrg directory="${arg#--directory=}" 133 1.6 mrg ;; 134 1.6 mrg --force) 135 1.6 mrg force=1 136 1.6 mrg ;; 137 1.6 mrg --no-force) 138 1.6 mrg force=0 139 1.6 mrg ;; 140 1.6 mrg --isl|--graphite) 141 1.6 mrg graphite=1 142 1.6 mrg ;; 143 1.6 mrg --no-isl|--no-graphite) 144 1.6 mrg graphite=0 145 1.6 mrg ;; 146 1.6 mrg --verify) 147 1.6 mrg verify=1 148 1.6 mrg ;; 149 1.6 mrg --no-verify) 150 1.6 mrg verify=0 151 1.6 mrg ;; 152 1.6 mrg --sha512) 153 1.6 mrg chksum_extension='sha512' 154 1.6 mrg verify=1 155 1.6 mrg ;; 156 1.6 mrg --md5) 157 1.6 mrg chksum_extension='md5' 158 1.6 mrg verify=1 159 1.6 mrg ;; 160 1.6 mrg -*) 161 1.6 mrg die "unknown option: ${arg}" 162 1.6 mrg ;; 163 1.6 mrg *) 164 1.6 mrg die "too many arguments" 165 1.6 mrg ;; 166 1.6 mrg esac 167 1.6 mrg else 168 1.6 mrg case "${arg}" in 169 1.6 mrg -*) 170 1.6 mrg die "Missing argument for option --${argnext}" 171 1.6 mrg ;; 172 1.6 mrg esac 173 1.6 mrg case "${argnext}" in 174 1.6 mrg directory) 175 1.6 mrg directory="${arg}" 176 1.6 mrg ;; 177 1.6 mrg *) 178 1.6 mrg die "The impossible has happened" 179 1.6 mrg ;; 180 1.6 mrg esac 181 1.6 mrg argnext= 182 1.6 mrg fi 183 1.6 mrg done 184 1.6 mrg [ "x${argnext}" = x ] || die "Missing argument for option --${argnext}" 185 1.6 mrg unset arg argnext 186 1.6 mrg 187 1.10 mrg case $chksum_extension in 188 1.10 mrg sha512) 189 1.10 mrg case $OS in 190 1.10 mrg "Darwin"|"FreeBSD"|"DragonFly"|"AIX") 191 1.10 mrg chksum='shasum -a 512 --check' 192 1.10 mrg ;; 193 1.10 mrg "OpenBSD") 194 1.10 mrg chksum='sha512 -c' 195 1.10 mrg ;; 196 1.10 mrg *) 197 1.10 mrg chksum='sha512sum -c' 198 1.10 mrg ;; 199 1.10 mrg esac 200 1.10 mrg ;; 201 1.10 mrg md5) 202 1.10 mrg case $OS in 203 1.10 mrg "Darwin") 204 1.10 mrg chksum='md5_check' 205 1.10 mrg ;; 206 1.10 mrg *) 207 1.10 mrg chksum='md5sum -c' 208 1.10 mrg ;; 209 1.10 mrg esac 210 1.10 mrg ;; 211 1.10 mrg *) 212 1.10 mrg die "Unkown checksum $chksum_extension" 213 1.10 mrg ;; 214 1.10 mrg esac 215 1.10 mrg 216 1.6 mrg [ -e ./gcc/BASE-VER ] \ 217 1.6 mrg || die "You must run this script in the top-level GCC source directory" 218 1.6 mrg 219 1.6 mrg [ -d "${directory}" ] \ 220 1.6 mrg || die "No such directory: ${directory}" 221 1.6 mrg 222 1.6 mrg for ar in $(echo_archives) 223 1.6 mrg do 224 1.6 mrg if [ ${force} -gt 0 ]; then rm -f "${directory}/${ar}"; fi 225 1.6 mrg [ -e "${directory}/${ar}" ] \ 226 1.10 mrg || ( cd "${directory}" && ${fetch} --no-verbose "${base_url}${ar}" ) \ 227 1.6 mrg || die "Cannot download ${ar} from ${base_url}" 228 1.6 mrg done 229 1.6 mrg unset ar 230 1.6 mrg 231 1.6 mrg if [ ${verify} -gt 0 ] 232 1.6 mrg then 233 1.6 mrg chksumfile="contrib/prerequisites.${chksum_extension}" 234 1.6 mrg [ -r "${chksumfile}" ] || die "No checksums available" 235 1.6 mrg for ar in $(echo_archives) 236 1.6 mrg do 237 1.6 mrg grep "${ar}" "${chksumfile}" \ 238 1.6 mrg | ( cd "${directory}" && ${chksum} ) \ 239 1.6 mrg || die "Cannot verify integrity of possibly corrupted file ${ar}" 240 1.6 mrg done 241 1.6 mrg unset chksumfile 242 1.3 mrg fi 243 1.6 mrg unset ar 244 1.6 mrg 245 1.6 mrg for ar in $(echo_archives) 246 1.6 mrg do 247 1.6 mrg package="${ar%.tar*}" 248 1.6 mrg if [ ${force} -gt 0 ]; then rm -rf "${directory}/${package}"; fi 249 1.10 mrg case $ar in 250 1.10 mrg *.gz) 251 1.10 mrg uncompress='gzip -d' 252 1.10 mrg ;; 253 1.10 mrg *.bz2) 254 1.10 mrg uncompress='bzip2 -d' 255 1.10 mrg ;; 256 1.10 mrg *) 257 1.10 mrg uncompress='cat' 258 1.10 mrg ;; 259 1.10 mrg esac 260 1.6 mrg [ -e "${directory}/${package}" ] \ 261 1.10 mrg || ( cd "${directory}" && $uncompress <"${ar}" | tar -xf - ) \ 262 1.6 mrg || die "Cannot extract package from ${ar}" 263 1.6 mrg unset package 264 1.6 mrg done 265 1.6 mrg unset ar 266 1.6 mrg 267 1.6 mrg for ar in $(echo_archives) 268 1.6 mrg do 269 1.6 mrg target="${directory}/${ar%.tar*}/" 270 1.6 mrg linkname="${ar%-*}" 271 1.6 mrg if [ ${force} -gt 0 ]; then rm -f "${linkname}"; fi 272 1.6 mrg [ -e "${linkname}" ] \ 273 1.6 mrg || ln -s "${target}" "${linkname}" \ 274 1.6 mrg || die "Cannot create symbolic link ${linkname} --> ${target}" 275 1.6 mrg unset target linkname 276 1.6 mrg done 277 1.6 mrg unset ar 278 1.6 mrg 279 1.6 mrg echo "All prerequisites downloaded successfully." 280