summaryrefslogtreecommitdiffstats
path: root/cmake/AddTargetWithResourceFile.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/AddTargetWithResourceFile.cmake')
-rw-r--r--cmake/AddTargetWithResourceFile.cmake119
1 files changed, 119 insertions, 0 deletions
diff --git a/cmake/AddTargetWithResourceFile.cmake b/cmake/AddTargetWithResourceFile.cmake
new file mode 100644
index 0000000..355902e
--- /dev/null
+++ b/cmake/AddTargetWithResourceFile.cmake
@@ -0,0 +1,119 @@
+set(add_resource_macro_internal_dir ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "")
+
+macro(AddTargetWithResourceFile nameAndTarget is_exe version sources)
+ list(LENGTH ${nameAndTarget} target_length)
+ if (target_length GREATER 1)
+ list(GET ${nameAndTarget} 1 name)
+ list(GET ${nameAndTarget} 0 target)
+ else()
+ set(name ${nameAndTarget})
+ set(target ${nameAndTarget})
+ endif()
+
+ set(VERSIONING OFF)
+ set(IS_EXE OFF)
+ if ("${is_exe}" MATCHES "TRUE")
+ set(IS_EXE ON)
+ elseif ("${is_exe}" MATCHES "WIN32")
+ set(IS_EXE ON)
+ set(exe_options "WIN32")
+ elseif ("${is_exe}" MATCHES "SHARED")
+ set(lib_options "SHARED")
+ elseif ("${is_exe}" MATCHES "STATIC")
+ set(lib_options "STATIC")
+ endif()
+
+ if (IS_EXE AND WITH_BINARY_VERSIONING)
+ set(VERSIONING ON)
+ elseif (NOT IS_EXE AND WITH_LIBRARY_VERSIONING)
+ set(VERSIONING ON)
+ endif()
+ if (${ARGC} GREATER 4)
+ set(VERSIONING ${ARGV5})
+ endif()
+
+ string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*"
+ RC_PROGRAM_VERSION_MATCH ${version})
+ set (RC_VERSION_MAJOR ${CMAKE_MATCH_1})
+ set (RC_VERSION_MINOR ${CMAKE_MATCH_2})
+ set (RC_VERSION_BUILD ${CMAKE_MATCH_3})
+
+ if (WIN32)
+ if (IS_EXE)
+ if (VERSIONING)
+ set (RC_VERSION_FILE "${name}${RC_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}" )
+ else()
+ set (RC_VERSION_FILE "${name}${CMAKE_EXECUTABLE_SUFFIX}" )
+ endif()
+ else()
+ if (VERSIONING)
+ set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${name}${RC_VERSION_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
+ else()
+ set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
+ endif()
+ endif()
+
+ configure_file(
+ ${add_resource_macro_internal_dir}/WindowsDLLVersion.rc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/version.rc
+ @ONLY
+ )
+
+ list(APPEND ${sources} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ endif()
+
+ set(OUTPUT_FILENAME "${name}")
+ if (VERSIONING)
+ string(APPEND OUTPUT_FILENAME "${RC_VERSION_MAJOR}")
+ endif()
+
+ if (IS_EXE)
+ message("add_executable(${target}) [${exe_options}]")
+ add_executable(
+ ${target}
+ ${exe_options}
+ ${${sources}}
+ )
+
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ OUTPUT_NAME ${OUTPUT_FILENAME}
+ )
+ string(APPEND OUTPUT_FILENAME "${CMAKE_EXECUTABLE_SUFFIX}")
+ else()
+ message("add_library(${target}) [${lib_options}]")
+ add_library(${target}
+ ${lib_options}
+ ${${sources}})
+
+ if (VERSIONING)
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ VERSION ${version}
+ SOVERSION ${RC_VERSION_MAJOR}
+ )
+ else()
+ set_target_properties(${target} PROPERTIES PREFIX "")
+ endif()
+
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ OUTPUT_NAME ${OUTPUT_FILENAME}
+ )
+ set (OUTPUT_FILENAME "${CMAKE_SHARED_LIBRARY_PREFIX}${OUTPUT_FILENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
+ endif()
+
+
+ if (WITH_DEBUG_SYMBOLS AND MSVC AND (is_exe OR BUILD_SHARED_LIBS))
+ message("add PDB for ${OUTPUT_FILENAME}")
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ PDB_NAME ${OUTPUT_FILENAME}
+ )
+ install(FILES $<TARGET_PDB_FILE:${target}> DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
+ endif()
+endmacro()