diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f46dc0..fe12819 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ option(WITH_DEBUG_SYMBOLS "With debug symbols" ON) option(WITH_THRIFT "With thrift framed protocol supported" OFF) option(WITH_SNAPPY "With snappy" OFF) option(BUILD_UNIT_TESTS "Whether to build unit tests" OFF) -option(BUILD_BRPC_TOOLS "Whether to build brpc tools" ON) +option(BUILD_BRPC_TOOLS "Whether to build brpc tools" OFF) option(DOWNLOAD_GTEST "Download and build a fresh copy of googletest. Requires Internet access." ON) # Enable MACOSX_RPATH. Run "cmake --help-policy CMP0042" for policy details. @@ -65,7 +65,8 @@ endif() if(WITH_THRIFT) set(THRIFT_CPP_FLAG "-DENABLE_THRIFT_FRAMED_PROTOCOL") - set(THRIFT_LIB "thrift") + find_package(Thrift CONFIG REQUIRED) + set(THRIFT_LIB "thrift::thrift") endif() include(GNUInstallDirs) @@ -144,11 +145,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() endif() -find_package(Protobuf REQUIRED) +find_package(protobuf CONFIG REQUIRED) +get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) +set(PROTOBUF_LIBRARIES protobuf::libprotobuf) find_package(Threads REQUIRED) -find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h) -find_library(LEVELDB_LIB NAMES leveldb) +find_package(leveldb CONFIG REQUIRED) +set(LEVELDB_INCLUDE_PATH ${PROTOBUF_INCLUDE_DIR}) +set(LEVELDB_LIB leveldb::leveldb) if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) message(FATAL_ERROR "Fail to find leveldb") endif() @@ -163,8 +167,9 @@ if(WITH_SNAPPY) endif() if(WITH_GLOG) - find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h) - find_library(GLOG_LIB NAMES glog) + find_package(glog CONFIG REQUIRED) + get_target_property(GLOG_INCLUDE_PATH glog::glog INTERFACE_INCLUDE_DIRECTORIES) + set(GLOG_LIB glog::glog) if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB)) message(FATAL_ERROR "Fail to find glog") endif() @@ -182,7 +187,7 @@ if(WITH_MESALINK) include_directories(${MESALINK_INCLUDE_PATH}) endif() -find_library(PROTOC_LIB NAMES protoc) +set(PROTOC_LIB "protobuf::libprotoc") if(NOT PROTOC_LIB) message(FATAL_ERROR "Fail to find protoc lib") endif() @@ -193,7 +198,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") ) endif() -find_package(OpenSSL) +find_package(OpenSSL REQUIRED) include_directories( ${GFLAGS_INCLUDE_PATH} @@ -208,9 +213,9 @@ set(DYNAMIC_LIB ${LEVELDB_LIB} ${PROTOC_LIB} ${CMAKE_THREAD_LIBS_INIT} - ${THRIFT_LIB} - ${THRIFTNB_LIB} ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + ${THRIFT_LIB} dl z) diff --git a/cmake/FindGFLAGS.cmake b/cmake/FindGFLAGS.cmake index dfad5fd..83a167f 100644 --- a/cmake/FindGFLAGS.cmake +++ b/cmake/FindGFLAGS.cmake @@ -15,7 +15,8 @@ set(_gflags_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) -find_path(GFLAGS_INCLUDE_PATH gflags/gflags.h) +find_package(gflags CONFIG REQUIRED) +get_target_property(GFLAGS_INCLUDE_PATH gflags::gflags INTERFACE_INCLUDE_DIRECTORIES) if (GFLAGS_STATIC) if (WIN32) @@ -24,7 +25,7 @@ if (GFLAGS_STATIC) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) endif (GFLAGS_STATIC) -find_library(GFLAGS_LIBRARY NAMES gflags libgflags) +set(GFLAGS_LIBRARY gflags::gflags) if(GFLAGS_INCLUDE_PATH AND GFLAGS_LIBRARY) set(GFLAGS_FOUND TRUE) endif(GFLAGS_INCLUDE_PATH AND GFLAGS_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 209c0e2..b9434ee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,17 +30,22 @@ add_dependencies(SOURCES_LIB PROTO_LIB) # shared library needs POSITION_INDEPENDENT_CODE set_property(TARGET ${SOURCES_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) set_property(TARGET ${BUTIL_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) - +if(NOT BUILD_SHARED_LIBS) add_library(brpc-static STATIC $ $ $) -if(BRPC_WITH_THRIFT) +if(WITH_THRIFT) target_link_libraries(brpc-static thrift) endif() - +target_link_libraries(brpc-static PUBLIC ${DYNAMIC_LIB}) +if(BRPC_WITH_GLOG) + target_link_libraries(brpc-static ${GLOG_LIB}) +endif() +target_include_directories(brpc-static PUBLIC $) SET_TARGET_PROPERTIES(brpc-static PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) - +endif() +if(0) # for protoc-gen-mcpack set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/output/bin) @@ -49,35 +54,56 @@ set(protoc_gen_mcpack_SOURCES ) add_executable(protoc-gen-mcpack ${protoc_gen_mcpack_SOURCES}) - +endif() if(BUILD_SHARED_LIBS) add_library(brpc-shared SHARED $ $ $) target_link_libraries(brpc-shared ${DYNAMIC_LIB}) + target_include_directories(brpc-shared PUBLIC $) if(BRPC_WITH_GLOG) target_link_libraries(brpc-shared ${GLOG_LIB}) endif() - if(BRPC_WITH_THRIFT) + if(WITH_THRIFT) target_link_libraries(brpc-shared thrift) endif() SET_TARGET_PROPERTIES(brpc-shared PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) target_link_libraries(protoc-gen-mcpack brpc-shared ${DYNAMIC_LIB} pthread) - install(TARGETS brpc-shared + install(TARGETS brpc-shared EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) else() - target_link_libraries(protoc-gen-mcpack brpc-static ${BRPC_PRIVATE_LIBS} pthread) endif() - -install(TARGETS brpc-static +if(NOT BUILD_SHARED_LIBS) +install(TARGETS brpc-static EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) +endif() +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/unofficial-brpc-config.cmake" +[[include(CMakeFindDependencyMacro) +find_dependency(OpenSSL) +find_dependency(Threads) +find_dependency(gflags CONFIG) +find_dependency(protobuf CONFIG) +find_dependency(leveldb CONFIG) +find_dependency(Thrift CONFIG) +find_dependency(glog CONFIG) +file(GLOB TARGET_FILES "${CMAKE_CURRENT_LIST_DIR}/unofficial-brpcTargets.cmake") +foreach (TARGET_FILE ${TARGET_FILES}) + include("${TARGET_FILE}") +endforeach() +]]) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/unofficial-brpc-config.cmake" DESTINATION share/unofficial-brpc) + +install(EXPORT unofficial-brpcTargets + NAMESPACE unofficial::brpc:: + DESTINATION share/unofficial-brpc +)