mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-18 17:45:48 +00:00
50 lines
2.4 KiB
CMake
50 lines
2.4 KiB
CMake
# This patches unsigned-types.h in the soci official sources
|
|
# so as to remove type range check exceptions that cause
|
|
# us trouble when using boost::optional to select int values
|
|
|
|
# Soci's CMake setup leaves flags in place that will cause warnings to
|
|
# be treated as errors, but some compiler versions throw "new" warnings
|
|
# that then cause the build to fail. Simplify that until soci fixes
|
|
# those warnings.
|
|
if (RIPPLED_SOURCE)
|
|
execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
${RIPPLED_SOURCE}/Builds/CMake/SociConfig.cmake.patched
|
|
cmake/SociConfig.cmake )
|
|
endif ()
|
|
|
|
# Some versions of CMake erroneously patch external projects on every build.
|
|
# If the patch makes no changes, skip it. This workaround can be
|
|
# removed once we stop supporting vulnerable versions of CMake.
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/21086
|
|
file (STRINGS include/soci/unsigned-types.h sourcecode)
|
|
# Delete the .patched file if it exists, so it doesn't end up duplicated.
|
|
# Trying to remove a file that does not exist is not a problem.
|
|
file (REMOVE include/soci/unsigned-types.h.patched)
|
|
foreach (line_ ${sourcecode})
|
|
if (line_ MATCHES "^[ \\t]+throw[ ]+soci_error[ ]*\\([ ]*\"Value outside of allowed.+$")
|
|
set (line_ "//${CMAKE_MATCH_0}")
|
|
endif ()
|
|
file (APPEND include/soci/unsigned-types.h.patched "${line_}\n")
|
|
endforeach ()
|
|
execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files
|
|
include/soci/unsigned-types.h include/soci/unsigned-types.h.patched
|
|
RESULT_VARIABLE compare_result
|
|
)
|
|
if( compare_result EQUAL 0)
|
|
message(DEBUG "The soci source and patch files are identical. Make no changes.")
|
|
file (REMOVE include/soci/unsigned-types.h.patched)
|
|
return()
|
|
endif()
|
|
file (RENAME include/soci/unsigned-types.h include/soci/unsigned-types.h.orig)
|
|
file (RENAME include/soci/unsigned-types.h.patched include/soci/unsigned-types.h)
|
|
# also fix Boost.cmake so that it just returns when we override the Boost_FOUND var
|
|
file (APPEND cmake/dependencies/Boost.cmake.patched "if (Boost_FOUND)\n")
|
|
file (APPEND cmake/dependencies/Boost.cmake.patched " return ()\n")
|
|
file (APPEND cmake/dependencies/Boost.cmake.patched "endif ()\n")
|
|
file (STRINGS cmake/dependencies/Boost.cmake sourcecode)
|
|
foreach (line_ ${sourcecode})
|
|
file (APPEND cmake/dependencies/Boost.cmake.patched "${line_}\n")
|
|
endforeach ()
|
|
file (RENAME cmake/dependencies/Boost.cmake.patched cmake/dependencies/Boost.cmake)
|
|
|