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