diff options
author | George Hazan <ghazan@miranda.im> | 2020-06-14 13:55:06 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-06-14 13:55:06 +0300 |
commit | 52e4ddcd83b3b64bcf97fdfcfa1120c87b7b3eb4 (patch) | |
tree | 991ccd18cf211ae6e956d9d06002e351cd7a174d /libs/libmdbx/src/cmake | |
parent | 8862cf78b01bb4b9ae0da13b8e6acbf94f7c1cbe (diff) |
fixes #2450 (Update libmdbx to 0.8.1)
Diffstat (limited to 'libs/libmdbx/src/cmake')
-rw-r--r-- | libs/libmdbx/src/cmake/compiler.cmake | 156 | ||||
-rw-r--r-- | libs/libmdbx/src/cmake/utils.cmake | 83 |
2 files changed, 150 insertions, 89 deletions
diff --git a/libs/libmdbx/src/cmake/compiler.cmake b/libs/libmdbx/src/cmake/compiler.cmake index a3bca1ac29..544a22d9fb 100644 --- a/libs/libmdbx/src/cmake/compiler.cmake +++ b/libs/libmdbx/src/cmake/compiler.cmake @@ -64,11 +64,11 @@ endmacro(check_compiler_flag) # We support building with Clang and gcc. First check # what we're using for build. -if(CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER_ID STREQUAL "Clang") +if(CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER_ID MATCHES ".*[Cc][Ll][Aa][Nn][Gg].*") set(CMAKE_COMPILER_IS_CLANG ON) set(CMAKE_COMPILER_IS_GNUCC OFF) endif() -if(CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXx_COMPILER_ID STREQUAL "Clang") +if(CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER_ID MATCHES ".*[Cc][Ll][Aa][Nn][Gg].*") set(CMAKE_COMPILER_IS_CLANG ON) set(CMAKE_COMPILER_IS_GNUCXX OFF) endif() @@ -161,40 +161,47 @@ if(NOT DEFINED IOS) endif() endif() +if(NOT DEFINED CMAKE_TARGET_BITNESS) + if (CMAKE_SIZEOF_VOID_P LESS 4) + set(CMAKE_TARGET_BITNESS 16) + elseif (CMAKE_SIZEOF_VOID_P LESS 8) + set(CMAKE_TARGET_BITNESS 32) + else() + set(CMAKE_TARGET_BITNESS 64) + endif() +endif() + if(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*") set(E2K TRUE) set(CMAKE_SYSTEM_ARCH "Elbrus") -elseif((MSVC64 OR MINGW64) AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif((MSVC64 OR MINGW64) AND CMAKE_TARGET_BITNESS EQUAL 64) set(X86_64 TRUE) set(CMAKE_SYSTEM_ARCH "x86_64") elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING)) set(X86_32 TRUE) set(CMAKE_SYSTEM_ARCH "x86") -elseif(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*") - set(E2K TRUE) - set(CMAKE_SYSTEM_ARCH "Elbrus") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) set(X86_64 TRUE) set(CMAKE_SYSTEM_ARCH "x86_64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") set(X86_32 TRUE) set(CMAKE_SYSTEM_ARCH "x86") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|ARM64.*)" AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|ARM64.*)" AND CMAKE_TARGET_BITNESS EQUAL 64) set(AARCH64 TRUE) set(CMAKE_SYSTEM_ARCH "ARM64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") set(ARM32 TRUE) set(CMAKE_SYSTEM_ARCH "ARM") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le.*" AND CMAKE_TARGET_BITNESS EQUAL 64) set(PPC64LE TRUE) set(CMAKE_SYSTEM_ARCH "PPC64LE") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) set(PPC64 TRUE) set(CMAKE_SYSTEM_ARCH "PPC64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc).*") set(PPC32 TRUE) set(CMAKE_SYSTEM_ARCH "PPC") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS)64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS)64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) set(MIPS64 TRUE) set(CMAKE_SYSTEM_ARCH "MIPS64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS).*") @@ -213,7 +220,9 @@ else() check_compiler_flag("-Wextra" CC_HAS_WEXTRA) check_compiler_flag("-Werror" CC_HAS_WERROR) check_compiler_flag("-fexceptions" CC_HAS_FEXCEPTIONS) - check_cxx_compiler_flag("-fcxx-exceptions" CC_HAS_FCXX_EXCEPTIONS) + if(CMAKE_CXX_COMPILER_LOADED) + check_cxx_compiler_flag("-fcxx-exceptions" CC_HAS_FCXX_EXCEPTIONS) + endif() check_compiler_flag("-funwind-tables" CC_HAS_FUNWIND_TABLES) check_compiler_flag("-fno-omit-frame-pointer" CC_HAS_FNO_OMIT_FRAME_POINTER) check_compiler_flag("-fno-common" CC_HAS_FNO_COMMON) @@ -229,10 +238,17 @@ else() # Check for an omp support set(CMAKE_REQUIRED_FLAGS "-fopenmp -Werror") - check_cxx_source_compiles("int main(void) { - #pragma omp parallel - return 0; - }" HAVE_OPENMP) + if(CMAKE_CXX_COMPILER_LOADED) + check_cxx_source_compiles("int main(void) { + #pragma omp parallel + return 0; + }" HAVE_OPENMP) + else() + check_c_source_compiles("int main(void) { + #pragma omp parallel + return 0; + }" HAVE_OPENMP) + endif() set(CMAKE_REQUIRED_FLAGS "") endif() @@ -312,61 +328,81 @@ if(CMAKE_COMPILER_IS_CLANG) execute_process(COMMAND ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} -print-search-dirs OUTPUT_VARIABLE clang_search_dirs RESULT_VARIABLE clang_probe_result ERROR_QUIET) - unset(clang_bindir) - unset(clang_libdir) + unset(clang_bindirs) + unset(clang_libdirs) if(clang_probe_result EQUAL 0) - string(REGEX MATCH "^(.*programs: =)([^:]*:)*([^:]+/llvm[-.0-9]+/bin[^:]*)(:[^:]*)*(\n.+)$" clang_bindir_valid ${clang_search_dirs}) - if(clang_bindir_valid) - string(REGEX REPLACE "^(.*programs: =)([^:]*:)*([^:]+/llvm[-.0-9]+/bin[^:]*)(:[^:]*)*(\n.+)$" "\\3" clang_bindir ${clang_search_dirs}) - if(CMAKE_SYSTEM_NAME STREQUAL "WINDOWS") - set(clang_libdir ${clang_bindir}) - else() - get_filename_component(clang_libdir "${clang_bindir}/../lib" REALPATH) - endif() + string(REGEX MATCH "(^|\n.*)(.*programs: =)([^\n]+)((\n.*)|$)" regexp_valid ${clang_search_dirs}) + if(regexp_valid) + string(REGEX REPLACE "(^|\n.*)(.*programs: =)([^\n]+)((\n.*)|$)" "\\3" list ${clang_search_dirs}) + string(REPLACE ":" ";" list "${list}") + #set(clang_bindirs "") + foreach(dir IN LISTS list) + get_filename_component(dir "${dir}" REALPATH) + list(APPEND clang_bindirs "${dir}") + endforeach() + list(REMOVE_DUPLICATES clang_bindirs) + endif() + string(REGEX MATCH "(^|\n.*)(.*libraries: =)([^\n]+)((\n.*)|$)" regexp_valid ${clang_search_dirs}) + if(regexp_valid) + string(REGEX REPLACE "(^|\n.*)(.*libraries: =)([^\n]+)((\n.*)|$)" "\\3" list ${clang_search_dirs}) + string(REPLACE ":" ";" list "${list}") + #set(clang_libdirs "") + foreach(dir IN LISTS list) + get_filename_component(dir "${dir}" REALPATH) + list(APPEND clang_libdirs "${dir}") + endforeach() + list(REMOVE_DUPLICATES clang_libdirs) endif() else() - get_filename_component(clang_bindir ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} DIRECTORY) + get_filename_component(clang_bindirs ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} DIRECTORY) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") - set(clang_libdir ${clang_bindir}) + set(clang_libdirs ${clang_bindirs}) else() - get_filename_component(clang_libdir "${clang_bindir}/../lib" REALPATH) + get_filename_component(clang_libdirs "${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER}/../lib" REALPATH) endif() endif() - if(clang_bindir AND clang_libdir) - message(STATUS "Found CLANG/LLVM directories: ${clang_bindir}, ${clang_libdir}") + if(clang_bindirs AND clang_libdirs) + message(STATUS "Found CLANG/LLVM directories: ${clang_bindirs}, ${clang_libdirs}") else() message(STATUS "Could NOT find CLANG/LLVM directories (bin and/or lib).") endif() - if(NOT CMAKE_CLANG_LD AND clang_bindir) - find_program(CMAKE_CLANG_LD NAMES lld-link ld.lld ld64.lld lld-link llvm-link link llvm-ld ld PATHS ${clang_bindir} NO_DEFAULT_PATH) + if(NOT CMAKE_CLANG_LD AND clang_bindirs) + find_program(CMAKE_CLANG_LD NAMES lld-link ld.lld "ld${CMAKE_TARGET_BITNESS}.lld" lld llvm-link llvm-ld PATHS ${clang_bindirs} NO_DEFAULT_PATH) endif() - if(NOT CMAKE_CLANG_AR AND clang_bindir) - find_program(CMAKE_CLANG_AR NAMES llvm-ar ar PATHS ${clang_bindir} NO_DEFAULT_PATH) + if(NOT CMAKE_CLANG_AR AND clang_bindirs) + find_program(CMAKE_CLANG_AR NAMES llvm-ar ar PATHS ${clang_bindirs} NO_DEFAULT_PATH) endif() - if(NOT CMAKE_CLANG_NM AND clang_bindir) - find_program(CMAKE_CLANG_NM NAMES llvm-nm nm PATHS ${clang_bindir} NO_DEFAULT_PATH) + if(NOT CMAKE_CLANG_NM AND clang_bindirs) + find_program(CMAKE_CLANG_NM NAMES llvm-nm nm PATHS ${clang_bindirs} NO_DEFAULT_PATH) endif() - if(NOT CMAKE_CLANG_RANLIB AND clang_bindir) - find_program(CMAKE_CLANG_RANLIB NAMES llvm-ranlib ranlib PATHS ${clang_bindir} NO_DEFAULT_PATH) + if(NOT CMAKE_CLANG_RANLIB AND clang_bindirs) + find_program(CMAKE_CLANG_RANLIB NAMES llvm-ranlib ranlib PATHS ${clang_bindirs} NO_DEFAULT_PATH) endif() set(clang_lto_plugin_name "LLVMgold${CMAKE_SHARED_LIBRARY_SUFFIX}") - if(NOT CMAKE_LD_GOLD AND clang_bindir) - find_program(CMAKE_LD_GOLD NAMES ld.gold PATHS) + if(NOT CMAKE_LD_GOLD AND clang_bindirs) + find_program(CMAKE_LD_GOLD NAMES ld.gold PATHS ${clang_bindirs}) endif() - if(NOT CLANG_LTO_PLUGIN AND clang_libdir) - find_file(CLANG_LTO_PLUGIN ${clang_lto_plugin_name} PATH ${clang_libdir} NO_DEFAULT_PATH) + if(NOT CLANG_LTO_PLUGIN AND clang_libdirs) + find_file(CLANG_LTO_PLUGIN ${clang_lto_plugin_name} PATHS ${clang_libdirs} NO_DEFAULT_PATH) endif() + if(CLANG_LTO_PLUGIN) message(STATUS "Found CLANG/LLVM's plugin for LTO: ${CLANG_LTO_PLUGIN}") else() message(STATUS "Could NOT find CLANG/LLVM's plugin (${clang_lto_plugin_name}) for LTO.") endif() - if(CMAKE_CLANG_LD AND CMAKE_CLANG_AR AND CMAKE_CLANG_NM AND CMAKE_CLANG_RANLIB) - message(STATUS "Found CLANG/LLVM's binutils for LTO: ${CMAKE_CLANG_AR}, ${CMAKE_CLANG_RANLIB}") + if(CMAKE_CLANG_LD) + message(STATUS "Found CLANG/LLVM's linker for LTO: ${CMAKE_CLANG_LD}") + else() + message(STATUS "Could NOT find CLANG/LLVM's linker (lld, llvm-ld, llvm-link) for LTO.") + endif() + + if(CMAKE_CLANG_AR AND CMAKE_CLANG_RANLIB AND CMAKE_CLANG_NM) + message(STATUS "Found CLANG/LLVM's binutils for LTO: ${CMAKE_CLANG_AR}, ${CMAKE_CLANG_RANLIB}, ${CMAKE_CLANG_NM}") else() message(STATUS "Could NOT find CLANG/LLVM's binutils (ar, ranlib, nm) for LTO.") endif() @@ -378,12 +414,19 @@ if(CMAKE_COMPILER_IS_CLANG) unset(clang_search_dirs) endif() - if((CLANG_LTO_PLUGIN AND CMAKE_LD_GOLD) OR - (CMAKE_CLANG_LD AND CMAKE_CLANG_AR AND CMAKE_CLANG_NM AND CMAKE_CLANG_RANLIB)) + if (CMAKE_CLANG_AR AND CMAKE_CLANG_NM AND CMAKE_CLANG_RANLIB + AND ((CLANG_LTO_PLUGIN AND CMAKE_LD_GOLD) + OR (CMAKE_CLANG_LD + AND NOT (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" + AND CMAKE_SYSTEM_NAME STREQUAL "Linux")) + OR APPLE)) set(CLANG_LTO_AVAILABLE TRUE) message(STATUS "Link-Time Optimization by CLANG/LLVM is available") elseif(CMAKE_TOOLCHAIN_FILE AND NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 7.0) set(CLANG_LTO_AVAILABLE TRUE) + if(NOT CMAKE_CLANG_LD) + set(CMAKE_CLANG_LD ${CMAKE_LINKER}) + endif() if(NOT CMAKE_CLANG_AR) set(CMAKE_CLANG_AR ${CMAKE_AR}) endif() @@ -442,9 +485,6 @@ endif() macro(setup_compile_flags) # save initial C/CXX flags if(NOT INITIAL_CMAKE_FLAGS_SAVED) - if(MSVC) - string(REGEX REPLACE "^(.*)(/EHsc)( *)(.*)$" "\\1/EHs\\3\\4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - endif() set(INITIAL_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "Initial CMake's flags" FORCE) set(INITIAL_CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "Initial CMake's flags" FORCE) set(INITIAL_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} CACHE STRING "Initial CMake's flags" FORCE) @@ -468,6 +508,22 @@ macro(setup_compile_flags) if(CC_HAS_FCXX_EXCEPTIONS) add_compile_flags("CXX" "-fcxx-exceptions -frtti") endif() + if(MSVC) + # checks for /EHa or /clr options exists, + # i.e. is enabled structured async WinNT exceptions + string(REGEX MATCH "^(.* )*[-/]EHc*a( .*)*$" msvc_async_eh_enabled "${CXX_FLAGS}" "${C_FLAGS}") + string(REGEX MATCH "^(.* )*[-/]clr( .*)*$" msvc_clr_enabled "${CXX_FLAGS}" "${C_FLAGS}") + # remote any /EH? options + string(REGEX REPLACE "( *[-/]-*EH[csa]+ *)+" "" CXX_FLAGS "${CXX_FLAGS}") + string(REGEX REPLACE "( *[-/]-*EH[csa]+ *)+" "" C_FLAGS "${C_FLAGS}") + if (msvc_clr_enabled STREQUAL "") + if(NOT msvc_async_eh_enabled STREQUAL "") + add_compile_flags("C;CXX" "/EHa") + else() + add_compile_flags("C;CXX" "/EHsc") + endif() + endif() + endif(MSVC) if(CC_HAS_WNO_ATTRIBUTES AND CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG} AND CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 9) diff --git a/libs/libmdbx/src/cmake/utils.cmake b/libs/libmdbx/src/cmake/utils.cmake index 13add097dc..8e98267f4e 100644 --- a/libs/libmdbx/src/cmake/utils.cmake +++ b/libs/libmdbx/src/cmake/utils.cmake @@ -61,7 +61,7 @@ macro(set_source_files_compile_flags) unset(_lang) endmacro(set_source_files_compile_flags) -macro(fetch_version name version_file parent_scope) +macro(fetch_version name source_root_directory parent_scope) set(${name}_VERSION "") set(${name}_GIT_DESCRIBE "") set(${name}_GIT_TIMESTAMP "") @@ -69,11 +69,11 @@ macro(fetch_version name version_file parent_scope) set(${name}_GIT_COMMIT "") set(${name}_GIT_REVISION 0) set(${name}_GIT_VERSION "") - if(GIT AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + if(GIT AND EXISTS "${source_root_directory}/.git") execute_process(COMMAND ${GIT} describe --tags --long --dirty=-dirty OUTPUT_VARIABLE ${name}_GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_DESCRIBE" STREQUAL "") message(FATAL_ERROR "Please fetch tags and/or install latest version of git ('describe --tags --long --dirty' failed)") @@ -82,13 +82,13 @@ macro(fetch_version name version_file parent_scope) execute_process(COMMAND ${GIT} show --no-patch --format=%cI HEAD OUTPUT_VARIABLE ${name}_GIT_TIMESTAMP OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_TIMESTAMP" STREQUAL "%cI") execute_process(COMMAND ${GIT} show --no-patch --format=%ci HEAD OUTPUT_VARIABLE ${name}_GIT_TIMESTAMP OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_TIMESTAMP" STREQUAL "%ci") message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%cI HEAD' failed)") @@ -98,7 +98,7 @@ macro(fetch_version name version_file parent_scope) execute_process(COMMAND ${GIT} show --no-patch --format=%T HEAD OUTPUT_VARIABLE ${name}_GIT_TREE OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_TREE" STREQUAL "") message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%T HEAD' failed)") @@ -107,19 +107,36 @@ macro(fetch_version name version_file parent_scope) execute_process(COMMAND ${GIT} show --no-patch --format=%H HEAD OUTPUT_VARIABLE ${name}_GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_COMMIT" STREQUAL "") message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%H HEAD' failed)") endif() - execute_process(COMMAND ${GIT} rev-list --count --no-merges HEAD + execute_process(COMMAND ${GIT} tag --sort=-version:refname + OUTPUT_VARIABLE tag_list + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${source_root_directory} + RESULT_VARIABLE rc) + if(rc) + message(FATAL_ERROR "Please install latest version of git ('tag --sort=-version:refname' failed)") + endif() + string(REGEX REPLACE "\n" ";" tag_list "${tag_list}") + set(last_release_tag "") + set(git_revlist_arg "HEAD") + foreach(tag IN LISTS tag_list) + if(NOT last_release_tag) + string(REGEX MATCH "^v[0-9]+(\.[0-9]+)+" last_release_tag "${tag}") + set(git_revlist_arg "${tag}..HEAD") + endif() + endforeach(tag) + execute_process(COMMAND ${GIT} rev-list --count "${git_revlist_arg}" OUTPUT_VARIABLE ${name}_GIT_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + WORKING_DIRECTORY ${source_root_directory} RESULT_VARIABLE rc) if(rc OR "${name}_GIT_REVISION" STREQUAL "") - message(FATAL_ERROR "Please install latest version of git ('rev-list --count --no-merges HEAD' failed)") + message(FATAL_ERROR "Please install latest version of git ('rev-list --count ${git_revlist_arg}' failed)") endif() string(REGEX MATCH "^(v)?([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" git_version_valid "${${name}_GIT_DESCRIBE}") @@ -136,8 +153,8 @@ macro(fetch_version name version_file parent_scope) endif() endif() - if(NOT ${name}_GIT_VERSION OR NOT ${name}_GIT_TIMESTAMP OR NOT ${name}_GIT_REVISION) - if(GIT AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + if(NOT ${name}_GIT_VERSION OR NOT ${name}_GIT_TIMESTAMP OR ${name}_GIT_REVISION STREQUAL "") + if(GIT AND EXISTS "${source_root_directory}/.git") message(WARNING "Unable to retrive ${name} version from git.") endif() set(${name}_GIT_VERSION "0;0;0;0") @@ -145,8 +162,9 @@ macro(fetch_version name version_file parent_scope) set(${name}_GIT_REVISION 0) # Try to get version from VERSION file + set(version_file "${source_root_directory}/VERSION") if(EXISTS "${version_file}") - file(STRINGS "${version_file}" ${name}_VERSION) + file(STRINGS "${version_file}" ${name}_VERSION LIMIT_COUNT 1 LIMIT_INPUT 42) endif() if(NOT ${name}_VERSION) @@ -168,32 +186,19 @@ macro(fetch_version name version_file parent_scope) list(GET ${name}_VERSION_LIST 2 "${name}_VERSION_RELEASE") list(GET ${name}_VERSION_LIST 3 "${name}_VERSION_REVISION") - if(parent_scope) - set(${name}_VERSION_MAJOR ${${name}_VERSION_MAJOR} PARENT_SCOPE) - set(${name}_VERSION_MINOR ${${name}_VERSION_MINOR} PARENT_SCOPE) - set(${name}_VERSION_RELEASE ${${name}_VERSION_RELEASE} PARENT_SCOPE) - set(${name}_VERSION_REVISION ${${name}_VERSION_REVISION} PARENT_SCOPE) - set(${name}_VERSION ${${name}_VERSION} PARENT_SCOPE) - - set(${name}_GIT_DESCRIBE ${${name}_GIT_DESCRIBE} PARENT_SCOPE) - set(${name}_GIT_TIMESTAMP ${${name}_GIT_TIMESTAMP} PARENT_SCOPE) - set(${name}_GIT_TREE ${${name}_GIT_TREE} PARENT_SCOPE) - set(${name}_GIT_COMMIT ${${name}_GIT_COMMIT} PARENT_SCOPE) - set(${name}_GIT_REVISION ${${name}_GIT_REVISION} PARENT_SCOPE) - set(${name}_GIT_VERSION ${${name}_GIT_VERSION} PARENT_SCOPE) - else() - set(${name}_VERSION_MAJOR ${${name}_VERSION_MAJOR}) - set(${name}_VERSION_MINOR ${${name}_VERSION_MINOR}) - set(${name}_VERSION_RELEASE ${${name}_VERSION_RELEASE}) - set(${name}_VERSION_REVISION ${${name}_VERSION_REVISION}) - set(${name}_VERSION ${${name}_VERSION}) - - set(${name}_GIT_DESCRIBE ${${name}_GIT_DESCRIBE}) - set(${name}_GIT_TIMESTAMP ${${name}_GIT_TIMESTAMP}) - set(${name}_GIT_TREE ${${name}_GIT_TREE}) - set(${name}_GIT_COMMIT ${${name}_GIT_COMMIT}) - set(${name}_GIT_REVISION ${${name}_GIT_REVISION}) - set(${name}_GIT_VERSION ${${name}_GIT_VERSION}) + if(${parent_scope}) + set(${name}_VERSION_MAJOR "${${name}_VERSION_MAJOR}" PARENT_SCOPE) + set(${name}_VERSION_MINOR "${${name}_VERSION_MINOR}" PARENT_SCOPE) + set(${name}_VERSION_RELEASE "${${name}_VERSION_RELEASE}" PARENT_SCOPE) + set(${name}_VERSION_REVISION "${${name}_VERSION_REVISION}" PARENT_SCOPE) + set(${name}_VERSION "${${name}_VERSION}" PARENT_SCOPE) + + set(${name}_GIT_DESCRIBE "${${name}_GIT_DESCRIBE}" PARENT_SCOPE) + set(${name}_GIT_TIMESTAMP "${${name}_GIT_TIMESTAMP}" PARENT_SCOPE) + set(${name}_GIT_TREE "${${name}_GIT_TREE}" PARENT_SCOPE) + set(${name}_GIT_COMMIT "${${name}_GIT_COMMIT}" PARENT_SCOPE) + set(${name}_GIT_REVISION "${${name}_GIT_REVISION}" PARENT_SCOPE) + set(${name}_GIT_VERSION "${${name}_GIT_VERSION}" PARENT_SCOPE) endif() endmacro(fetch_version) |