From ccc4dea90e483ea8bf6bee0721ef929e7f48ff5a Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 13 Dec 2017 13:36:54 +0800 Subject: [PATCH] install-deps.sh: point gcc to the one shipped by distro to define a struct in a method is legal in C++11, but it causes internal compiler error due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82155 if we are using GCC-7. so we need to either workaround in our source code by moving the struct definition out of the member method or revert to a GCC without this bug. but if we go with the first route, the jewel build still fails, because GCC-7 starts to use the new CXX11 ABI, which is not compatible with the libboost we use in jewel. the libboost was still built with the old ABI for backward compatibility. so let's just fix the install-deps.sh to point gcc to the origin one. See: http://tracker.ceph.com/issues/22220 Signed-off-by: Kefu Chai Conflicts: the libboost issue does not affect master. as master builds boost from source. so, it's not cherry-picked from master. --- install-deps.sh | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/install-deps.sh b/install-deps.sh index 94def86e6dd5b..0b36c6bd13e59 100755 --- a/install-deps.sh +++ b/install-deps.sh @@ -19,12 +19,52 @@ if test $(id -u) != 0 ; then fi export LC_ALL=C # the following is vulnerable to i18n +function ensure_decent_gcc_on_deb { + # point gcc to the one offered by distro if the used one is different + local old=$(readlink -e /usr/bin/x86_64-linux-gnu-gcc | cut -d'-' -f2) + local new=$1 + if dpkg --compare-versions $old eq $new; then + return + fi + + case $- in + *i*) + # interactive shell + cat <