From 358a9ccc28b9aae079cfd458c517551591e26c49 Mon Sep 17 00:00:00 2001 From: Max Risuhin Date: Sun, 18 Jun 2017 10:59:47 +0000 Subject: [PATCH] ARROW-742: [C++] Use gflags from toolchain; Resolve cmake FindGFlags and FindGTest Windows issues. --- ci/msvc-build.bat | 2 +- cpp/CMakeLists.txt | 7 ++++++- cpp/cmake_modules/FindGFlags.cmake | 12 ++++++++---- cpp/cmake_modules/FindGTest.cmake | 9 +++++---- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ci/msvc-build.bat b/ci/msvc-build.bat index 263d4bc5805..366fc2818f0 100644 --- a/ci/msvc-build.bat +++ b/ci/msvc-build.bat @@ -23,7 +23,7 @@ conda create -n arrow -q -y python=%PYTHON% ^ six pytest setuptools numpy pandas cython conda install -n arrow -q -y -c conda-forge ^ flatbuffers rapidjson ^ - cmake git boost-cpp thrift-cpp snappy zlib brotli + cmake git boost-cpp thrift-cpp snappy zlib brotli gflags call activate arrow diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index c295fa0ba80..42e1f69b0e4 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -412,6 +412,7 @@ if (NOT "$ENV{ARROW_BUILD_TOOLCHAIN}" STREQUAL "") set(FLATBUFFERS_HOME "$ENV{ARROW_BUILD_TOOLCHAIN}") set(RAPIDJSON_HOME "$ENV{ARROW_BUILD_TOOLCHAIN}") set(JEMALLOC_HOME "$ENV{ARROW_BUILD_TOOLCHAIN}") + set(GFLAGS_HOME "$ENV{ARROW_BUILD_TOOLCHAIN}") if (NOT DEFINED ENV{BOOST_ROOT}) # Since we have to set this in the environment, we check whether @@ -432,6 +433,10 @@ if (DEFINED ENV{JEMALLOC_HOME}) set(JEMALLOC_HOME "$ENV{JEMALLOC_HOME}") endif() +if (DEFINED ENV{GFLAGS_HOME}) + set(GFLAGS_HOME "$ENV{GFLAGS_HOME}") +endif() + # ---------------------------------------------------------------------- # Add Boost dependencies (code adapted from Apache Kudu (incubating)) @@ -560,7 +565,7 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS) endif() # gflags (formerly Googleflags) command line parsing - if("$ENV{GFLAGS_HOME}" STREQUAL "") + if("${GFLAGS_HOME}" STREQUAL "") set(GFLAGS_CMAKE_CXX_FLAGS ${EP_CXX_FLAGS}) set(GFLAGS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/gflags_ep-prefix/src/gflags_ep") diff --git a/cpp/cmake_modules/FindGFlags.cmake b/cpp/cmake_modules/FindGFlags.cmake index eaea8353054..9eaf82497cd 100644 --- a/cpp/cmake_modules/FindGFlags.cmake +++ b/cpp/cmake_modules/FindGFlags.cmake @@ -22,13 +22,17 @@ # GFLAGS_STATIC_LIB, path to libgflags static library # GFLAGS_FOUND, whether gflags has been found -if( NOT "$ENV{GFLAGS_HOME}" STREQUAL "") - file( TO_CMAKE_PATH "$ENV{GFLAGS_HOME}" _native_path ) +if( NOT "${GFLAGS_HOME}" STREQUAL "") + file( TO_CMAKE_PATH "${GFLAGS_HOME}" _native_path ) list( APPEND _gflags_roots ${_native_path} ) elseif ( GFlags_HOME ) list( APPEND _gflags_roots ${GFlags_HOME} ) endif() +if (MSVC AND NOT GFLAGS_MSVC_STATIC_LIB_SUFFIX) + set(GFLAGS_MSVC_STATIC_LIB_SUFFIX "_static") +endif() + if ( _gflags_roots ) find_path(GFLAGS_INCLUDE_DIR NAMES gflags/gflags.h PATHS ${_gflags_roots} @@ -38,7 +42,7 @@ if ( _gflags_roots ) PATHS ${_gflags_roots} NO_DEFAULT_PATH PATH_SUFFIXES "lib" ) - find_library(GFLAGS_SHARED_LIB NAMES libgflags.a + find_library(GFLAGS_STATIC_LIB NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}gflags${GFLAGS_MSVC_STATIC_LIB_SUFFIX} PATHS ${_gflags_roots} NO_DEFAULT_PATH PATH_SUFFIXES "lib" ) @@ -50,7 +54,7 @@ else() find_library(GFLAGS_SHARED_LIB gflags NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH) - find_library(GFLAGS_STATIC_LIB libgflags.a + find_library(GFLAGS_STATIC_LIB ${CMAKE_STATIC_LIBRARY_PREFIX}gflags${GFLAGS_MSVC_STATIC_LIB_SUFFIX} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH) endif() diff --git a/cpp/cmake_modules/FindGTest.cmake b/cpp/cmake_modules/FindGTest.cmake index 3c5d2b67e44..0e2af2fbc09 100644 --- a/cpp/cmake_modules/FindGTest.cmake +++ b/cpp/cmake_modules/FindGTest.cmake @@ -43,7 +43,7 @@ if ( _gtest_roots ) find_path( GTEST_INCLUDE_DIR NAMES gtest/gtest.h PATHS ${_gtest_roots} NO_DEFAULT_PATH PATH_SUFFIXES "include" ) - find_library( GTEST_LIBRARIES NAMES gtest + find_library( GTEST_LIBRARIES NAMES gtest gtest_main PATHS ${_gtest_roots} NO_DEFAULT_PATH PATH_SUFFIXES "lib" ) else () @@ -55,9 +55,10 @@ endif () if (GTEST_INCLUDE_DIR AND GTEST_LIBRARIES) set(GTEST_FOUND TRUE) get_filename_component( GTEST_LIBS ${GTEST_LIBRARIES} PATH ) - set(GTEST_LIB_NAME libgtest) - set(GTEST_STATIC_LIB ${GTEST_LIBS}/${GTEST_LIB_NAME}.a) - set(GTEST_SHARED_LIB ${GTEST_LIBS}/${GTEST_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(GTEST_LIB_NAME gtest) + set(GTEST_STATIC_LIB ${GTEST_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${GTEST_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(GTEST_MAIN_STATIC_LIB ${GTEST_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${GTEST_LIB_NAME}_main${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(GTEST_SHARED_LIB ${GTEST_LIBS}/${CMAKE_SHARED_LIBRARY_PREFIX}${GTEST_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) else () set(GTEST_FOUND FALSE) endif ()