void-packages/srcpkgs/cmake/patches/race.patch
q66 c5579aafbb cmake: workaround a race condition figuring out include paths
This particularly affects musl installations. Cmake uses verbose
gcc output to figure out include and linker paths without taking
care of it being racey, which sometimes results in paths being
omitted.

[ci skip]
2019-08-12 16:35:36 +02:00

25 lines
1.3 KiB
Diff

At very least under musl, cmake has some racey behavior.
This workaround fixes that until a real fix is available.
https://gitlab.kitware.com/cmake/cmake/issues/19590
--- Modules/CMakeParseImplicitIncludeInfo.cmake
+++ Modules/CMakeParseImplicitIncludeInfo.cmake
@@ -226,6 +226,17 @@ function(cmake_parse_implicit_include_info text lang dir_var log_var state_var)
get_filename_component(dir "${CMAKE_BINARY_DIR}/${CMAKE_MATCH_1}" ABSOLUTE)
list(APPEND implicit_dirs "${dir}")
string(APPEND log " collapse relative include dir [${d}] ==> [${dir}]\n")
+ elseif("${d}" MATCHES [[^.* (/usr.*)$]])
+ # We've hit an unfortunate race where the output of something else prefixes
+ # our actual line... so perform a hacky workaround, at least until it's fixed
+ # https://gitlab.kitware.com/cmake/cmake/issues/19590
+ if(IS_ABSOLUTE "${CMAKE_MATCH_1}")
+ get_filename_component(dir "${CMAKE_MATCH_1}" ABSOLUTE)
+ list(APPEND implicit_dirs "${CMAKE_MATCH_1}")
+ string(APPEND log " collapse include dir [${CMAKE_MATCH_1}] ==> [${dir}]\n")
+ else()
+ string(APPEND log " skipping relative include dir [${d}]\n")
+ endif()
else()
string(APPEND log " skipping relative include dir [${d}]\n")
endif()