From fd5a5229283dd631e6e75f957c0ac166019064c7 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 11 Jan 2018 12:57:04 +0800 Subject: [PATCH] cmake: check version of boost in src/boost after bumping up the required boost version, old copy of boost in src/boost will not work. so we need to error out early. Signed-off-by: Kefu Chai --- cmake/modules/BuildBoost.cmake | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake index 36ac6b925bf..298cc1765ec 100644 --- a/cmake/modules/BuildBoost.cmake +++ b/cmake/modules/BuildBoost.cmake @@ -11,6 +11,30 @@ # Boost_USE_MULTITHREADED : boolean (default: OFF) # BOOST_J: integer (defanult 1) +function(check_boost_version source_dir expected_version) + set(version_hpp "${source_dir}/boost/version.hpp") + if(NOT EXISTS ${version_hpp}) + message(FATAL_ERROR "${version_hpp} not found. Please either \"rm -rf ${source_dir}\" " + "so I can download Boost v${expected_version} for you, or make sure ${source_dir} " + "contains a full copy of Boost v${expected_version}.") + endif() + file(STRINGS "${version_hpp}" BOOST_VERSION_LINE + REGEX "^#define[ \t]+BOOST_VERSION[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+BOOST_VERSION[ \t]+([0-9]+)$" + "\\1" BOOST_VERSION "${BOOST_VERSION_LINE}") + math(EXPR BOOST_VERSION_PATCH "${BOOST_VERSION} % 100") + math(EXPR BOOST_VERSION_MINOR "${BOOST_VERSION} / 100 % 1000") + math(EXPR BOOST_VERSION_MAJOR "${BOOST_VERSION} / 100000") + set(version "${BOOST_VERSION_MAJOR}.${BOOST_VERSION_MINOR}.${BOOST_VERSION_PATCH}") + if(version VERSION_LESS expected_version) + message(FATAL_ERROR "Boost v${version} in ${source_dir} is not new enough. " + "Please either \"rm -rf ${source_dir}\" so I can download Boost v${expected_version} " + "for you, or make sure ${source_dir} contains a copy of Boost v${expected_version}.") + else() + message(STATUS "boost (${version} >= ${expected_version}) already in ${source_dir}") + endif() +endfunction() + function(do_build_boost version) cmake_parse_arguments(Boost_BUILD "" "" COMPONENTS ${ARGN}) set(boost_features "variant=release") @@ -76,7 +100,7 @@ function(do_build_boost version) ${b2} install) set(boost_root_dir "${CMAKE_BINARY_DIR}/boost") if(EXISTS "${PROJECT_SOURCE_DIR}/src/boost/bootstrap.sh") - message(STATUS "boost already in src") + check_boost_version("${PROJECT_SOURCE_DIR}/src/boost" ${version}) set(source_dir SOURCE_DIR "${PROJECT_SOURCE_DIR}/src/boost") elseif(version VERSION_GREATER 1.66) @@ -115,7 +139,7 @@ function(do_build_boost version) endfunction() macro(build_boost version) - do_build_boost(version ${ARGN}) + do_build_boost(${version} ${ARGN}) ExternalProject_Get_Property(Boost install_dir) set(Boost_INCLUDE_DIRS ${install_dir}/include) set(Boost_INCLUDE_DIR ${install_dir}/include)