cmake relies on inherently racey g++ output to figure out implicit include dirs, which sometimes breaks build
See CMakeOutput.txt: https://gist.github.com/q66/540d6d99c0b02af24d572d6841d71064 Notably this part: ``` #include <...> search starts here: /usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0 GNU assembler version 2.32 (powerpc64-linux-musl) using BFD version (GNU Binutils) 2.32 /usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0/powerpc64-linux-musl /usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0/backward /usr/local/include /usr/include /usr/lib/gcc/powerpc64-linux-musl/9.1.0/include End of search list. ``` On this particular setup, the race results in the assembler info merging with the actual include path (`/usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0/powerpc64-linux-musl`) which later makes cmake skip it: ``` collapse include dir [/usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0] ==> [/usr/include/c++/9.1.0] skipping relative include dir [GNU assembler version 2.32 (powerpc64-linux-musl) using BFD version (GNU Binutils) 2.32 /usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0/powerpc64-linux-musl] skipping relative include dir [] collapse include dir [/usr/lib/gcc/powerpc64-linux-musl/9.1.0/../../../../include/c++/9.1.0/backward] ==> [/usr/include/c++/9.1.0/backward] collapse include dir [/usr/local/include] ==> [/usr/local/include] collapse include dir [/usr/include] ==> [/usr/include] collapse include dir [/usr/lib/gcc/powerpc64-linux-musl/9.1.0/include] ==> [/usr/lib/gcc/powerpc64-linux-musl/9.1.0/include] ``` This notably affects projects using Qt and cmake's automoc, as then moc can't find the right includes and fails to parse.
issue