CMake: Add CMake support for Thrift libraries

Currently the following libraries are supported:
- C++
- C_Glib
- Java (using Ant wrapper)

The compilers CMake file is adjusted to work with the new global CMakeLists.txt file.

Signed-off-by: Roger Meier <r.meier@siemens.com>
Signed-off-by: Pascal Bach <pascal.bach@siemens.com>
Also-by: Sergei Nikulov <sergey.nikulov@gmail.com>
diff --git a/lib/cpp/test/CMakeLists.txt b/lib/cpp/test/CMakeLists.txt
new file mode 100644
index 0000000..cb68505
--- /dev/null
+++ b/lib/cpp/test/CMakeLists.txt
@@ -0,0 +1,255 @@
+#
+# 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 unit_test_framework)
+include_directories("${Boost_INCLUDE_DIR}")
+
+#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})
+target_link_libraries(testgencpp thrift)
+
+set(processortest_SOURCES
+    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
+)
+
+
+add_executable(Benchmark Benchmark.cpp)
+target_link_libraries(Benchmark testgencpp)
+add_test(NAME Benchmark COMMAND Benchmark)
+
+set(UnitTest_SOURCES
+    UnitTestMain.cpp
+    TMemoryBufferTest.cpp
+    TBufferBaseTest.cpp
+    Base64Test.cpp
+    ToStringTest.cpp
+    TypedefTest.cpp
+)
+
+if(NOT WITH_BOOSTTHREADS AND NOT WITH_STDTHREADS)
+    list(APPEND UnitTest_SOURCES RWMutexStarveTest.cpp)
+endif()
+
+add_executable(UnitTests ${UnitTest_SOURCES})
+target_link_libraries(UnitTests testgencpp thrift ${Boost_LIBRARIES})
+add_test(NAME UnitTests COMMAND UnitTests)
+
+
+if(WITH_ZLIB)
+add_executable(TransportTest TransportTest.cpp)
+target_link_libraries(TransportTest
+    testgencpp
+    thriftz
+    ${Boost_LIBRARIES}
+    ${ZLIB_LIBRARIES}
+)
+add_test(NAME TransportTest COMMAND TransportTest)
+
+add_executable(ZlibTest ZlibTest.cpp)
+target_link_libraries(ZlibTest
+    testgencpp
+    thriftz
+    ${Boost_LIBRARIES}
+    ${ZLIB_LIBRARIES}
+)
+add_test(NAME ZlibTest COMMAND ZlibTest)
+endif(WITH_ZLIB)
+
+
+add_executable(EnumTest EnumTest.cpp)
+target_link_libraries(EnumTest
+    testgencpp
+    ${Boost_LIBRARIES}
+)
+add_test(NAME EnumTest COMMAND EnumTest)
+
+add_executable(TFileTransportTest TFileTransportTest.cpp)
+target_link_libraries(TFileTransportTest
+    testgencpp
+    ${Boost_LIBRARIES}
+)
+add_test(NAME TFileTransportTest COMMAND TFileTransportTest)
+
+add_executable(TFDTransportTest TFDTransportTest.cpp)
+target_link_libraries(TFDTransportTest
+    thrift
+)
+add_test(NAME TFDTransportTest COMMAND TFDTransportTest)
+
+add_executable(TPipedTransportTest TPipedTransportTest.cpp)
+target_link_libraries(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
+)
+add_test(NAME AllProtocolsTest COMMAND AllProtocolsTest)
+
+add_executable(DebugProtoTest DebugProtoTest.cpp)
+target_link_libraries(DebugProtoTest
+    testgencpp
+)
+add_test(NAME DebugProtoTest COMMAND DebugProtoTest)
+
+add_executable(JSONProtoTest JSONProtoTest.cpp)
+target_link_libraries(JSONProtoTest
+    testgencpp
+)
+add_test(NAME JSONProtoTest COMMAND JSONProtoTest)
+
+add_executable(OptionalRequiredTest OptionalRequiredTest.cpp)
+target_link_libraries(OptionalRequiredTest
+    testgencpp
+)
+add_test(NAME OptionalRequiredTest COMMAND OptionalRequiredTest)
+
+add_executable(RecursiveTest RecursiveTest.cpp)
+target_link_libraries(RecursiveTest
+    testgencpp
+)
+add_test(NAME RecursiveTest COMMAND RecursiveTest)
+
+add_executable(SpecializationTest SpecializationTest.cpp)
+target_link_libraries(SpecializationTest
+    testgencpp
+)
+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})
+target_link_libraries(concurrency_test
+    thrift
+)
+add_test(NAME concurrency_test COMMAND concurrency_test)
+
+set(link_test_SOURCES
+    link/LinkTest.cpp
+    link/TemplatedService1.cpp
+    link/TemplatedService2.cpp
+    gen-cpp/ParentService.h
+)
+add_executable(link_test ${link_test_SOURCES})
+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
+    thrift
+    thriftnb
+    ${Boost_LIBRARIES}
+)
+add_test(NAME processor_test COMMAND processor_test)
+endif()
+
+if(OPENSSL_FOUND AND WITH_OPENSSL)
+add_executable(OpenSSLManualInitTest OpenSSLManualInitTest.cpp)
+target_link_libraries(OpenSSLManualInitTest
+    thrift
+    ${OPENSSL_LIBRARIES}
+    ${Boost_LIBRARIES}
+)
+add_test(NAME OpenSSLManualInitTest COMMAND OpenSSLManualInitTest)
+endif()
+
+#
+# Common thrift code generation rules
+#
+
+
+add_custom_command(OUTPUT gen-cpp/DebugProtoTest_types.cpp gen-cpp/DebugProtoTest_types.h
+    COMMAND thrift-compiler --gen cpp:dense ${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:dense ${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:dense ${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:dense ${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
+)