Skip to content

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information