CMake: Provide API for install-time variables with generator expression

This commit is contained in:
Shmuel H
2019-08-21 23:27:58 +03:00
committed by Hyunjin Song
parent 7a23ee8ad1
commit 72bdb23531
2 changed files with 48 additions and 0 deletions

View 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()

View 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()