blob: 0aad240ef37b5dc567c23720b62597fcc974cc10 [file] [log] [blame]
Pascal Bachd5f87e12014-12-12 15:59:17 +01001#
2# Licensed to the Apache Software Foundation (ASF) under one
3# or more contributor license agreements. See the NOTICE file
4# distributed with this work for additional information
5# regarding copyright ownership. The ASF licenses this file
6# to you under the Apache License, Version 2.0 (the
7# "License"); you may not use this file except in compliance
8# with the License. You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing,
13# software distributed under the License is distributed on an
14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15# KIND, either express or implied. See the License for the
16# specific language governing permissions and limitations
17# under the License.
18#
19
20
21include(CMakeDependentOption)
22
23# Additional components
24option(BUILD_COMPILER "Build Thrift compiler" ON)
25option(BUILD_TESTING "Build with unit tests" ON)
26option(BUILD_EXAMPLES "Build examples" ON)
ben-craig1f64ea92015-07-15 08:11:57 -050027option(BUILD_TUTORIALS "Build Thrift tutorials" ON)
Marco Molteni7f477922015-04-15 20:46:48 +020028option(BUILD_LIBRARIES "Build Thrift libraries" ON)
Pascal Bachd5f87e12014-12-12 15:59:17 +010029
30# Libraries to build
31
32# Each language library can be enabled or disabled using the WITH_<LANG> flag.
33# By default CMake checks if the required dependencies for a language are present
34# and enables the library if all are found. This means the default is to build as
35# much as possible but leaving out libraries if their dependencies are not met.
36
37# C++
Roger Meier3b99c972015-04-20 22:49:48 +020038option(WITH_CPP "Build C++ Thrift library" ON)
Pascal Bachd5f87e12014-12-12 15:59:17 +010039find_package(Boost 1.53 QUIET)
Roger Meier3b99c972015-04-20 22:49:48 +020040CMAKE_DEPENDENT_OPTION(BUILD_CPP "Build C++ library" ON
41 "BUILD_LIBRARIES;WITH_CPP;Boost_FOUND" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +010042# NOTE: Currently the following options are C++ specific,
43# but in future other libraries might reuse them.
Marco Molteni83494252015-04-16 13:50:20 +020044# So they are not dependent on WITH_CPP but setting them without WITH_CPP currently
Pascal Bachd5f87e12014-12-12 15:59:17 +010045# has no effect.
46find_package(ZLIB QUIET)
47CMAKE_DEPENDENT_OPTION(WITH_ZLIB "Build with ZLIB support" ON
48 "ZLIB_FOUND" OFF)
49find_package(Libevent QUIET)
50CMAKE_DEPENDENT_OPTION(WITH_LIBEVENT "Build with libevent support" ON
51 "Libevent_FOUND" OFF)
Nobuaki Sukegawa6304a532014-12-18 01:30:58 +090052find_package(Qt4 QUIET COMPONENTS QtCore QtNetwork)
Pascal Bachd5f87e12014-12-12 15:59:17 +010053CMAKE_DEPENDENT_OPTION(WITH_QT4 "Build with Qt4 support" ON
54 "QT4_FOUND" OFF)
Nobuaki Sukegawa66228772014-12-07 21:45:33 +090055find_package(Qt5 QUIET COMPONENTS Core Network)
56CMAKE_DEPENDENT_OPTION(WITH_QT5 "Build with Qt5 support" ON
57 "Qt5_FOUND" OFF)
58if(${WITH_QT4} AND ${WITH_QT5} AND ${CMAKE_MAJOR_VERSION} LESS 3)
59 # cmake < 3.0.0 causes conflict when building both Qt4 and Qt5
60 set(WITH_QT4 OFF)
61endif()
Pascal Bachd5f87e12014-12-12 15:59:17 +010062find_package(OpenSSL QUIET)
63CMAKE_DEPENDENT_OPTION(WITH_OPENSSL "Build with OpenSSL support" ON
Nobuaki Sukegawac444fb52015-01-02 23:16:55 +090064 "OPENSSL_FOUND" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +010065option(WITH_STDTHREADS "Build with C++ std::thread support" OFF)
Sergei Nikulov34e0bb62015-09-02 13:06:22 +030066CMAKE_DEPENDENT_OPTION(WITH_BOOSTTHREADS "Build with Boost threads support" OFF
67 "NOT WITH_STDTHREADS;Boost_FOUND" OFF)
68
Pascal Bachd5f87e12014-12-12 15:59:17 +010069
70# C GLib
Roger Meier3b99c972015-04-20 22:49:48 +020071option(WITH_C_GLIB "Build C (GLib) Thrift library" ON)
Pascal Bachd5f87e12014-12-12 15:59:17 +010072find_package(GLIB QUIET COMPONENTS gobject)
Roger Meier3b99c972015-04-20 22:49:48 +020073CMAKE_DEPENDENT_OPTION(BUILD_C_GLIB "Build C (GLib) library" ON
74 "BUILD_LIBRARIES;WITH_C_GLIB;GLIB_FOUND" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +010075# Java
Roger Meier3b99c972015-04-20 22:49:48 +020076option(WITH_JAVA "Build Java Thrift library" ON)
Pascal Bachd5f87e12014-12-12 15:59:17 +010077find_package(Java QUIET)
Sergei Nikulov9d8c1bf2015-01-30 13:29:33 +030078find_package(Ant QUIET)
Roger Meier3b99c972015-04-20 22:49:48 +020079CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
80 "BUILD_LIBRARIES;WITH_JAVA;JAVA_FOUND;ANT_FOUND" OFF)
Roger Meier26593812015-04-12 16:10:35 +020081
82# Python
Roger Meier3b99c972015-04-20 22:49:48 +020083option(WITH_PYTHON "Build Python Thrift library" ON)
84find_package(PythonInterp QUIET) # for Python executable
85find_package(PythonLibs QUIET) # for Python.h
86CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python library" ON
87 "BUILD_LIBRARIES;WITH_PYTHON;PYTHONLIBS_FOUND" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +010088
Nobuaki Sukegawa27378fa2015-10-29 00:41:39 +090089# Haskell
90option(WITH_HASKELL "Build Haskell Thrift library" ON)
91find_package(GHC QUIET)
92find_package(Cabal QUIET)
93CMAKE_DEPENDENT_OPTION(BUILD_HASKELL "Build GHC library" ON
94 "BUILD_LIBRARIES;WITH_HASKELL;GHC_FOUND;CABAL_FOUND" OFF)
95
Pascal Bachd5f87e12014-12-12 15:59:17 +010096# Common library options
97option(WITH_SHARED_LIB "Build shared libraries" ON)
98option(WITH_STATIC_LIB "Build static libraries" ON)
Jim King9de9b1f2015-04-30 16:03:34 -040099if (NOT WITH_SHARED_LIB AND NOT WITH_STATIC_LIB)
100 message(FATAL_ERROR "Cannot build with both shared and static outputs disabled!")
101endif()
Pascal Bachd5f87e12014-12-12 15:59:17 +0100102
103#NOTE: C++ compiler options are defined in the lib/cpp/CMakeLists.txt
104
105# Visual Studio only options
106if(MSVC)
Jim King9de9b1f2015-04-30 16:03:34 -0400107option(WITH_MT "Build using MT instead of MD (MSVC only)" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +0100108endif(MSVC)
109
Roger Meier3b99c972015-04-20 22:49:48 +0200110macro(MESSAGE_DEP flag summary)
111if(NOT ${flag})
112 message(STATUS " - ${summary}")
113endif()
114endmacro(MESSAGE_DEP flag summary)
115
Pascal Bachd5f87e12014-12-12 15:59:17 +0100116macro(PRINT_CONFIG_SUMMARY)
117message(STATUS "----------------------------------------------------------")
118message(STATUS "Thrift version: ${thrift_VERSION} (${thrift_VERSION_MAJOR}.${thrift_VERSION_MINOR}.${thrift_VERSION_PATCH})")
119message(STATUS "Thrift package version: ${PACKAGE_VERSION}")
120message(STATUS "Build configuration Summary")
121message(STATUS " Build Thrift compiler: ${BUILD_COMPILER}")
122message(STATUS " Build with unit tests: ${BUILD_TESTING}")
123message(STATUS " Build examples: ${BUILD_EXAMPLES}")
Roger Meier26593812015-04-12 16:10:35 +0200124message(STATUS " Build Thrift libraries: ${BUILD_LIBRARIES}")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100125message(STATUS " Language libraries:")
Roger Meier3b99c972015-04-20 22:49:48 +0200126message(STATUS " Build C++ library: ${BUILD_CPP}")
127MESSAGE_DEP(WITH_CPP "Disabled by via WITH_CCP=OFF")
128MESSAGE_DEP(Boost_FOUND "Boost headers missing")
129message(STATUS " Build C (GLib) library: ${BUILD_C_GLIB}")
130MESSAGE_DEP(WITH_C_GLIB "Disabled by via WITH_C_GLIB=OFF")
131MESSAGE_DEP(GLIB_FOUND "GLib missing")
132message(STATUS " Build Java library: ${BUILD_JAVA}")
133MESSAGE_DEP(WITH_JAVA "Disabled by via WITH_JAVA=OFF")
134MESSAGE_DEP(JAVA_FOUND "Java Runtime missing")
135MESSAGE_DEP(ANT_FOUND "Ant missing")
136message(STATUS " Build Python library: ${BUILD_PYTHON}")
137MESSAGE_DEP(WITH_PYTHON "Disabled by via WITH_PYTHON=OFF")
138MESSAGE_DEP(PYTHONLIBS_FOUND "Python libraries missing")
Nobuaki Sukegawa27378fa2015-10-29 00:41:39 +0900139message(STATUS " Build Haskell library: ${BUILD_HASKELL}")
140MESSAGE_DEP(WITH_HASKELL "Disabled by via WITH_HASKELL=OFF")
141MESSAGE_DEP(GHC_FOUND "GHC missing")
142MESSAGE_DEP(CABAL_FOUND "Cabal missing")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100143message(STATUS " Library features:")
144message(STATUS " Build shared libraries: ${WITH_SHARED_LIB}")
145message(STATUS " Build static libraries: ${WITH_STATIC_LIB}")
146message(STATUS " Build with ZLIB support: ${WITH_ZLIB}")
147message(STATUS " Build with libevent support: ${WITH_LIBEVENT}")
148message(STATUS " Build with Qt4 support: ${WITH_QT4}")
Nobuaki Sukegawa66228772014-12-07 21:45:33 +0900149message(STATUS " Build with Qt5 support: ${WITH_QT5}")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100150message(STATUS " Build with OpenSSL support: ${WITH_OPENSSL}")
151message(STATUS " Build with Boost thread support: ${WITH_BOOSTTHREADS}")
152message(STATUS " Build with C++ std::thread support: ${WITH_STDTHREADS}")
153message(STATUS "----------------------------------------------------------")
154endmacro(PRINT_CONFIG_SUMMARY)