CMake: Provide API for install-time variables with generator expression
This commit is contained in:
18
cmake/modules/CreateTempFile.cmake
Normal file
18
cmake/modules/CreateTempFile.cmake
Normal file
@@ -0,0 +1,18 @@
|
||||
function(CreateTempFilePath)
|
||||
set(options)
|
||||
set(oneValueArgs OUTPUT_VAR TAG)
|
||||
set(multiValueArgs CONTENT)
|
||||
cmake_parse_arguments(TEMP "${options}" "${oneValueArgs}"
|
||||
"${multiValueArgs}" ${ARGN} )
|
||||
|
||||
# Use hash to create a unique identifier
|
||||
# for this file.
|
||||
string(SHA1 hashed_content "${TEMP_CONTENT}")
|
||||
|
||||
set(file_name "${CMAKE_BINARY_DIR}/${TEMP_TAG}_${hashed_content}")
|
||||
|
||||
file(GENERATE OUTPUT "${file_name}"
|
||||
CONTENT "${TEMP_CONTENT}")
|
||||
|
||||
set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
30
cmake/modules/DefineInstallVar.cmake
Normal file
30
cmake/modules/DefineInstallVar.cmake
Normal file
@@ -0,0 +1,30 @@
|
||||
# This functions forwards a variable to
|
||||
# the install stage.
|
||||
# Parameters:
|
||||
# CONTENT: Variable content.
|
||||
# NAME: Variable name.
|
||||
# Options:
|
||||
# GENERATOR_EXPRESSION: Support generator expression for CONTENT.
|
||||
function(DEFINE_INSTALL_VAR)
|
||||
set(options GENERATOR_EXPRESSION)
|
||||
set(oneValueArgs NAME )
|
||||
set(multiValueArgs CONTENT)
|
||||
cmake_parse_arguments(VAR "${options}" "${oneValueArgs}"
|
||||
"${multiValueArgs}" ${ARGN} )
|
||||
|
||||
# install(CODE) does not support generator expression in ver<3.14
|
||||
if(VAR_GENERATOR_EXPRESSION AND ${CMAKE_VERSION} VERSION_LESS "3.14.0")
|
||||
if(MSVC)
|
||||
message(FATAL_ERROR "Installing is not supported with msvc and cmake<3.14")
|
||||
endif()
|
||||
|
||||
include(CreateTempFile)
|
||||
CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}")
|
||||
install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")")
|
||||
else()
|
||||
if(VAR_GENERATOR_EXPRESSION)
|
||||
cmake_policy(SET CMP0087 NEW)
|
||||
endif()
|
||||
install(CODE "set(\"${VAR_NAME}\" \"${VAR_CONTENT}\")")
|
||||
endif()
|
||||
endfunction()
|
||||
Reference in New Issue
Block a user