From: Kefu Chai Date: Wed, 13 Dec 2017 05:36:54 +0000 (+0800) Subject: install-deps.sh: point gcc to the one shipped by distro X-Git-Tag: v12.2.3~237^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2d377d351120d06382ae303e10a330de143f0a85;p=ceph.git 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. (cherry picked from commit ccc4dea90e483ea8bf6bee0721ef929e7f48ff5a) --- diff --git a/install-deps.sh b/install-deps.sh index bb10f9a753a1..14d0470c13d1 100755 --- a/install-deps.sh +++ b/install-deps.sh @@ -24,6 +24,34 @@ function munge_ceph_spec_in { sed -e 's/@//g' -e 's/%bcond_with make_check/%bcond_without make_check/g' < ceph.spec.in > $OUTFILE } +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 + + cat <