mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-08 03:08:53 +00:00
792db4e926
Client: C++ Library, Compiler Patch: Dave Watson rebased by Nobuaki Sukegawa This closes #357 and closes #677
380 lines
12 KiB
CMake
380 lines
12 KiB
CMake
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
# Find required packages
|
|
set(Boost_USE_STATIC_LIBS ON) # Force the use of static boost test framework
|
|
find_package(Boost 1.53.0 REQUIRED COMPONENTS chrono filesystem system thread unit_test_framework)
|
|
include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
|
|
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}")
|
|
|
|
#Make sure gen-cpp files can be included
|
|
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
|
# Create the thrift C++ test library
|
|
set(testgencpp_SOURCES
|
|
gen-cpp/DebugProtoTest_types.cpp
|
|
gen-cpp/DebugProtoTest_types.h
|
|
gen-cpp/EnumTest_types.cpp
|
|
gen-cpp/EnumTest_types.h
|
|
gen-cpp/OptionalRequiredTest_types.cpp
|
|
gen-cpp/OptionalRequiredTest_types.h
|
|
gen-cpp/Recursive_types.cpp
|
|
gen-cpp/Recursive_types.h
|
|
gen-cpp/ThriftTest_types.cpp
|
|
gen-cpp/ThriftTest_types.h
|
|
gen-cpp/TypedefTest_types.cpp
|
|
gen-cpp/TypedefTest_types.h
|
|
ThriftTest_extras.cpp
|
|
DebugProtoTest_extras.cpp
|
|
)
|
|
|
|
add_library(testgencpp STATIC ${testgencpp_SOURCES})
|
|
|
|
set(testgencpp_cob_SOURCES
|
|
gen-cpp/ChildService.cpp
|
|
gen-cpp/ChildService.h
|
|
gen-cpp/EmptyService.cpp
|
|
gen-cpp/EmptyService.h
|
|
gen-cpp/ParentService.cpp
|
|
gen-cpp/ParentService.h
|
|
gen-cpp/proc_types.cpp
|
|
gen-cpp/proc_types.h
|
|
)
|
|
add_library(testgencpp_cob STATIC ${testgencpp_cob_SOURCES})
|
|
|
|
|
|
add_executable(Benchmark Benchmark.cpp)
|
|
target_link_libraries(Benchmark testgencpp)
|
|
LINK_AGAINST_THRIFT_LIBRARY(Benchmark thrift)
|
|
add_test(NAME Benchmark COMMAND Benchmark)
|
|
target_link_libraries(Benchmark testgencpp ${ZLIB_LIBRARIES})
|
|
|
|
set(UnitTest_SOURCES
|
|
UnitTestMain.cpp
|
|
TMemoryBufferTest.cpp
|
|
TBufferBaseTest.cpp
|
|
Base64Test.cpp
|
|
ToStringTest.cpp
|
|
TypedefTest.cpp
|
|
TServerSocketTest.cpp
|
|
TServerTransportTest.cpp
|
|
)
|
|
|
|
if(NOT WITH_BOOSTTHREADS AND NOT WITH_STDTHREADS AND NOT MSVC)
|
|
list(APPEND UnitTest_SOURCES RWMutexStarveTest.cpp)
|
|
endif()
|
|
|
|
add_executable(UnitTests ${UnitTest_SOURCES})
|
|
target_link_libraries(UnitTests testgencpp ${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES})
|
|
LINK_AGAINST_THRIFT_LIBRARY(UnitTests thrift)
|
|
add_test(NAME UnitTests COMMAND UnitTests)
|
|
if ( MSVC )
|
|
# Disable C4503: decorated name length exceeded, name was truncated
|
|
# 'insanity' results in very long decorated names
|
|
set_property( TARGET UnitTests APPEND_STRING PROPERTY COMPILE_FLAGS /wd4503 )
|
|
endif ( MSVC )
|
|
|
|
|
|
set( TInterruptTest_SOURCES TSocketInterruptTest.cpp )
|
|
if (WIN32)
|
|
list(APPEND TInterruptTest_SOURCES
|
|
TPipeInterruptTest.cpp
|
|
)
|
|
endif()
|
|
add_executable(TInterruptTest ${TInterruptTest_SOURCES})
|
|
target_link_libraries(TInterruptTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TInterruptTest thrift)
|
|
if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
target_link_libraries(TInterruptTest -lrt)
|
|
endif ()
|
|
add_test(NAME TInterruptTest COMMAND TInterruptTest)
|
|
|
|
add_executable(TServerIntegrationTest TServerIntegrationTest.cpp)
|
|
target_link_libraries(TServerIntegrationTest
|
|
testgencpp_cob
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TServerIntegrationTest thrift)
|
|
if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
target_link_libraries(TServerIntegrationTest -lrt)
|
|
endif ()
|
|
add_test(NAME TServerIntegrationTest COMMAND TServerIntegrationTest)
|
|
|
|
if(WITH_ZLIB)
|
|
add_executable(TransportTest TransportTest.cpp)
|
|
target_link_libraries(TransportTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TransportTest thrift)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TransportTest thriftz)
|
|
add_test(NAME TransportTest COMMAND TransportTest)
|
|
|
|
add_executable(ZlibTest ZlibTest.cpp)
|
|
target_link_libraries(ZlibTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(ZlibTest thrift)
|
|
LINK_AGAINST_THRIFT_LIBRARY(ZlibTest thriftz)
|
|
add_test(NAME ZlibTest COMMAND ZlibTest)
|
|
endif(WITH_ZLIB)
|
|
|
|
|
|
add_executable(EnumTest EnumTest.cpp)
|
|
target_link_libraries(EnumTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(EnumTest thrift)
|
|
add_test(NAME EnumTest COMMAND EnumTest)
|
|
|
|
if(HAVE_GETOPT_H)
|
|
add_executable(TFileTransportTest TFileTransportTest.cpp)
|
|
target_link_libraries(TFileTransportTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TFileTransportTest thrift)
|
|
add_test(NAME TFileTransportTest COMMAND TFileTransportTest)
|
|
endif()
|
|
|
|
add_executable(TFDTransportTest TFDTransportTest.cpp)
|
|
target_link_libraries(TFDTransportTest
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TFDTransportTest thrift)
|
|
add_test(NAME TFDTransportTest COMMAND TFDTransportTest)
|
|
|
|
add_executable(TPipedTransportTest TPipedTransportTest.cpp)
|
|
target_link_libraries(TPipedTransportTest
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TPipedTransportTest thrift)
|
|
add_test(NAME TPipedTransportTest COMMAND TPipedTransportTest)
|
|
|
|
set(AllProtocolsTest_SOURCES
|
|
AllProtocolTests.cpp
|
|
AllProtocolTests.tcc
|
|
GenericHelpers
|
|
)
|
|
|
|
add_executable(AllProtocolsTest ${AllProtocolsTest_SOURCES})
|
|
target_link_libraries(AllProtocolsTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(AllProtocolsTest thrift)
|
|
add_test(NAME AllProtocolsTest COMMAND AllProtocolsTest)
|
|
|
|
# The debug run-time in Windows asserts on isprint() with negative inputs
|
|
if (NOT MSVC OR (MSVC AND CMAKE_BUILD_TYPE EQUAL "DEBUG"))
|
|
add_executable(DebugProtoTest DebugProtoTest.cpp)
|
|
target_link_libraries(DebugProtoTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(DebugProtoTest thrift)
|
|
add_test(NAME DebugProtoTest COMMAND DebugProtoTest)
|
|
endif()
|
|
|
|
add_executable(JSONProtoTest JSONProtoTest.cpp)
|
|
target_link_libraries(JSONProtoTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(JSONProtoTest thrift)
|
|
add_test(NAME JSONProtoTest COMMAND JSONProtoTest)
|
|
|
|
add_executable(OptionalRequiredTest OptionalRequiredTest.cpp)
|
|
target_link_libraries(OptionalRequiredTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(OptionalRequiredTest thrift)
|
|
add_test(NAME OptionalRequiredTest COMMAND OptionalRequiredTest)
|
|
|
|
add_executable(RecursiveTest RecursiveTest.cpp)
|
|
target_link_libraries(RecursiveTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(RecursiveTest thrift)
|
|
add_test(NAME RecursiveTest COMMAND RecursiveTest)
|
|
|
|
add_executable(SpecializationTest SpecializationTest.cpp)
|
|
target_link_libraries(SpecializationTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(SpecializationTest thrift)
|
|
add_test(NAME SpecializationTest COMMAND SpecializationTest)
|
|
|
|
set(concurrency_test_SOURCES
|
|
concurrency/Tests.cpp
|
|
concurrency/ThreadFactoryTests.h
|
|
concurrency/ThreadManagerTests.h
|
|
concurrency/TimerManagerTests.h
|
|
)
|
|
add_executable(concurrency_test ${concurrency_test_SOURCES})
|
|
LINK_AGAINST_THRIFT_LIBRARY(concurrency_test thrift)
|
|
add_test(NAME concurrency_test COMMAND concurrency_test)
|
|
target_link_libraries(concurrency_test ${ZLIB_LIBRARIES})
|
|
|
|
set(link_test_SOURCES
|
|
link/LinkTest.cpp
|
|
gen-cpp/ParentService.h
|
|
link/TemplatedService1.cpp
|
|
link/TemplatedService2.cpp
|
|
)
|
|
|
|
add_executable(link_test ${link_test_SOURCES})
|
|
target_link_libraries(link_test testgencpp_cob)
|
|
LINK_AGAINST_THRIFT_LIBRARY(link_test thrift)
|
|
target_link_libraries(link_test testgencpp ${ZLIB_LIBRARIES})
|
|
add_test(NAME link_test COMMAND link_test)
|
|
|
|
if(WITH_LIBEVENT)
|
|
set(processor_test_SOURCES
|
|
processor/ProcessorTest.cpp
|
|
processor/EventLog.cpp
|
|
processor/ServerThread.cpp
|
|
processor/EventLog.h
|
|
processor/Handlers.h
|
|
processor/ServerThread.h
|
|
)
|
|
add_executable(processor_test ${processor_test_SOURCES})
|
|
target_link_libraries(processor_test
|
|
testgencpp_cob
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(processor_test thrift)
|
|
LINK_AGAINST_THRIFT_LIBRARY(processor_test thriftnb)
|
|
add_test(NAME processor_test COMMAND processor_test)
|
|
|
|
set(TNonblockingServerTest_SOURCES TNonblockingServerTest.cpp)
|
|
add_executable(TNonblockingServerTest ${TNonblockingServerTest_SOURCES})
|
|
include_directories(${LIBEVENT_INCLUDE_DIRS})
|
|
target_link_libraries(TNonblockingServerTest
|
|
testgencpp_cob
|
|
${LIBEVENT_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TNonblockingServerTest thrift)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TNonblockingServerTest thriftnb)
|
|
add_test(NAME TNonblockingServerTest COMMAND TNonblockingServerTest)
|
|
endif()
|
|
|
|
if(OPENSSL_FOUND AND WITH_OPENSSL)
|
|
add_executable(OpenSSLManualInitTest OpenSSLManualInitTest.cpp)
|
|
target_link_libraries(OpenSSLManualInitTest
|
|
${OPENSSL_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(OpenSSLManualInitTest thrift)
|
|
add_test(NAME OpenSSLManualInitTest COMMAND OpenSSLManualInitTest)
|
|
|
|
add_executable(SecurityTest SecurityTest.cpp)
|
|
target_link_libraries(SecurityTest
|
|
testgencpp
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
LINK_AGAINST_THRIFT_LIBRARY(SecurityTest thrift)
|
|
if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
target_link_libraries(SecurityTest -lrt)
|
|
endif ()
|
|
add_test(NAME SecurityTest COMMAND SecurityTest "${CMAKE_CURRENT_SOURCE_DIR}/../../../test/keys")
|
|
|
|
endif()
|
|
|
|
if(WITH_QT4)
|
|
set(CMAKE_AUTOMOC ON)
|
|
find_package(Qt4 REQUIRED COMPONENTS QtTest)
|
|
set(TQTcpServerTest_SOURCES
|
|
qt/TQTcpServerTest.cpp
|
|
)
|
|
add_executable(TQTcpServerTest ${TQTcpServerTest_SOURCES})
|
|
target_link_libraries(TQTcpServerTest testgencpp_cob thriftqt Qt4::QtTest)
|
|
LINK_AGAINST_THRIFT_LIBRARY(TQTcpServerTest thrift)
|
|
add_test(NAME TQTcpServerTest COMMAND TQTcpServerTest)
|
|
endif()
|
|
|
|
if(WITH_QT5)
|
|
add_subdirectory(qt)
|
|
endif()
|
|
|
|
#
|
|
# Common thrift code generation rules
|
|
#
|
|
|
|
|
|
add_custom_command(OUTPUT gen-cpp/DebugProtoTest_types.cpp gen-cpp/DebugProtoTest_types.h gen-cpp/EmptyService.cpp gen-cpp/EmptyService.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/DebugProtoTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/EnumTest_types.cpp gen-cpp/EnumTest_types.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/EnumTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/TypedefTest_types.cpp gen-cpp/TypedefTest_types.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/TypedefTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/OptionalRequiredTest_types.cpp gen-cpp/OptionalRequiredTest_types.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/OptionalRequiredTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/Recursive_types.cpp gen-cpp/Recursive_types.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/Recursive.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/Service.cpp gen-cpp/StressTest_types.cpp
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/StressTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/SecondService.cpp gen-cpp/ThriftTest_constants.cpp gen-cpp/ThriftTest.cpp gen-cpp/ThriftTest_types.cpp gen-cpp/ThriftTest_types.h
|
|
COMMAND thrift-compiler --gen cpp ${PROJECT_SOURCE_DIR}/test/ThriftTest.thrift
|
|
)
|
|
|
|
add_custom_command(OUTPUT gen-cpp/ChildService.cpp gen-cpp/ChildService.h gen-cpp/ParentService.cpp gen-cpp/ParentService.h gen-cpp/proc_types.cpp gen-cpp/proc_types.h
|
|
COMMAND thrift-compiler --gen cpp:templates,cob_style ${CMAKE_CURRENT_SOURCE_DIR}/processor/proc.thrift
|
|
)
|