From 16121f2e0f4c93e129f9a9e6af3d9582d5b18e56 Mon Sep 17 00:00:00 2001 From: Denis Blank Date: Sun, 13 May 2018 02:05:22 +0200 Subject: [PATCH] Fix generator expression for binary targets in compile definitions * Affected generator expressions are replaced through the static variable value and a corresponding STREQUAL generator expression. * Closes sakra/cotire#135 --- CMake/cotire.cmake | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/CMake/cotire.cmake b/CMake/cotire.cmake index 97275d6..98c5661 100644 --- a/CMake/cotire.cmake +++ b/CMake/cotire.cmake @@ -2355,12 +2355,22 @@ function (cotire_generate_target_script _language _configurations _target _targe CMAKE_${_language}_SOURCE_FILE_EXTENSIONS) if (DEFINED ${_var}) string (REPLACE "\"" "\\\"" _value "${${_var}}") - set (_contents "${_contents}set (${_var} \"${_value}\")\n") - if (NOT _contentsHasGeneratorExpressions) - if ("${_value}" MATCHES "\\$<.*>") + + if ("${_value}" MATCHES "\\$<.*>") + # We have to evaluate generator expressions + if (NOT _contentsHasGeneratorExpressions) set (_contentsHasGeneratorExpressions TRUE) endif() + + # Expand various generator expressions which can only be evaluated on binary targets manually + foreach(_currentReplacedGeneratorExpression "C_COMPILER_ID" "CXX_COMPILER_ID") + set(_currentReplacement ${CMAKE_${_currentReplacedGeneratorExpression}}) + + string (REGEX REPLACE "\\$<${_currentReplacedGeneratorExpression}:([a-zA-Z0-9]*)>" "$" _value "${_value}") + endforeach(_currentReplacedGeneratorExpression) endif() + + set (_contents "${_contents}set (${_var} \"${_value}\")\n") endif() endforeach() # generate target script file