fails to build: SIGSTKSZ is not an integral constant with libc6 2.34

Issue #1125 resolved
Drew Parsons created an issue

Ubuntu 21.10 (impish) installed libc6 (glibc) 2.34, which introduced a major ABI change. SIGSTKSZ is now no longer constant, and can’t be used directly to define array sizes. It affects tests using doctest, or in the case of dolfin, catch 1.9.

A failed build log on the FEniCS PPA is at https://launchpadlibrarian.net/579522949/buildlog_ubuntu-impish-amd64.dolfin_2019.2.0~git20210928.3eacdb4-3~fenics1~impish3_BUILDING.txt.gz

The error is

[ 94%] Building CXX object test/unit/cpp/CMakeFiles/unittests.dir/common/SubSystemsManager.cpp.o
[ 94%] Building CXX object test/unit/cpp/CMakeFiles/unittests.dir/geometry/ConvexTriangulation.cpp.o
cd "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/test/unit/cpp" && /usr/bin/c++ -DDOLFIN_VERSION=\"2019.2.0.dev0\" -DHAS_CHOLMOD -DHAS_HDF5 -DHAS_MPI -DHAS_PETSC -DHAS_SCOTCH -DHAS_SLEPC -DHAS_UMFPACK -DHAS_ZLIB -DNDEBUG -I"/<<PKGBUILDDIR>>" -I"/<<PKGBUILDDIR>>/dolfin" -I"/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu" -I"/<<PKGBUILDDIR>>/test/unit/cpp/catch" -isystem /usr/lib/python3/dist-packages/ffc/backends/ufc -isystem /usr/include/eigen3 -isystem /usr/include/hdf5/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include -isystem /usr/lib/petscdir/petsc3.14/x86_64-linux-gnu-real/include -isystem /usr/lib/slepcdir/slepc3.14/x86_64-linux-gnu-real/include -fpermissive -O2 -g -DNDEBUG -std=c++11 -o CMakeFiles/unittests.dir/main.cpp.o -c "/<<PKGBUILDDIR>>/test/unit/cpp/main.cpp"
cd "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/test/unit/cpp" && /usr/bin/c++ -DDOLFIN_VERSION=\"2019.2.0.dev0\" -DHAS_CHOLMOD -DHAS_HDF5 -DHAS_MPI -DHAS_PETSC -DHAS_SCOTCH -DHAS_SLEPC -DHAS_UMFPACK -DHAS_ZLIB -DNDEBUG -I"/<<PKGBUILDDIR>>" -I"/<<PKGBUILDDIR>>/dolfin" -I"/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu" -I"/<<PKGBUILDDIR>>/test/unit/cpp/catch" -isystem /usr/lib/python3/dist-packages/ffc/backends/ufc -isystem /usr/include/eigen3 -isystem /usr/include/hdf5/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include -isystem /usr/lib/petscdir/petsc3.14/x86_64-linux-gnu-real/include -isystem /usr/lib/slepcdir/slepc3.14/x86_64-linux-gnu-real/include -fpermissive -O2 -g -DNDEBUG -std=c++11 -o CMakeFiles/unittests.dir/common/SubSystemsManager.cpp.o -c "/<<PKGBUILDDIR>>/test/unit/cpp/common/SubSystemsManager.cpp"
cd "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/test/unit/cpp" && /usr/bin/c++ -DDOLFIN_VERSION=\"2019.2.0.dev0\" -DHAS_CHOLMOD -DHAS_HDF5 -DHAS_MPI -DHAS_PETSC -DHAS_SCOTCH -DHAS_SLEPC -DHAS_UMFPACK -DHAS_ZLIB -DNDEBUG -I"/<<PKGBUILDDIR>>" -I"/<<PKGBUILDDIR>>/dolfin" -I"/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu" -I"/<<PKGBUILDDIR>>/test/unit/cpp/catch" -isystem /usr/lib/python3/dist-packages/ffc/backends/ufc -isystem /usr/include/eigen3 -isystem /usr/include/hdf5/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include -isystem /usr/lib/petscdir/petsc3.14/x86_64-linux-gnu-real/include -isystem /usr/lib/slepcdir/slepc3.14/x86_64-linux-gnu-real/include -fpermissive -O2 -g -DNDEBUG -std=c++11 -o CMakeFiles/unittests.dir/function/Expression.cpp.o -c "/<<PKGBUILDDIR>>/test/unit/cpp/function/Expression.cpp"
cd "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/test/unit/cpp" && /usr/bin/c++ -DDOLFIN_VERSION=\"2019.2.0.dev0\" -DHAS_CHOLMOD -DHAS_HDF5 -DHAS_MPI -DHAS_PETSC -DHAS_SCOTCH -DHAS_SLEPC -DHAS_UMFPACK -DHAS_ZLIB -DNDEBUG -I"/<<PKGBUILDDIR>>" -I"/<<PKGBUILDDIR>>/dolfin" -I"/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu" -I"/<<PKGBUILDDIR>>/test/unit/cpp/catch" -isystem /usr/lib/python3/dist-packages/ffc/backends/ufc -isystem /usr/include/eigen3 -isystem /usr/include/hdf5/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include -isystem /usr/lib/petscdir/petsc3.14/x86_64-linux-gnu-real/include -isystem /usr/lib/slepcdir/slepc3.14/x86_64-linux-gnu-real/include -fpermissive -O2 -g -DNDEBUG -std=c++11 -o CMakeFiles/unittests.dir/geometry/ConvexTriangulation.cpp.o -c "/<<PKGBUILDDIR>>/test/unit/cpp/geometry/ConvexTriangulation.cpp"
In file included from /<<PKGBUILDDIR>>/test/unit/cpp/main.cpp:2:
/<<PKGBUILDDIR>>/test/unit/cpp/catch/catch.hpp:6490:33: error: size of array ‘altStackMem’ is not an integral constant-expression
 6490 |         static char altStackMem[static_cast<size_t>(SIGSTKSZ)];
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/test/unit/cpp/catch/catch.hpp:6541:45: error: size of array ‘altStackMem’ is not an integral constant-expression
 6541 |     char FatalConditionHandler::altStackMem[static_cast<size_t>(SIGSTKSZ)] = {};
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[5]: *** [test/unit/cpp/CMakeFiles/unittests.dir/build.make:85: test/unit/cpp/CMakeFiles/unittests.dir/main.cpp.o] Error 1

There’s related discussion of the issue at https://github.com/catchorg/Catch2/issues/2178

The change in glibc was https://sourceware.org/git/?p=glibc.git;a=commit;h=6c57d320484988e87e446e2e60ce42816bf51d53

It’s been fixed in Catch2. Can dolfin be updated to use catch2 ?