|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(__install_runtime_cmake_INCLUDED__) |
|
return() |
|
else() |
|
set(__install_runtime_cmake_INCLUDED__ ON) |
|
endif() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macro(resourceFile) |
|
cmake_parse_arguments(rsc "" "INSTALL;FILE_PATH;CONFIG_TYPE" "ADD" ${ARGN}) |
|
|
|
if(rsc_ADD) |
|
unset(IBR_RSC_FILE_CONTENT_LIST) |
|
if(EXISTS "${rsc_FILE_PATH}") |
|
file(READ "${rsc_FILE_PATH}" IBR_RSC_FILE_CONTENT) |
|
string(REGEX REPLACE "\n" ";" IBR_RSC_FILE_CONTENT_LIST "${IBR_RSC_FILE_CONTENT}") |
|
endif() |
|
list(APPEND IBR_RSC_FILE_CONTENT_LIST "${rsc_ADD}") |
|
list(REMOVE_DUPLICATES IBR_RSC_FILE_CONTENT_LIST) |
|
file(WRITE "${rsc_FILE_PATH}" "") |
|
foreach(rscDir ${IBR_RSC_FILE_CONTENT_LIST}) |
|
file(APPEND "${rsc_FILE_PATH}" "${rscDir}\n") |
|
endforeach() |
|
unset(rsc_ADD) |
|
endif() |
|
|
|
if(rsc_INSTALL) |
|
install(FILES ${rsc_FILE_PATH} CONFIGURATIONS ${rsc_CONFIG_TYPE} DESTINATION ${rsc_INSTALL}) |
|
unset(rsc_INSTALL) |
|
endif() |
|
endmacro() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macro(installPDB targetName configType) |
|
cmake_parse_arguments(instpdb "" "COMPONENT" "ARCHIVE_DEST;LIBRARY_DEST;RUNTIME_DEST" ${ARGN}) |
|
|
|
if(NOT MSVC) |
|
return() |
|
endif() |
|
|
|
|
|
get_target_property(type ${targetName} TYPE) |
|
if(${type} MATCHES "EXECUTABLE" AND instpdb_RUNTIME_DEST) |
|
set(pdb_DESTINATION ${instpdb_RUNTIME_DEST}) |
|
elseif(${type} MATCHES "STATIC_LIBRARY" AND instpdb_ARCHIVE_DEST) |
|
set(pdb_DESTINATION ${instpdb_ARCHIVE_DEST}) |
|
elseif(${type} MATCHES "MODULE_LIBRARY" AND instpdb_LIBRARY_DEST) |
|
set(pdb_DESTINATION ${instpdb_LIBRARY_DEST}) |
|
elseif(${type} MATCHES "SHARED_LIBRARY") |
|
if(WIN32 AND instpdb_RUNTIME_DEST) |
|
set(pdb_DESTINATION ${instpdb_RUNTIME_DEST}) |
|
else() |
|
set(pdb_DESTINATION ${instpdb_LIBRARY_DEST}) |
|
endif() |
|
endif() |
|
|
|
if(NOT pdb_DESTINATION) |
|
set(pdb_DESTINATION bin) |
|
endif() |
|
|
|
if(NOT instpdb_COMPONENT) |
|
set(instpdb_COMPONENT ) |
|
else() |
|
set(instpdb_COMPONENT COMPONENT ${instpdb_COMPONENT}) |
|
endif() |
|
|
|
string(TOUPPER ${configType} CONFIG_TYPES_UC) |
|
get_target_property(PDB_PATH ${targetName} PDB_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}) |
|
|
|
get_target_property(confModePostfix ${targetName} ${CONFIG_TYPES_UC}_POSTFIX) |
|
if(NOT confModePostfix) |
|
set(confModePostfix "") |
|
endif() |
|
set_target_properties(${targetName} PROPERTIES PDB_NAME_${CONFIG_TYPES_UC} ${targetName}${confModePostfix}) |
|
get_target_property(PDB_NAME ${targetName} PDB_NAME_${CONFIG_TYPES_UC}) |
|
|
|
if(EXISTS "${PDB_PATH}/${PDB_NAME}.pdb") |
|
install(FILES "${PDB_PATH}/${PDB_NAME}.pdb" CONFIGURATIONS ${configType} DESTINATION ${pdb_DESTINATION} ${instpdb_COMPONENT} OPTIONAL) |
|
endif() |
|
endmacro() |
|
|
|
|
|
|
|
|
|
|
|
|
|
macro(installTargetProject targetOfProject targetOfInstallProject) |
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
set(configMode ${CMAKE_BUILD_TYPE}) |
|
elseif(MSVC) |
|
|
|
set(configMode $(Configuration)) |
|
endif() |
|
if(configMode) |
|
get_target_property(srcFiles ${targetOfProject} SOURCES) |
|
add_custom_target( ${targetOfInstallProject} |
|
${CMAKE_COMMAND} -DBUILD_TYPE=${configMode} -DCOMPONENT=${targetOfInstallProject} -P ${CMAKE_BINARY_DIR}/cmake_install.cmake |
|
DEPENDS ${srcFiles} |
|
COMMENT "run the installation only for ${targetOfProject}" VERBATIM |
|
) |
|
add_dependencies(${targetOfInstallProject} ${targetOfProject}) |
|
|
|
get_target_property(INSTALL_BUILD_FOLDER ${targetOfProject} FOLDER) |
|
set_target_properties(${targetOfInstallProject} PROPERTIES FOLDER ${INSTALL_BUILD_FOLDER}) |
|
endif() |
|
endmacro() |
|
|
|
|
|
|
|
|
|
|
|
|
|
function(get_all_targets _result _dir) |
|
get_property(_subdirs DIRECTORY "${_dir}" PROPERTY SUBDIRECTORIES) |
|
foreach(_subdir IN LISTS _subdirs) |
|
get_all_targets(${_result} "${_subdir}") |
|
endforeach() |
|
|
|
get_directory_property(_sub_targets DIRECTORY "${_dir}" BUILDSYSTEM_TARGETS) |
|
set(${_result} ${${_result}} ${_sub_targets} PARENT_SCOPE) |
|
endfunction() |
|
|
|
|
|
|
|
macro(subdirectory_target target directory build_folder) |
|
add_custom_target(${target} |
|
COMMENT "run build for all projects in this directory" VERBATIM |
|
) |
|
get_all_targets(ALL_TARGETS ${directory}) |
|
add_dependencies(${target} ${ALL_TARGETS}) |
|
add_custom_target(${target}_install |
|
${CMAKE_COMMAND} -DBUILD_TYPE=$<CONFIG> -DCOMPONENT=${target}_install -P ${CMAKE_BINARY_DIR}/cmake_install.cmake |
|
COMMENT "run install for all projects in this directory" VERBATIM |
|
) |
|
add_dependencies(${target}_install ${target}) |
|
|
|
set_target_properties(${target} PROPERTIES FOLDER ${build_folder}) |
|
set_target_properties(${target}_install PROPERTIES FOLDER ${build_folder}) |
|
endmacro() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function(install_runtime installedFilePathTargetAppToResolve) |
|
set(optionsArgs "VERBOSE") |
|
set(oneValueArgs "COMPONENT;INSTALL_FOLDER;CONFIG_TYPE") |
|
set(multiValueArgs "DIRS;PLUGINS;TARGET_LIBRARIES;TARGET_PACKAGES;TARGET;PLAUSIBLES_POSTFIX") |
|
cmake_parse_arguments(inst_run "${optionsArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) |
|
|
|
if(IS_ABSOLUTE ${installedFilePathTargetAppToResolve}) |
|
else() |
|
set(installedFilePathTargetAppToResolve ${inst_run_INSTALL_FOLDER}/${installedFilePathTargetAppToResolve}) |
|
endif() |
|
|
|
get_filename_component(EXEC_NAME ${installedFilePathTargetAppToResolve} NAME_WE) |
|
get_filename_component(EXEC_PATH ${installedFilePathTargetAppToResolve} PATH) |
|
|
|
if(NOT inst_run_COMPONENT) |
|
set(inst_run_COMPONENT runtime) |
|
endif() |
|
|
|
|
|
|
|
set(libPaths ) |
|
foreach(libraryFileName ${inst_run_TARGET_LIBRARIES}) |
|
if(IS_DIRECTORY "${libraryFileName}") |
|
list(APPEND libPaths "${libraryFileName}") |
|
else() |
|
get_filename_component(libpath "${libraryFileName}" PATH) |
|
if(EXISTS "${libpath}") |
|
list(APPEND libPaths "${libpath}") |
|
endif() |
|
endif() |
|
endforeach() |
|
|
|
|
|
|
|
macro(recurseDepList target) |
|
get_target_property(linkLibs ${target} LINK_LIBRARIES) |
|
foreach(lib ${linkLibs}) |
|
string(FIND ${lib} ">" strId) |
|
if(TARGET ${lib}) |
|
|
|
get_target_property(type ${lib} TYPE) |
|
get_target_property(imported ${lib} IMPORTED) |
|
if(type STREQUAL "INTERFACE_LIBRARY") |
|
get_target_property(imp_loc ${lib} INTERFACE_IMPORTED_LOCATION) |
|
if(imp_loc) |
|
get_filename_component(imp_loc ${imp_loc} PATH) |
|
list(APPEND targetLibPath ${imp_loc}) |
|
endif() |
|
get_target_property(loc ${lib} INTERFACE_LOCATION) |
|
if(loc) |
|
get_filename_component(loc ${loc} PATH) |
|
list(APPEND targetLibPath ${loc}) |
|
endif() |
|
|
|
|
|
|
|
elseif(imported) |
|
get_target_property(imp_loc ${lib} IMPORTED_LOCATION) |
|
if(imp_loc) |
|
get_filename_component(imp_loc ${imp_loc} PATH) |
|
list(APPEND targetLibPath ${imp_loc}) |
|
endif() |
|
get_target_property(loc ${lib} LOCATION) |
|
if(loc) |
|
get_filename_component(loc ${loc} PATH) |
|
list(APPEND targetLibPath ${loc}) |
|
endif() |
|
else() |
|
recurseDepList(${lib}) |
|
endif() |
|
elseif(NOT ${strId} MATCHES -1) |
|
string(REGEX MATCH ">:[@A-Za-z_:/.0-9-]+" targetLibPath ${lib}) |
|
string(REGEX REPLACE ">:([@A-Za-z_:/.0-9-]+)" "\\1" targetLibPath ${targetLibPath}) |
|
get_filename_component(targetLibPath ${targetLibPath} PATH) |
|
elseif(EXISTS ${lib}) |
|
set(targetLibPath ${lib}) |
|
get_filename_component(targetLibPath ${targetLibPath} PATH) |
|
else() |
|
|
|
endif() |
|
if(targetLibPath) |
|
list(APPEND targetLinkLibsPathList ${targetLibPath}) |
|
endif() |
|
endforeach() |
|
if(targetLinkLibsPathList) |
|
list(REMOVE_DUPLICATES targetLinkLibsPathList) |
|
endif() |
|
endmacro() |
|
if(inst_run_TARGET) |
|
recurseDepList(${inst_run_TARGET}) |
|
if(targetLinkLibsPathList) |
|
list(APPEND libPaths ${targetLinkLibsPathList}) |
|
endif() |
|
endif() |
|
|
|
if(libPaths) |
|
list(REMOVE_DUPLICATES libPaths) |
|
foreach(libPath ${libPaths}) |
|
get_filename_component(path ${libPath} PATH) |
|
list(APPEND libPaths ${path}) |
|
endforeach() |
|
endif() |
|
|
|
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
|
set(BUILD_TYPES_FOR_DLL "x64") |
|
if(WIN32) |
|
list(APPEND BUILD_TYPES_FOR_DLL "Win64") |
|
endif() |
|
else() |
|
set(BUILD_TYPES_FOR_DLL "x86") |
|
if(WIN32) |
|
list(APPEND BUILD_TYPES_FOR_DLL "Win32") |
|
endif() |
|
endif() |
|
|
|
|
|
|
|
foreach(dir ${inst_run_DIRS} ${libPaths}) |
|
if(EXISTS "${dir}/bin") |
|
list(APPEND inst_run_DIRS "${dir}/bin") |
|
elseif(EXISTS "${dir}") |
|
list(APPEND inst_run_DIRS "${dir}") |
|
endif() |
|
endforeach() |
|
list(REMOVE_DUPLICATES inst_run_DIRS) |
|
foreach(dir ${inst_run_DIRS}) |
|
if(EXISTS "${dir}") |
|
list(APPEND argDirs ${dir}) |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${dir}/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND argDirs "${dir}/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
|
if(EXISTS "${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}") |
|
list(APPEND argDirs "${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}") |
|
endif() |
|
endforeach() |
|
if(CMAKE_BUILD_TYPE) |
|
if(EXISTS "${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}") |
|
list(APPEND argDirs "${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}") |
|
endif() |
|
endif() |
|
endforeach() |
|
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
|
if(EXISTS "${dir}/${OUTPUTCONFIG}") |
|
list(APPEND argDirs "${dir}/${OUTPUTCONFIG}") |
|
endif() |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND argDirs "${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
endforeach() |
|
endforeach() |
|
if(CMAKE_BUILD_TYPE) |
|
if(EXISTS "${dir}/${CMAKE_BUILD_TYPE}") |
|
list(APPEND argDirs "${dir}/${CMAKE_BUILD_TYPE}") |
|
endif() |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND argDirs "${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
endforeach() |
|
endif() |
|
endif() |
|
endforeach() |
|
if(argDirs) |
|
list(REMOVE_DUPLICATES argDirs) |
|
endif() |
|
|
|
|
|
|
|
foreach(packageName ${inst_run_TARGET_PACKAGES}) |
|
if(EXISTS "${${packageName}_DIR}") |
|
list(APPEND packageDirs ${${packageName}_DIR}) |
|
list(APPEND packageDirs ${${packageName}_DIR}/bin) |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
|
if(EXISTS "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}") |
|
endif() |
|
endforeach() |
|
if(CMAKE_BUILD_TYPE) |
|
if(EXISTS "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}") |
|
endif() |
|
endif() |
|
endforeach() |
|
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
|
if(EXISTS "${${packageName}_DIR}/bin/${OUTPUTCONFIG}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${OUTPUTCONFIG}") |
|
endif() |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
endforeach() |
|
endforeach() |
|
if(CMAKE_BUILD_TYPE) |
|
if(EXISTS "${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}") |
|
endif() |
|
foreach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL}) |
|
if(EXISTS "${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}") |
|
list(APPEND packageDirs "${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}") |
|
endif() |
|
endforeach() |
|
endif() |
|
else() |
|
set(${packageName}_DIR "$ENV{${packageName}_DIR}" CACHE PATH "${packageName}_DIR root directory for looking for dirs containning *.dll") |
|
endif() |
|
endforeach() |
|
if(packageDirs) |
|
list(REMOVE_DUPLICATES packageDirs) |
|
endif() |
|
|
|
|
|
set(dirsToLookFor "${EXEC_PATH}") |
|
if(packageDirs) |
|
list(APPEND dirsToLookFor ${packageDirs}) |
|
endif() |
|
if(argDirs) |
|
list(APPEND dirsToLookFor ${argDirs}) |
|
endif() |
|
get_property(used_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES) |
|
if (used_LINK_DIRECTORIES) |
|
list(APPEND dirsToLookFor ${used_LINK_DIRECTORIES}) |
|
list(REMOVE_DUPLICATES dirsToLookFor) |
|
endif() |
|
|
|
|
|
|
|
set(pluginsList "") |
|
include(parse_arguments_multi) |
|
function(parse_arguments_multi_function results) |
|
cmake_parse_arguments(pamf "VERBOSE" "PLUGIN_PATH_DEST;FROM_REL_PATH;EXEC_PATH;COMPONENT" "" ${ARGN}) |
|
list(REMOVE_DUPLICATES pamf_UNPARSED_ARGUMENTS) |
|
foreach(PLUGIN_PATH_NAME ${pamf_UNPARSED_ARGUMENTS}) |
|
if(EXISTS ${PLUGIN_PATH_NAME}) |
|
if(IS_DIRECTORY ${PLUGIN_PATH_NAME}) |
|
if(pamf_VERBOSE) |
|
message(WARNING "${PLUGIN_PATH_NAME} IS_DIRECTORY, cannot installed a directory, please give a path filename") |
|
endif() |
|
else() |
|
if(NOT pamf_PLUGIN_PATH_DEST) |
|
set(PLUGIN_PATH_DEST ${pamf_EXEC_PATH}) |
|
else() |
|
set(PLUGIN_PATH_DEST ${pamf_PLUGIN_PATH_DEST}) |
|
endif() |
|
|
|
if(pamf_FROM_REL_PATH) |
|
file(TO_CMAKE_PATH ${PLUGIN_PATH_NAME} PLUGIN_PATH_NAME) |
|
get_filename_component(PLUGIN_PATH ${PLUGIN_PATH_NAME} PATH) |
|
unset(PLUGIN_PATH_LIST) |
|
unset(PLUGIN_PATH_LIST_COUNT) |
|
unset(PLUGIN_REL_PATH_LIST) |
|
unset(PLUGIN_REL_PATH) |
|
string(REPLACE "/" ";" PLUGIN_PATH_LIST ${PLUGIN_PATH}) |
|
list(FIND PLUGIN_PATH_LIST ${pamf_FROM_REL_PATH} id) |
|
list(LENGTH PLUGIN_PATH_LIST PLUGIN_PATH_LIST_COUNT) |
|
if(${id} GREATER 0) |
|
math(EXPR id "${id}+1") |
|
math(EXPR PLUGIN_PATH_LIST_COUNT "${PLUGIN_PATH_LIST_COUNT}-1") |
|
foreach(i RANGE ${id} ${PLUGIN_PATH_LIST_COUNT}) |
|
list(GET PLUGIN_PATH_LIST ${i} out) |
|
list(APPEND PLUGIN_REL_PATH_LIST ${out}) |
|
endforeach() |
|
foreach(dir ${PLUGIN_REL_PATH_LIST}) |
|
set(PLUGIN_REL_PATH "${PLUGIN_REL_PATH}/${dir}") |
|
endforeach() |
|
endif() |
|
set(PLUGIN_PATH_DEST ${PLUGIN_PATH_DEST}${PLUGIN_REL_PATH}) |
|
endif() |
|
|
|
install(FILES ${PLUGIN_PATH_NAME} CONFIGURATIONS ${inst_run_CONFIG_TYPE} DESTINATION ${PLUGIN_PATH_DEST} COMPONENT ${pamf_COMPONENT}) |
|
get_filename_component(pluginName ${PLUGIN_PATH_NAME} NAME) |
|
if(IS_ABSOLUTE ${PLUGIN_PATH_DEST}) |
|
else() |
|
set(PLUGIN_PATH_DEST ${inst_run_INSTALL_FOLDER}/${PLUGIN_PATH_DEST}) |
|
endif() |
|
list(APPEND pluginsList ${PLUGIN_PATH_DEST}/${pluginName}) |
|
endif() |
|
else() |
|
message(WARNING "You need to provide a valid PLUGIN_PATH_NAME") |
|
set(pluginsList ) |
|
endif() |
|
endforeach() |
|
set(${results} ${pluginsList} PARENT_SCOPE) |
|
endfunction() |
|
|
|
if(inst_run_VERBOSE) |
|
list(APPEND extra_flags_to_add VERBOSE) |
|
endif() |
|
list(APPEND extra_flags_to_add EXEC_PATH ${EXEC_PATH} COMPONENT ${inst_run_COMPONENT}) |
|
list(LENGTH inst_run_PLUGINS inst_run_PLUGINS_count) |
|
if(${inst_run_PLUGINS_count} GREATER 0) |
|
parse_arguments_multi(PLUGIN_PATH_NAME inst_run_PLUGINS ${inst_run_PLUGINS} |
|
NEED_RESULTS ${inst_run_PLUGINS_count} |
|
EXTRAS_FLAGS ${extra_flags_to_add} |
|
) |
|
endif() |
|
|
|
|
|
list(APPEND pluginsList ${parse_arguments_multi_results}) |
|
|
|
|
|
|
|
|
|
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP ON) |
|
include(InstallRequiredSystemLibraries) |
|
if(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) |
|
install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} |
|
CONFIGURATIONS ${inst_run_CONFIG_TYPE} |
|
DESTINATION ${EXEC_PATH} |
|
COMPONENT ${inst_run_COMPONENT} |
|
) |
|
endif() |
|
|
|
|
|
if(inst_run_VERBOSE) |
|
message(STATUS "[install_runtime] On install target call, cmake will try to resolve dependencies for given app:\n ${installedFilePathTargetAppToResolve} (with plausible postfix: ${inst_run_PLAUSIBLES_POSTFIX})") |
|
if(pluginsList) |
|
message(STATUS " and also for plugins :") |
|
foreach(plugin ${pluginsList}) |
|
message(STATUS " ${plugin}") |
|
endforeach() |
|
endif() |
|
message(STATUS " Looking for dependencies into:") |
|
foreach(dir ${dirsToLookFor}) |
|
message(STATUS " ${dir}") |
|
endforeach() |
|
endif() |
|
|
|
|
|
|
|
string(TOUPPER ${inst_run_CONFIG_TYPE} inst_run_CONFIG_TYPE_UC) |
|
get_target_property(postfix ${inst_run_TARGET} "${inst_run_CONFIG_TYPE_UC}_POSTFIX") |
|
install(CODE "set(target \"${inst_run_TARGET}\")" COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}) |
|
install(CODE "set(inst_run_CONFIG_TYPE \"${inst_run_CONFIG_TYPE}\")" COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}) |
|
install(CODE "set(inst_run_INSTALL_FOLDER \"${inst_run_INSTALL_FOLDER}\")" COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}) |
|
install(CODE "set(app \"${EXEC_PATH}/${EXEC_NAME}${postfix}${CMAKE_EXECUTABLE_SUFFIX}\")" COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}) |
|
install(CODE "set(dirsToLookFor \"${dirsToLookFor}\")" COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}) |
|
install(CODE |
|
[[ |
|
if("${CMAKE_INSTALL_CONFIG_NAME}" STREQUAL "${inst_run_CONFIG_TYPE}") |
|
message(STATUS "Installing ${target} dependencies...") |
|
|
|
file(GET_RUNTIME_DEPENDENCIES |
|
EXECUTABLES ${app} |
|
RESOLVED_DEPENDENCIES_VAR _r_deps |
|
UNRESOLVED_DEPENDENCIES_VAR _u_deps |
|
CONFLICTING_DEPENDENCIES_PREFIX _c_deps |
|
DIRECTORIES ${dirsToLookFor} |
|
PRE_EXCLUDE_REGEXES "api-ms-*" |
|
POST_EXCLUDE_REGEXES ".*system32/.*\\.dll" ".*SysWOW64/.*\\.dll" |
|
) |
|
|
|
if(_u_deps) |
|
message(WARNING "There were unresolved dependencies for executable ${EXEC_FILE}: \"${_u_deps}\"!") |
|
endif() |
|
if(_c_deps_FILENAMES) |
|
message(WARNING "There were conflicting dependencies for executable ${EXEC_FILE}: \"${_c_deps_FILENAMES}\"!") |
|
endif() |
|
|
|
foreach(_file ${_r_deps}) |
|
file(INSTALL |
|
DESTINATION "${inst_run_INSTALL_FOLDER}/bin" |
|
TYPE SHARED_LIBRARY |
|
FOLLOW_SYMLINK_CHAIN |
|
FILES "${_file}" |
|
) |
|
endforeach() |
|
endif() |
|
]] |
|
COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE} |
|
) |
|
|
|
endfunction() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macro(ibr_install_rsc target) |
|
cmake_parse_arguments(install_rsc_${target} "EXECUTABLE;RELATIVE" "TYPE;FOLDER" "FILES" ${ARGN}) |
|
set(rsc_target "${target}_${install_rsc_${target}_TYPE}") |
|
|
|
if(install_rsc_${target}_FOLDER) |
|
set(rsc_folder "${install_rsc_${target}_TYPE}/${install_rsc_${target}_FOLDER}") |
|
else() |
|
set(rsc_folder "${install_rsc_${target}_TYPE}") |
|
endif() |
|
|
|
add_custom_target(${rsc_target} |
|
COMMENT "run the ${install_rsc_${target}_TYPE} installation only for ${target} (component ${rsc_target})" |
|
VERBATIM) |
|
foreach(scriptFile ${install_rsc_${target}_FILES}) |
|
if(install_rsc_${target}_RELATIVE) |
|
file(RELATIVE_PATH relativeFilename ${CMAKE_CURRENT_SOURCE_DIR} ${scriptFile}) |
|
else() |
|
get_filename_component(relativeFilename ${scriptFile} NAME) |
|
endif() |
|
|
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
add_custom_command(TARGET ${rsc_target} POST_BUILD |
|
COMMAND ${CMAKE_COMMAND} -E |
|
copy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}/${relativeFilename}) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
add_custom_command(TARGET ${rsc_target} POST_BUILD |
|
COMMAND ${CMAKE_COMMAND} -E |
|
copy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}/${relativeFilename}) |
|
endforeach() |
|
endforeach() |
|
|
|
get_target_property(INSTALL_RSC_BUILD_FOLDER ${target} FOLDER) |
|
set_target_properties(${rsc_target} PROPERTIES FOLDER ${INSTALL_RSC_BUILD_FOLDER}) |
|
|
|
add_dependencies(${target} ${rsc_target}) |
|
add_dependencies(PREBUILD ${rsc_target}) |
|
|
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
resourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CMAKE_BUILD_TYPE} FILE_PATH "${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/ibr_resources.ini") |
|
|
|
if(install_rsc_${target}_EXECUTABLE) |
|
install( |
|
PROGRAMS ${install_rsc_${target}_FILES} |
|
CONFIGURATIONS ${CMAKE_BUILD_TYPE} |
|
DESTINATION "${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}" |
|
) |
|
else() |
|
install( |
|
FILES ${install_rsc_${target}_FILES} |
|
CONFIGURATIONS ${CMAKE_BUILD_TYPE} |
|
DESTINATION "${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}" |
|
) |
|
endif() |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
resourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CONFIG_TYPES} FILE_PATH "${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/ibr_resources.ini") |
|
|
|
if(install_rsc_${target}_EXECUTABLE) |
|
install( |
|
PROGRAMS ${install_rsc_${target}_FILES} |
|
CONFIGURATIONS ${CONFIG_TYPES} |
|
DESTINATION "${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}" |
|
) |
|
else() |
|
install( |
|
FILES ${install_rsc_${target}_FILES} |
|
CONFIGURATIONS ${CONFIG_TYPES} |
|
DESTINATION "${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}" |
|
) |
|
endif() |
|
endforeach() |
|
endmacro() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macro(ibr_install_target target) |
|
cmake_parse_arguments(ibrInst${target} "VERBOSE;INSTALL_PDB" "COMPONENT;MSVC_ARGS;STANDALONE;RSC_FOLDER" "SHADERS;RESOURCES;SCRIPTS;DIRS;PLUGINS" ${ARGN}) |
|
|
|
if(ibrInst${target}_RSC_FOLDER) |
|
set(rsc_folder "${ibrInst${target}_RSC_FOLDER}") |
|
else() |
|
set(rsc_folder "${target}") |
|
endif() |
|
|
|
if(ibrInst${target}_SHADERS) |
|
ibr_install_rsc(${target} EXECUTABLE TYPE "shaders" FOLDER ${rsc_folder} FILES "${ibrInst${target}_SHADERS}") |
|
endif() |
|
|
|
if(ibrInst${target}_RESOURCES) |
|
ibr_install_rsc(${target} TYPE "resources" FOLDER ${rsc_folder} FILES "${ibrInst${target}_RESOURCES}") |
|
endif() |
|
|
|
if(ibrInst${target}_SCRIPTS) |
|
ibr_install_rsc(${target} EXECUTABLE TYPE "scripts" FOLDER ${rsc_folder} FILES "${ibrInst${target}_SCRIPTS}") |
|
endif() |
|
|
|
if(ibrInst${target}_COMPONENT) |
|
set(installCompArg COMPONENT ${ibrInst${target}_COMPONENT}) |
|
|
|
installTargetProject(${target} ${ibrInst${target}_COMPONENT}) |
|
endif() |
|
|
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
set_target_properties(${target} PROPERTIES ${CMAKE_BUILD_TYPE}_POSTFIX "${CMAKE_${CMAKE_BUILD_TYPE}_POSTFIX}") |
|
get_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CMAKE_BUILD_TYPE}_POSTFIX) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
set_target_properties(${target} PROPERTIES ${CONFIG_TYPES_UC}_POSTFIX "${CMAKE_${CONFIG_TYPES_UC}_POSTFIX}") |
|
get_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CONFIG_TYPES_UC}_POSTFIX) |
|
endforeach() |
|
|
|
|
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
install(TARGETS ${target} |
|
CONFIGURATIONS ${CMAKE_BUILD_TYPE} |
|
LIBRARY DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg} |
|
ARCHIVE DESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg} |
|
RUNTIME DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg} |
|
) |
|
install(TARGETS ${target} |
|
CONFIGURATIONS ${CMAKE_BUILD_TYPE} |
|
LIBRARY DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg} |
|
ARCHIVE DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg} |
|
) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
install(TARGETS ${target} |
|
CONFIGURATIONS ${CONFIG_TYPES} |
|
LIBRARY DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg} |
|
ARCHIVE DESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg} |
|
RUNTIME DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg} |
|
) |
|
install(TARGETS ${target} |
|
CONFIGURATIONS ${CONFIG_TYPES} |
|
LIBRARY DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg} |
|
ARCHIVE DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg} |
|
) |
|
endforeach() |
|
|
|
if(ibrInst${target}_INSTALL_PDB) |
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
installPDB(${target} ${CMAKE_BUILD_TYPE} |
|
LIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} |
|
ARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} |
|
RUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} |
|
) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
installPDB(${target} ${CONFIG_TYPES} |
|
LIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} |
|
ARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} |
|
RUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} |
|
) |
|
endforeach() |
|
endif() |
|
|
|
|
|
if(ibrInst${target}_STANDALONE) |
|
get_target_property(type ${target} TYPE) |
|
if(${type} MATCHES "EXECUTABLE") |
|
|
|
if(ibrInst${target}_VERBOSE) |
|
set(VERBOSE VERBOSE) |
|
else() |
|
set(VERBOSE ) |
|
endif() |
|
|
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
install_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} |
|
INSTALL_FOLDER "${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}" |
|
CONFIG_TYPE ${CMAKE_BUILD_TYPE} |
|
${VERBOSE} |
|
TARGET ${target} |
|
${installCompArg} |
|
PLUGINS |
|
${ibrInst${target}_PLUGINS} |
|
DIRS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} |
|
${ibrInst${target}_DIRS} |
|
) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
install_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} |
|
INSTALL_FOLDER "${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}" |
|
CONFIG_TYPE ${CONFIG_TYPES} |
|
${VERBOSE} |
|
TARGET ${target} |
|
${installCompArg} |
|
PLUGINS |
|
${ibrInst${target}_PLUGINS} |
|
DIRS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} |
|
${ibrInst${target}_DIRS} |
|
) |
|
endforeach() |
|
else() |
|
message(WARNING "STANDALONE option is only compatible with EXECUTABLES target type. Skip the STANDALONE installation process.") |
|
endif() |
|
endif() |
|
|
|
|
|
if(MSVC) |
|
if(ibrInst${target}_MSVC_CMD) |
|
set(msvcCmdArg COMMAND ${ibrInst${target}_MSVC_CMD}) |
|
endif() |
|
if(ibrInst${target}_MSVC_ARGS) |
|
set(msvcArgsArg ARGS ${ibrInst${target}_MSVC_ARGS}) |
|
endif() |
|
get_target_property(type ${target} TYPE) |
|
if( (ibrInst${target}_MSVC_CMD OR ibrInst${target}_MSVC_ARGS) OR (${type} MATCHES "EXECUTABLE") ) |
|
include(MSVCsetUserCommand) |
|
if(DEFINED CMAKE_BUILD_TYPE) |
|
MSVCsetUserCommand( ${target} |
|
PATH ${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}} |
|
ARGS "${SIBR_PROGRAMARGS}" |
|
${msvcCmdArg} |
|
|
|
WORKING_DIR ${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}} |
|
) |
|
endif() |
|
foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) |
|
string(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC) |
|
MSVCsetUserCommand( ${target} |
|
PATH ${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}} |
|
ARGS "${SIBR_PROGRAMARGS}" |
|
${msvcCmdArg} |
|
|
|
WORKING_DIR ${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}} |
|
) |
|
endforeach() |
|
elseif(NOT ${type} MATCHES "EXECUTABLE") |
|
|
|
endif() |
|
endif() |
|
|
|
endmacro() |
|
|