# GNU C Compiler
# Required to use a "known good version" of the compiler or to support languages different than C or C++
[buildout]
extends =
  ../gettext/buildout.cfg
  ../gmp/buildout.cfg
  ../patch/buildout.cfg
  ../perl/buildout.cfg
  ../tar/buildout.cfg
  ../binutils/buildout.cfg

parts =
  gcc-8.2

[gcc-common]
recipe = slapos.recipe.cmmi
shared = true
url = http://ftp.gnu.org/gnu/gcc/gcc-${:version}/gcc-${:version}.tar.xz
pre-configure =
  set %(location)s/bin
  mkdir -p $1
  ln -s ${binutils:location}/bin/ld $1/ld
# remove "dependency_libs=' -lz'" line  (-lz not needed anymore because the internal zlib was used)
  sed -i '/^libbacktrace\.la:/{ N; s,$,\n\tsed -i /^dependency_libs=/d $@,; }' libbacktrace/Makefile.in
configure-options =
  --disable-bootstrap
  --disable-multilib
  --with-gmp=${gmp:location}
  --with-mpfr=${mpfr:location}
  --with-mpc=${mpc:location}
  --enable-languages="c,c++,fortran"
  --with-isl=${isl:location}
  --with-ld=@@LOCATION@@/bin/ld
  --with-as=${binutils:location}/bin/as
  --with-internal-zlib
post-install =
  cd '%(location)s/bin'
  ln -s gcc cc
  rm ld
  for x in `for x in %(location)s/lib*/*.so; do echo $${x%%/*}; done |sort -u`
  do set $1:$x "$2 -rpath=$x"
  done
  cat <<EOF >ld
  #!/bin/sh -e
  case \$#:\$1 in 0:|1:-*) ;; *)
    if [ "\$LD_RUN_PATH" ]
    then LD_RUN_PATH=\$LD_RUN_PATH$1
    else set -- "\$@" $2
    fi
    ;;
  esac
  exec ${binutils:location}/bin/ld "\$@"
  EOF
  chmod +x ld
environment =
  LDFLAGS=-Wl,-rpath=${gmp:location}/lib -Wl,-rpath=${isl:location}/lib -Wl,-rpath=${mpc:location}/lib -Wl,-rpath=${mpfr:location}/lib
  PATH=${binutils:location}/bin:${gettext:location}/bin:${perl:location}/bin:${tar:location}/bin:%(PATH)s

[gcc-5.5]
<= gcc-common
version = 5.5.0
md5sum = 0f70424213b4a1113c04ba66ddda0c1f
# make install does not work when several core are used
make-targets = install -j1
patch-binary = ${patch:location}/bin/patch
patch-options = -p1
patches =
  ${:_profile_base_location_}/libsanitizer_Use_pre-computed_size_of_struct_ustat_for_Linux.patch#1e5f33e89f9fe1ca3e406eabcc621762

[gcc-8.2]
<= gcc-common
version = 8.2.0
md5sum = 4ab282f414676496483b3e1793d07862
patch-binary = ${patch:location}/bin/patch
patch-options = -p1
# glibc-2.31-libsanitizer comes from https://github.com/spack/spack/pull/15403
patches =
  ${:_profile_base_location_}/glibc-2.31-libsanitizer-1.patch
  ${:_profile_base_location_}/glibc-2.31-libsanitizer-2.patch

[gcc-minimal]
<= gcc-5.5
configure-options =
  --disable-bootstrap
  --disable-multilib
  --with-gmp=${gmp:location}
  --with-mpfr=${mpfr:location}
  --with-mpc=${mpc:location}
  --enable-languages=c
  --without-isl
  --without-cloog
environment =
  LDFLAGS=-Wl,-rpath=${gmp:location}/lib -Wl,-rpath=${mpc:location}/lib -Wl,-rpath=${mpfr:location}/lib
  PATH=${perl:location}/bin:${tar:location}/bin:%(PATH)s