diff --git a/CMakeLists.txt b/CMakeLists.txt index d770dad3ab0..377ed31446b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,9 @@ ENDIF() MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}") +# Will set GIT_EXECUTABLE and GIT_FOUND +FIND_PACKAGE(Git) + SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) # First, decide about build type (debug or release) diff --git a/cmake/make_dist.cmake.in b/cmake/make_dist.cmake.in index ada27c36926..10180aba778 100644 --- a/cmake/make_dist.cmake.in +++ b/cmake/make_dist.cmake.in @@ -23,12 +23,12 @@ SET(CPACK_SOURCE_PACKAGE_FILE_NAME "@CPACK_SOURCE_PACKAGE_FILE_NAME@") SET(CMAKE_CPACK_COMMAND "@CMAKE_CPACK_COMMAND@") SET(CMAKE_COMMAND "@CMAKE_COMMAND@") SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@") +SET(GIT_EXECUTABLE "@GIT_EXECUTABLE@") SET(GTAR_EXECUTABLE "@GTAR_EXECUTABLE@") SET(TAR_EXECUTABLE "@TAR_EXECUTABLE@") SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@") SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@") SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@") -SET(PLUGIN_REPOS "@PLUGIN_REPOS@") SET(VERSION "@VERSION@") @@ -40,6 +40,23 @@ SET(PACKAGE_DIR ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}) FILE(REMOVE_RECURSE ${PACKAGE_DIR}) FILE(REMOVE ${PACKAGE_DIR}.tar.gz ) +# Only allow bzr if source dir itself is a bzr repository +IF(BZR_EXECUTABLE) + EXECUTE_PROCESS( + COMMAND "${BZR_EXECUTABLE}" root + OUTPUT_VARIABLE BZR_ROOT + ERROR_VARIABLE BZR_ROOT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE RESULT + ) + + IF(NOT RESULT EQUAL 0 OR NOT BZR_ROOT STREQUAL ${CMAKE_SOURCE_DIR}) + MESSAGE(STATUS "This is not a bzr repository") + SET(BZR_EXECUTABLE) + ENDIF() +ENDIF() + IF(BZR_EXECUTABLE) MESSAGE(STATUS "Running bzr export") EXECUTE_PROCESS( @@ -50,28 +67,57 @@ IF(BZR_EXECUTABLE) ) IF(NOT RESULT EQUAL 0) - SET(BZR_EXECUTABLE) + SET(BZR_EXECUTABLE) ENDIF() ENDIF() -IF(BZR_EXECUTABLE) - FOREACH(REPO ${PLUGIN_REPOS}) - GET_FILENAME_COMPONENT(PLUGIN_NAME ${REPO} NAME) - SET(DEST ${PACKAGE_DIR}/plugin/${PLUGIN_NAME}) - MESSAGE(STATUS "Running bzr export for plugin/${PLUGIN_NAME}") - EXECUTE_PROCESS( - COMMAND "${BZR_EXECUTABLE}" export ${DEST} - WORKING_DIRECTORY ${REPO} - RESULT_VARIABLE RESULT - ) - IF(NOT RESULT EQUAL 0) - MESSAGE(STATUS "bzr export failed") - ENDIF() - ENDFOREACH() +IF(GIT_EXECUTABLE AND NOT BZR_EXECUTABLE) + EXECUTE_PROCESS( + COMMAND "${GIT_EXECUTABLE}" rev-parse --show-toplevel + OUTPUT_VARIABLE GIT_ROOT + ERROR_VARIABLE GIT_ROOT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE RESULT + ) + + IF(NOT RESULT EQUAL 0 OR NOT GIT_ROOT STREQUAL ${CMAKE_SOURCE_DIR}) + MESSAGE(STATUS "This is not a git repository") + SET(GIT_EXECUTABLE) + ENDIF() ENDIF() -IF(NOT BZR_EXECUTABLE) - MESSAGE(STATUS "bzr not found or source dir is not a repo, use CPack") +IF(GIT_EXECUTABLE AND NOT BZR_EXECUTABLE) + MESSAGE(STATUS "Running git archive -o ${PACKAGE_DIR}.tar") + EXECUTE_PROCESS( + COMMAND "${GIT_EXECUTABLE}" archive --format=tar + --prefix=${CPACK_SOURCE_PACKAGE_FILE_NAME}/ -o ${PACKAGE_DIR}.tar HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE RESULT + ) + IF(NOT RESULT EQUAL 0) + SET(GIT_EXECUTABLE) + ELSE() + # Unpack tarball + EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E tar xf ${PACKAGE_DIR}.tar + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE TAR_RESULT + ) + IF(NOT TAR_RESULT EQUAL 0) + SET(GIT_EXECUTABLE) + ELSE() + # Remove tarball after unpacking + EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E remove ${PACKAGE_DIR}.tar + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + ENDIF() + ENDIF() +ENDIF() + +IF(NOT BZR_EXECUTABLE AND NOT GIT_EXECUTABLE) + MESSAGE(STATUS "bzr/git not found or source dir is not a repo, use CPack") IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) # In-source build is the worst option, we have to cleanup source tree. diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index 2d70245d02a..e946f0ff863 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -232,11 +232,4 @@ MACRO(CONFIGURE_PLUGINS) ADD_SUBDIRECTORY(${dir}) ENDIF() ENDFOREACH() - FOREACH(dir ${dirs_plugin}) - IF (EXISTS ${dir}/.bzr) - MESSAGE(STATUS "Found repo ${dir}/.bzr") - LIST(APPEND PLUGIN_BZR_REPOS "${dir}") - ENDIF() - ENDFOREACH() - SET(PLUGIN_REPOS "${PLUGIN_BZR_REPOS}" CACHE INTERNAL "") ENDMACRO() diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 030f183d5f7..ac158c47502 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -252,7 +252,8 @@ FOREACH(tool glibtoolize libtoolize aclocal autoconf autoheader automake gtar ENDFOREACH() CONFIGURE_FILE( - ${CMAKE_SOURCE_DIR}/cmake/make_dist.cmake.in ${CMAKE_BINARY_DIR}/make_dist.cmake @ONLY) + ${CMAKE_SOURCE_DIR}/cmake/make_dist.cmake.in + ${CMAKE_BINARY_DIR}/make_dist.cmake @ONLY) ADD_CUSTOM_TARGET(dist COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/make_dist.cmake