diff --git a/.gitignore b/.gitignore index f11d07a1a680b23846a3e74d898c902e1f275caa..f1e536f63a6783237e560c690daf4d7a8c0f77cb 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ doc/man/tarantool.1 doc/man/tarantool_box.1 doc/user/tarantool_user_guide.txt doc/tnt.ent +rpm/tarantool-1*.spec extra/rpm.spec extra/rpm/tarantool.rpm.spec extra/dist/tarantool.service diff --git a/CMakeLists.txt b/CMakeLists.txt index ec809e72e6ebb19c1ca935402fb4cbbe5b6f139f..34147ca0c49e20f89bb1434ea47bb1908556a4e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,54 +125,55 @@ add_custom_target(tags COMMAND ${CTAGS} -R -f tags add_custom_target(ctags DEPENDS tags) # -# Define PACKAGE_VERSION -- a string constant with tarantool version. +# Get version # -set (CPACK_PACKAGE_VERSION_MAJOR "1") -set (CPACK_PACKAGE_VERSION_MINOR "6") -set (CPACK_PACKAGE_VERSION_PATCH "8") set (PACKAGE_VERSION "") set (TARANTOOL_VERSION "") +# Try to get version from VERSION file +set (VERSION_FILE "${CMAKE_BINARY_DIR}/VERSION") +if (EXISTS "${VERSION_FILE}") + file (STRINGS "${VERSION_FILE}" TARANTOOL_VERSION) +endif() + # Get git version only if source directory has .git repository, this # avoids git to search .git repository in parent # directories. # if (EXISTS "${CMAKE_SOURCE_DIR}/.git") - execute_process (COMMAND ${GIT} describe HEAD - COMMAND sed "s/-/./" - COMMAND sed "s/-[a-z 0-9]*//" - OUTPUT_VARIABLE PACKAGE_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - execute_process (COMMAND ${GIT} describe HEAD - OUTPUT_VARIABLE TARANTOOL_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE + execute_process (COMMAND ${GIT} describe --long HEAD + OUTPUT_VARIABLE TARANTOOL_GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - if (PACKAGE_VERSION STREQUAL "") - message (FATAL_ERROR "Failed to retrive git version.") + + if (NOT ("${TARANTOOL_GIT_VERSION}" STREQUAL "${TARANTOOL_VERSION}")) + set(TARANTOOL_VERSION "${TARANTOOL_GIT_VERSION}") + file(WRITE ${VERSION_FILE} "${TARANTOOL_VERSION}\n") + message(STATUS "Generating VERSION file") endif() endif() -set (VERSION_FILE "${CMAKE_SOURCE_DIR}/VERSION") +if (NOT TARANTOOL_VERSION) + message (FATAL_ERROR "Unable to retrive version from git or ${VERSION_FILE} file.") +endif() -# Update version file or use it when there is no git -# repository within sources (source tarballs). # -if (PACKAGE_VERSION STREQUAL "") - if (NOT EXISTS "${VERSION_FILE}") - message (FATAL_ERROR "Version file ${VERSION_FILE} does not exists.") - endif() - message (WARNING "Using version from version file ${VERSION_FILE}") - execute_process (COMMAND ${CAT} ${VERSION_FILE} - OUTPUT_VARIABLE PACKAGE_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - if (PACKAGE_VERSION STREQUAL "") - message (FATAL_ERROR "Unable to retrive version from git or ${VERSION_FILE} file.") - endif() -else() - file(WRITE ${VERSION_FILE} "${PACKAGE_VERSION}\n") -endif() +# Split full version (git describe --long) to get components +# +string(REPLACE "-" "." TARANTOOL_VERSION_LIST ${TARANTOOL_VERSION}) +string(REPLACE "." ";" TARANTOOL_VERSION_LIST ${TARANTOOL_VERSION_LIST}) +LIST(GET TARANTOOL_VERSION_LIST 0 CPACK_PACKAGE_VERSION_MAJOR) +LIST(GET TARANTOOL_VERSION_LIST 1 CPACK_PACKAGE_VERSION_MINOR) +LIST(GET TARANTOOL_VERSION_LIST 2 CPACK_PACKAGE_VERSION_PATCH) +LIST(GET TARANTOOL_VERSION_LIST 3 CPACK_PACKAGE_VERSION_COMMIT) + +set(PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}") +set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_MINOR}") +set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}") +set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_COMMIT}") + +message(STATUS "Tarantool version is ${TARANTOOL_VERSION} (${PACKAGE_VERSION})") # # Specify where to look for include files. @@ -400,7 +401,7 @@ configure_file( message (STATUS "") message (STATUS "Tarantool configuration is complete:") message (STATUS "") -message (STATUS "VERSION: ${PACKAGE_VERSION}") +message (STATUS "VERSION: ${TARANTOOL_VERSION}") message (STATUS "BUILD: ${TARANTOOL_BUILD}") message (STATUS "C_COMPILER: ${TARANTOOL_C_COMPILER}") message (STATUS "CXX_COMPILER: ${TARANTOOL_CXX_COMPILER}") diff --git a/cmake/rpm.cmake b/cmake/rpm.cmake index 1abdf1f393fefdd4719b80750a602c00b7c03b70..a68d1101ac687db438b4c38c033f6bfa44d89de7 100644 --- a/cmake/rpm.cmake +++ b/cmake/rpm.cmake @@ -5,22 +5,10 @@ if (RPMBUILD) find_program(CP cp) find_program(WC wc) - execute_process (COMMAND ${GIT} describe HEAD --abbrev=0 - OUTPUT_VARIABLE VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process (COMMAND ${GIT} rev-list --oneline ${VERSION}.. - COMMAND ${WC} -l - OUTPUT_VARIABLE RELEASE - OUTPUT_STRIP_TRAILING_WHITESPACE) - set (SCL_VERSION "1.0" CACHE STRING "" FORCE) set (SCL_RELEASE "1" CACHE STRING "" FORCE) set (SCL_TARANTOOL "mailru-16" CACHE STRING "" FORCE) - set (RPM_PACKAGE_VERSION ${VERSION} CACHE STRING "" FORCE) - set (RPM_PACKAGE_RELEASE ${RELEASE} CACHE STRING "" FORCE) - set (RPM_SOURCE_DIRECTORY_NAME ${CPACK_SOURCE_PACKAGE_FILE_NAME} CACHE STRING "" FORCE) set (RPM_PACKAGE_SOURCE_FILE_NAME ${PACKAGE_VERSION}.tar.gz @@ -28,36 +16,42 @@ if (RPMBUILD) set (RPM_BUILDROOT "${PROJECT_BINARY_DIR}/RPM/BUILDROOT" CACHE STRING "" FORCE) - add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/${PACKAGE_VERSION}.tar.gz + add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/tarantool-${PACKAGE_VERSION}.tar.gz WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMAND $(MAKE) package_source && mv `ls *.tar.gz | head -n 1` tarantool-${PACKAGE_VERSION}.tar.gz) + COMMAND $(MAKE) package_source) add_custom_command(OUTPUT ${RPM_BUILDROOT} COMMAND ${MKDIR} -p ${RPM_BUILDROOT}) - add_custom_target(bump_spec + set(RPM_SPEC "${PROJECT_BINARY_DIR}/rpm/tarantool-${PACKAGE_VERSION}.spec") + add_custom_target(rpm_spec DEPENDS ${PROJECT_BINARY_DIR}/tarantool-${PACKAGE_VERSION}.tar.gz - COMMAND sed -i -e "'s/Version:\\([ ]*\\).*/Version: ${PACKAGE_VERSION}/g'" rpm/tarantool.spec - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy rpm/tarantool.spec ${RPM_SPEC}.tmp + COMMAND sed -i -e "'s/Version:\\([ ]*\\).*/Version: ${PACKAGE_VERSION}/g'" ${RPM_SPEC}.tmp + COMMAND ${CMAKE_COMMAND} -E rename ${RPM_SPEC}.tmp ${RPM_SPEC} + WORKING_DIRECTORY ${SOURCE_BINARY_DIR} ) add_custom_target(rpm_src - DEPENDS bump_spec - COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --define '_sourcedir ./' --define '_srcrpmdir ./' -bs ${PROJECT_SOURCE_DIR}/rpm/tarantool.spec + DEPENDS rpm_spec + COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --define '_sourcedir ./' --define '_srcrpmdir ./' -bs ${RPM_SPEC} WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) + # TODO: Targets below are temporary broken + return() + add_custom_target(rpm DEPENDS rpm_src DEPENDS ${RPM_BUILDROOT} - COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --rebuild ${PROJECT_BINARY_DIR}/tarantool-${VERSION}-${RELEASE}.src.rpm + COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --rebuild ${PROJECT_BINARY_DIR}/tarantool-${PACKAGE_VERSION}.src.rpm WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) add_custom_target(rpm_systemd DEPENDS rpm_src DEPENDS ${RPM_BUILDROOT} - COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --with systemd --rebuild ${PROJECT_BINARY_DIR}/tarantool-${VERSION}-${RELEASE}.src.rpm + COMMAND ${RPMBUILD} --buildroot ${RPM_BUILDROOT} --with systemd --rebuild ${PROJECT_BINARY_DIR}/tarantool-${PACKAGE_VERSION}.src.rpm WORKING_DIRECTORY ${PROJECT_BINARY_DIR} )