aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake.config/CMakeLists.txt46
-rw-r--r--cmake.config/versiondef.h.in2
-rw-r--r--cmake.config/versiondef_old.h.in21
3 files changed, 37 insertions, 32 deletions
diff --git a/cmake.config/CMakeLists.txt b/cmake.config/CMakeLists.txt
index ed405c602e..70979dd208 100644
--- a/cmake.config/CMakeLists.txt
+++ b/cmake.config/CMakeLists.txt
@@ -139,17 +139,43 @@ configure_file (
"${PROJECT_BINARY_DIR}/cmake.config/auto/config.h"
)
-# Prevent double space in --version output if CMAKE_C_FLAGS is empty
-set(C_FLAGS_VERSION_OUTPUT ${CMAKE_C_FLAGS})
-if(C_FLAGS_VERSION_OUTPUT)
- string(PREPEND C_FLAGS_VERSION_OUTPUT " ")
-endif()
+set(VERSION_STRING "${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} ")
-if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15)
- configure_file(versiondef.h.in auto/versiondef.h.gen)
-else()
- configure_file(versiondef_old.h.in auto/versiondef.h.gen)
-endif()
+foreach(BUILD_TYPE Debug Release RelWithDebInfo MinSizeRel)
+ string(TOUPPER ${BUILD_TYPE} BUILD_TYPE_UPPER)
+ set(GEN_CONFIG "$<CONFIG:${BUILD_TYPE}>")
+
+ set(GEN_RHS "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}} ")
+ string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>")
+
+ set(GEN_RHS "$<$<BOOL:$<TARGET_PROPERTY:nvim,INTERPROCEDURAL_OPTIMIZATION_${BUILD_TYPE_UPPER}>>:${CMAKE_C_COMPILE_OPTIONS_IPO}>")
+ string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>")
+endforeach()
+
+string(APPEND VERSION_STRING " ")
+
+function(append_target_expression)
+ cmake_parse_arguments(ARG
+ ""
+ "PREFIX;PROPERTY"
+ ""
+ ${ARGN})
+
+ set(TARGET_EXPRESSION "$<TARGET_PROPERTY:nvim,${ARG_PROPERTY}>")
+ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15)
+ set(TARGET_EXPRESSION "$<REMOVE_DUPLICATES:${TARGET_EXPRESSION}>")
+ endif()
+ set(TARGET_EXPRESSION "${ARG_PREFIX}$<JOIN:${TARGET_EXPRESSION}, ${ARG_PREFIX}>")
+
+ set(VERSION_STRING "${VERSION_STRING} ${TARGET_EXPRESSION} " PARENT_SCOPE)
+endfunction()
+append_target_expression(PROPERTY COMPILE_OPTIONS)
+append_target_expression(PROPERTY LINK_FLAGS) # TODO(dundargoc): Replace/complement with LINK_OPTIONS when minimum version is 3.13+
+append_target_expression(PREFIX "-D" PROPERTY COMPILE_DEFINITIONS)
+append_target_expression(PREFIX "-I" PROPERTY INCLUDE_DIRECTORIES)
+string(REPLACE " " " " VERSION_STRING "${VERSION_STRING}") # Remove duplicate whitespace
+
+configure_file(versiondef.h.in auto/versiondef.h.gen)
file(GENERATE
OUTPUT "${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef-$<CONFIG>.h"
diff --git a/cmake.config/versiondef.h.in b/cmake.config/versiondef.h.in
index bda21b27ec..d03e56130c 100644
--- a/cmake.config/versiondef.h.in
+++ b/cmake.config/versiondef.h.in
@@ -15,7 +15,7 @@
#define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@
#define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@
-#define NVIM_VERSION_CFLAGS "${CMAKE_C_COMPILER}${C_FLAGS_VERSION_OUTPUT} $<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL}> $<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_OPTIONS>, > -D$<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_DEFINITIONS>, -D> -I$<JOIN:$<REMOVE_DUPLICATES:$<TARGET_PROPERTY:nvim,INCLUDE_DIRECTORIES>>, -I>"
+#define NVIM_VERSION_CFLAGS "${VERSION_STRING}"
#define NVIM_VERSION_BUILD_TYPE "$<CONFIG>"
#endif // AUTO_VERSIONDEF_H
diff --git a/cmake.config/versiondef_old.h.in b/cmake.config/versiondef_old.h.in
deleted file mode 100644
index 4e21e0c7be..0000000000
--- a/cmake.config/versiondef_old.h.in
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef AUTO_VERSIONDEF_H
-#define AUTO_VERSIONDEF_H
-
-#define NVIM_VERSION_MAJOR @NVIM_VERSION_MAJOR@
-#define NVIM_VERSION_MINOR @NVIM_VERSION_MINOR@
-#define NVIM_VERSION_PATCH @NVIM_VERSION_PATCH@
-#define NVIM_VERSION_PRERELEASE "@NVIM_VERSION_PRERELEASE@"
-
-#cmakedefine NVIM_VERSION_MEDIUM "@NVIM_VERSION_MEDIUM@"
-#ifndef NVIM_VERSION_MEDIUM
-# include "auto/versiondef_git.h"
-#endif
-
-#define NVIM_API_LEVEL @NVIM_API_LEVEL@
-#define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@
-#define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@
-
-#define NVIM_VERSION_CFLAGS "${CMAKE_C_COMPILER}${C_FLAGS_VERSION_OUTPUT} $<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL}> $<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_OPTIONS>, > -D$<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_DEFINITIONS>, -D> -I$<JOIN:$<TARGET_PROPERTY:nvim,INCLUDE_DIRECTORIES>, -I>"
-#define NVIM_VERSION_BUILD_TYPE "$<CONFIG>"
-
-#endif // AUTO_VERSIONDEF_H