diff --git a/cmake/Corrosion.cmake b/cmake/Corrosion.cmake index 2fafda8a..b129b0ab 100644 --- a/cmake/Corrosion.cmake +++ b/cmake/Corrosion.cmake @@ -1101,7 +1101,7 @@ ANCHOR: corrosion-install and is not officially released yet. Feedback and Suggestions are welcome. ```cmake -corrosion_install(TARGETS ... [EXPORT ... [EXPORT ] [[ARCHIVE|LIBRARY|RUNTIME|PUBLIC_HEADER] [DESTINATION ] [PERMISSIONS ] @@ -1109,7 +1109,8 @@ corrosion_install(TARGETS ... [EXPORT Corrosion.cmake that must be included in the installed config file. +* **EXPORT**: Creates an export that can be installed with `install(EXPORT)`. must be globally unique. + Also creates a file at ${CMAKE_BINARY_DIR}/corrosion/Corrosion.cmake that must be included in the installed config file. * **ARCHIVE**/**LIBRARY**/**RUNTIME**/PUBLIC_HEADER: Designates that the following settings only apply to that specific type of object. * **DESTINATION**: The subdirectory within the CMAKE_INSTALL_PREFIX that a specific object should be placed. Defaults to values from GNUInstallDirs. * **PERMISSIONS**: The permissions of files copied into the install prefix. @@ -1169,6 +1170,10 @@ function(corrosion_install) list(REMOVE_AT ARGN 0) # Pop set(EXTRA_TARGETS_EXPORT_NAME ${EXPORT_NAME}Corrosion.cmake) set(EXPORT_NAME EXPORT ${EXPORT_NAME}) + set(EXPORT_FILE_PATH "${CMAKE_BINARY_DIR}/corrosion/${EXTRA_TARGETS_EXPORT_NAME}") + # Remove first, since otherwise we will append to the file on every reconfigure. + # Assumes that the corrosion_install will only be called once for a given EXPORT_NAME. + file(REMOVE "${EXPORT_FILE_PATH}") endif() else() # Prevent variable set in user code from interfering @@ -1308,8 +1313,7 @@ function(corrosion_install) if(EXPORT_NAME) get_target_property(COR_FILE_NAME ${INSTALL_TARGET}-static COR_FILE_NAME) - file(APPEND - ${CMAKE_BINARY_DIR}/corrosion/${EXTRA_TARGETS_EXPORT_NAME} + file(APPEND "${EXPORT_FILE_PATH}" " add_library(${INSTALL_TARGET}-static STATIC IMPORTED) set_target_properties(${INSTALL_TARGET}-static @@ -1319,8 +1323,6 @@ set_target_properties(${INSTALL_TARGET}-static " ) endif() - else() - message(FATAL_ERROR "Unknown target type ${TARGET_TYPE} for install target ${INSTALL_TARGET}") endif() if(TARGET ${INSTALL_TARGET}-shared) @@ -1360,30 +1362,30 @@ set_target_properties(${INSTALL_TARGET}-static if(EXPORT_NAME) get_target_property(COR_FILE_NAME ${INSTALL_TARGET}-shared COR_FILE_NAME) - file(APPEND - ${CMAKE_BINARY_DIR}/corrosion/${EXTRA_TARGETS_EXPORT_NAME} - " + file(APPEND "${EXPORT_FILE_PATH}" +" add_library(${INSTALL_TARGET}-shared SHARED IMPORTED) set_target_properties(${INSTALL_TARGET}-shared PROPERTIES IMPORTED_LOCATION \"\${PACKAGE_PREFIX_DIR}/${DESTINATION}/${COR_FILE_NAME}\" ) " - ) + ) - get_target_property(COR_IMPLIB_FILE_NAME ${INSTALL_TARGET}-shared COR_IMPLIB_FILE_NAME) - if (NOT COR_IMPLIB_FILE_NAME MATCHES .*-NOTFOUND) - file(APPEND - ${CMAKE_BINARY_DIR}/corrosion/${EXTRA_TARGETS_EXPORT_NAME} - " + get_target_property(COR_IMPLIB_FILE_NAME ${INSTALL_TARGET}-shared COR_IMPLIB_FILE_NAME) + if (NOT COR_IMPLIB_FILE_NAME MATCHES .*-NOTFOUND) + file(APPEND "${EXPORT_FILE_PATH}" +" set_target_properties(${INSTALL_TARGET}-shared PROPERTIES IMPORTED_IMPLIB \"\${PACKAGE_PREFIX_DIR}/${DESTINATION}/${COR_IMPLIB_FILE_NAME}\" )" - ) - endif() + ) + endif() endif() endif() + else() + message(FATAL_ERROR "Unknown target type ${TARGET_TYPE} for install target ${INSTALL_TARGET}") endif() # Executables can also have export tables, so they _might_ also need header files