v2022.1: Build with external lib tinyxml2-7.0.1 fails
When building against an external tinyxml2 (version 7.0.1) build fails:
[ 66%] Building CXX object src/testutils/CMakeFiles/testutils.dir/simulationdatabase.cpp.o
cd /builddir/build/BUILD/gromacs-2022.1/serial/redhat-linux-build/src/testutils && /usr/bin/g++ -DGMX_DOUBLE=0 -DGTEST_LANG_CXX11 -DHAVE_CONFIG_H -I/builddir/build/BUILD/gromacs-2022.1/src/testutils/inc
lude -I/builddir/build/BUILD/gromacs-2022.1/src/testutils -I/builddir/build/BUILD/gromacs-2022.1/api/legacy/include -I/builddir/build/BUILD/gromacs-2022.1/serial/redhat-linux-build/api/legacy/include -I
/builddir/build/BUILD/gromacs-2022.1/src/include -I/builddir/build/BUILD/gromacs-2022.1/serial/redhat-linux-build/src/include -I/builddir/build/BUILD/gromacs-2022.1/src -isystem /builddir/build/BUILD/gr
omacs-2022.1/src/external/thread_mpi/include -isystem /builddir/build/BUILD/gromacs-2022.1/src/external -isystem /builddir/build/BUILD/gromacs-2022.1/src/external/googletest/googlemock/include -isystem
/builddir/build/BUILD/gromacs-2022.1/src/external/googletest/googlemock -isystem /builddir/build/BUILD/gromacs-2022.1/src/external/googletest/googletest/include -isystem /builddir/build/BUILD/gromacs-20
22.1/src/external/googletest/googletest -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -spec
s=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protecti
on -DNDEBUG -Wno-comment -msse2 -Wno-missing-field-initializers -fexcess-precision=fast -funroll-all-loops -fopenmp -std=c++17 -MD -MT src/testutils/CMakeFiles/testutils.dir/simulationdatabase.cpp.o
-MF CMakeFiles/testutils.dir/simulationdatabase.cpp.o.d -o CMakeFiles/testutils.dir/simulationdatabase.cpp.o -c /builddir/build/BUILD/gromacs-2022.1/src/testutils/simulationdatabase.cpp
/builddir/build/BUILD/gromacs-2022.1/src/testutils/refdata_xml.cpp: In function 'gmx::test::ReferenceDataEntry::EntryPointer gmx::test::readReferenceDataFile(const std::string&)':
/builddir/build/BUILD/gromacs-2022.1/src/testutils/refdata_xml.cpp:209:42: error: 'class tinyxml2::XMLDocument' has no member named 'GetErrorStr1'; did you mean 'ErrorStr'?
209 | const char* errorStr1 = document.GetErrorStr1();
| ^~~~~~~~~~~~
| ErrorStr
/builddir/build/BUILD/gromacs-2022.1/src/testutils/refdata_xml.cpp:210:42: error: 'class tinyxml2::XMLDocument' has no member named 'GetErrorStr2'; did you mean 'ErrorStr'?
210 | const char* errorStr2 = document.GetErrorStr2();
| ^~~~~~~~~~~~
| ErrorStr
/builddir/build/BUILD/gromacs-2022.1/src/testutils/refdata_xml.cpp: In function 'void gmx::test::writeReferenceDataFile(const std::string&, const ReferenceDataEntry&)':
/builddir/build/BUILD/gromacs-2022.1/src/testutils/refdata_xml.cpp:374:54: error: 'XML_NO_ERROR' is not a member of 'tinyxml2'
374 | if (document.SaveFile(path.c_str()) != tinyxml2::XML_NO_ERROR)
| ^~~~~~~~~~~~
gmake[3]: *** [src/testutils/CMakeFiles/testutils.dir/build.make:191: src/testutils/CMakeFiles/testutils.dir/refdata_xml.cpp.o] Error 1
gmake[3]: *** Waiting for unfinished jobs....
Build log here: build_tinyxml.txt.zip
I guess, we are using an earlier API version of tinyxml2.
There are two solutions, a.) [cheap one] fix the tinyxml2 version in CMake to 6.*
, b.) update to use tinyxml2 v7.