mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	build: rework --version generation
Having a dynamically generated string is more maintainable than having multiple files. Also add linker flags and any potential LTO flags to the --version output.
This commit is contained in:
		@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
		Reference in New Issue
	
	Block a user