Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions cmake/Components.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,24 @@ include_guard(GLOBAL)
# hashes together so version updates cannot accidentally mix artifacts.
set(GCC_VERSION 15.2.0)
set(GCC_HASH SHA256=438fd996826b0c82485a29da03a72d71d6e3541a83ec702df4271f6fe025d24e)
# Everything below that GNU hosts is named twice: ftpmirror.gnu.org first,
# which is GNU's own redirector to a nearby mirror, and ftp.gnu.org after it.
# ExternalProject tries them in order and URL_HASH decides whether what came
# back is the right bytes, so a mirror serving something else fails the same
# way a corrupt download does.
# Everything below that GNU hosts is named three times, tried in order:
# mirrors.kernel.org, then ftpmirror.gnu.org, then ftp.gnu.org. URL_HASH
# decides whether what came back is the right bytes, so a mirror serving
# something else fails the way a corrupt download does.
#
# One host was one host too few. ftp.gnu.org refused connections for over two
# minutes at a time through 26 and 27 August, and each time it took a whole
# build with it -- six components come from there, and gdb is downloaded by
# every host.
#
# Two was also too few, for a different reason: ftpmirror.gnu.org is a
# redirector to whichever mirror is near, and the one it picked answered with
# an HTTP error. A named mirror goes first because it is the same host every
# time and can be seen to work; the redirector stays behind it as the thing
# that keeps working when that host does not.

set(GCC_URL
https://mirrors.kernel.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz
https://ftpmirror.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz
https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz)

Expand All @@ -34,18 +40,21 @@ set(LIBYAML_URL https://pyyaml.org/download/libyaml/yaml-${LIBYAML_VERSION}.tar.
set(GMP_VERSION 6.3.0)
set(GMP_HASH SHA256=ac28211a7cfb609bae2e2c8d6058d66c8fe96434f740cf6fe2e47b000d1c20cb)
set(GMP_URL
https://mirrors.kernel.org/gnu/gmp/gmp-${GMP_VERSION}.tar.bz2
https://ftpmirror.gnu.org/gnu/gmp/gmp-${GMP_VERSION}.tar.bz2
https://ftp.gnu.org/gnu/gmp/gmp-${GMP_VERSION}.tar.bz2)

set(MPFR_VERSION 4.2.2)
set(MPFR_HASH SHA256=9ad62c7dc910303cd384ff8f1f4767a655124980bb6d8650fe62c815a231bb7b)
set(MPFR_URL
https://mirrors.kernel.org/gnu/mpfr/mpfr-${MPFR_VERSION}.tar.bz2
https://ftpmirror.gnu.org/gnu/mpfr/mpfr-${MPFR_VERSION}.tar.bz2
https://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_VERSION}.tar.bz2)

set(MPC_VERSION 1.3.1)
set(MPC_HASH SHA256=ab642492f5cf882b74aa0cb730cd410a81edcdbec895183ce930e706c1c759b8)
set(MPC_URL
https://mirrors.kernel.org/gnu/mpc/mpc-${MPC_VERSION}.tar.gz
https://ftpmirror.gnu.org/gnu/mpc/mpc-${MPC_VERSION}.tar.gz
https://ftp.gnu.org/gnu/mpc/mpc-${MPC_VERSION}.tar.gz)

Expand All @@ -61,12 +70,14 @@ set(EXPAT_URL https://github.com/libexpat/libexpat/releases/download/R_2_3_0/exp
set(BINUTILS_VERSION 2.46.1)
set(BINUTILS_HASH SHA256=e127a709cba24c76de8936cb7083dd768f28cd37eb010492e2f19b71eb1294e4)
set(BINUTILS_URL
https://mirrors.kernel.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz
https://ftpmirror.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz
https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz)

set(GDB_VERSION 15.2)
set(GDB_HASH SHA256=83350ccd35b5b5a0cba6b334c41294ea968158c573940904f00b92f76345314d)
set(GDB_URL
https://mirrors.kernel.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz
https://ftpmirror.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz
https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz)

Expand Down
16 changes: 12 additions & 4 deletions tests/cmake/gnu-download-mirror.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,22 @@ include("${repository_root}/cmake/Components.cmake")
foreach(component GCC GMP MPFR MPC BINUTILS GDB)
set(urls "${${component}_URL}")
list(LENGTH urls count)
if(count LESS 2)
if(count LESS 3)
message(SEND_ERROR
"FAIL: ${component}_URL names one host; an outage there is a failed build")
"FAIL: ${component}_URL names ${count} host(s); two outages in a row is a "
"failed build, and both happened on 27 August")
endif()
# ftp.gnu.org is the one that went down, so it is the last resort and not
# the first thing tried.
list(GET urls 0 first)
if(NOT first MATCHES "^https://ftpmirror\\.gnu\\.org/")
if(first MATCHES "^https://ftp\\.gnu\\.org/")
message(SEND_ERROR
"FAIL: ${component}_URL does not try GNU's mirror redirector first: ${first}")
"FAIL: ${component}_URL tries ftp.gnu.org first")
endif()
list(GET urls -1 last)
if(NOT last MATCHES "^https://ftp\\.gnu\\.org/")
message(SEND_ERROR
"FAIL: ${component}_URL does not keep ftp.gnu.org as the last resort: ${last}")
endif()
# And the hash, without which a mirror is somebody else's word for it.
if(NOT DEFINED ${component}_HASH)
Expand Down
Loading