diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e190b7493d..84b3a865acf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,43 +31,33 @@ include(VersionMacros) include(SetupTargetMacros) include(InstallDirectoryPermissions) include(MASSigning) +include(utils) +#---------- configuration ----------# set(BLOCKCHAIN_NAME "EOSIO") set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_EXTENSIONS ON) set(CXX_STANDARD_REQUIRED ON) -execute_process(COMMAND git describe --tags - OUTPUT_VARIABLE GIT_TAG_RAW - ERROR_QUIET) -string(STRIP ${GIT_TAG_RAW} GIT_TAG) -string(REGEX REPLACE "^v" "" SEMVER_TMP_1 ${GIT_TAG}) -string(REPLACE "." ";" SEMVER_TMP_LIST ${SEMVER_TMP_1}) -list(GET SEMVER_TMP_LIST 0 SEMVER_MAJOR) # SEMVER_MAJOR.X.X -list(GET SEMVER_TMP_LIST 1 SEMVER_MINOR) # SEMVER_MAJOR.SEMVER_MINOR.X -list(GET SEMVER_TMP_LIST 2 SEMVER_TMP_PATCH) -string(REPLACE "-" ";" SEMVER_TMP_PATCH_LIST ${SEMVER_TMP_PATCH}) -list(GET SEMVER_TMP_PATCH_LIST 0 SEMVER_PATCH) # SEMVER_MAJOR.SEMVER_MINOR.SEMVER_PATCH -set(SEMVER_FULL "${SEMVER_MAJOR}.${SEMVER_MINOR}.${SEMVER_PATCH}") - -message(STATUS "${PROJECT} version: ${SEMVER_FULL} (semver), ${GIT_TAG} (git)") - -set(VERSION_MAJOR ${SEMVER_MAJOR}) -set(VERSION_MINOR ${SEMVER_MINOR}) -set(VERSION_PATCH ${SEMVER_PATCH}) - -if(VERSION_SUFFIX) - set(VERSION_FULL "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_SUFFIX}") -else() - set(VERSION_FULL "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") -endif() +set(CLI_CLIENT_EXECUTABLE_NAME ${PROJECT}-cli) +set(NODE_EXECUTABLE_NAME ${PROJECT}-node) +set(KEY_STORE_EXECUTABLE_NAME ${PROJECT}-wallet) +set(GUI_CLIENT_EXECUTABLE_NAME ${PROJECT}) +set(CUSTOM_URL_SCHEME "gcs") +set(INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347") + +#---------- version ----------# +get_version_from_git(VERSION_FULL VERSION_DIRTY) -set( CLI_CLIENT_EXECUTABLE_NAME ${PROJECT}-cli ) -set( NODE_EXECUTABLE_NAME ${PROJECT}-node ) -set( KEY_STORE_EXECUTABLE_NAME ${PROJECT}-wallet ) -set( GUI_CLIENT_EXECUTABLE_NAME ${PROJECT} ) -set( CUSTOM_URL_SCHEME "gcs" ) -set( INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347" ) +# set VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +get_version_component("${VERSION_FULL}" 0 VERSION_MAJOR) +get_version_component("${VERSION_FULL}" 1 VERSION_MINOR) +get_version_component("${VERSION_FULL}" 2 VERSION_PATCH) + +message(STATUS "${PROJECT} version: ${VERSION_FULL} (semver), ${VERSION_DIRTY} (git)") +message(STATUS " VERSION_MAJOR = ${VERSION_MAJOR}") +message(STATUS " VERSION_MINOR = ${VERSION_MINOR}") +message(STATUS " VERSION_PATCH = ${VERSION_PATCH}") # http://stackoverflow.com/a/18369825 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") @@ -222,7 +212,6 @@ if(ENABLE_TX_SPONSORSHIP) add_definitions(-DENABLE_TX_SPONSORSHIP) endif() -include(utils) ### if("${CORE_SYMBOL_NAME}" STREQUAL "") @@ -274,6 +263,9 @@ install(FILES ${CMAKE_BINARY_DIR}/modules/eosio-config.cmake DESTINATION ${CMAKE configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/EosioTester.cmake.in ${CMAKE_BINARY_DIR}/modules/EosioTester.cmake @ONLY) install(FILES ${CMAKE_BINARY_DIR}/modules/EosioTester.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT}) +# for contracts repository +install(FILES ${CMAKE_SOURCE_DIR}/CMakeModules/utils.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT}/ RENAME ${PROJECT}-utils.cmake) + configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_BINARY_DIR}/licenses/${PROJECT}/LICENSE COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/wabt/LICENSE diff --git a/CMakeModules/utils.cmake b/CMakeModules/utils.cmake index 2b15f3d7d28..6376a75cd49 100644 --- a/CMakeModules/utils.cmake +++ b/CMakeModules/utils.cmake @@ -2,3 +2,42 @@ macro( copy_bin file ) add_custom_command( TARGET ${file} POST_BUILD COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin ) add_custom_command( TARGET ${file} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${file} ${CMAKE_BINARY_DIR}/bin/ ) endmacro( copy_bin ) + +# +# Set variable ${out_semver} to a semantic version taken from a git tag. +# Set variable ${out_dirty} to a current (probably dirty) git tag. +# +# Semantic version is a 3-component string "X.Y.Z". +# +# Example: +# +# get_version_from_git(semver dirty) +# message(STATUS "semver = ${semver}, dirty git version = ${dirty}") +# +function(get_version_from_git out_semver out_dirty) + execute_process( + COMMAND git describe --tags --dirty + OUTPUT_VARIABLE git_tag_raw + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + + string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" semver "${git_tag_raw}") + + # return + set(${out_semver} "${semver}" PARENT_SCOPE) + set(${out_dirty} "${git_tag_raw}" PARENT_SCOPE) +endfunction() + +# +# get_version_component("11.22.33" 0 x) # => x = 11 +# get_version_component("11.22.33" 1 x) # => x = 22 +# get_version_component("11.22.33" 2 x) # => x = 33 +# +function(get_version_component semantic_version component_index out) + string(REPLACE "." ";" version_list "${semantic_version}") + list(GET version_list "${component_index}" component) + + # return + set(${out} "${component}" PARENT_SCOPE) +endfunction()