| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 1 | # | 
|  | 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 |  | 
|  | 21 | include(CMakeDependentOption) | 
|  | 22 |  | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 23 | set(THRIFT_COMPILER "" CACHE FILEPATH "External Thrift compiler to use during build") | 
|  | 24 |  | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 25 | # Additional components | 
|  | 26 | option(BUILD_COMPILER "Build Thrift compiler" ON) | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 27 |  | 
|  | 28 | if(BUILD_COMPILER OR EXISTS ${THRIFT_COMPILER}) | 
|  | 29 | set(HAVE_COMPILER ON) | 
|  | 30 | endif() | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 31 | CMAKE_DEPENDENT_OPTION(BUILD_TESTING "Build with unit tests" ON "HAVE_COMPILER" OFF) | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 32 | CMAKE_DEPENDENT_OPTION(BUILD_TUTORIALS "Build Thrift tutorials" ON "HAVE_COMPILER" OFF) | 
| Marco Molteni | 7f47792 | 2015-04-15 20:46:48 +0200 | [diff] [blame] | 33 | option(BUILD_LIBRARIES "Build Thrift libraries" ON) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 34 |  | 
|  | 35 | # Libraries to build | 
|  | 36 |  | 
|  | 37 | # Each language library can be enabled or disabled using the WITH_<LANG> flag. | 
|  | 38 | # By default CMake checks if the required dependencies for a language are present | 
|  | 39 | # and enables the library if all are found. This means the default is to build as | 
|  | 40 | # much as possible but leaving out libraries if their dependencies are not met. | 
|  | 41 |  | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 42 | if (NOT Boost_USE_STATIC_LIBS) | 
| Nobuaki Sukegawa | 11da87e | 2016-09-10 14:02:19 +0900 | [diff] [blame] | 43 | add_definitions(-DBOOST_ALL_DYN_LINK) | 
|  | 44 | add_definitions(-DBOOST_TEST_DYN_LINK) | 
|  | 45 | endif() | 
|  | 46 |  | 
| James E. King III | b1d63e7 | 2019-01-22 14:16:39 -0500 | [diff] [blame] | 47 | # as3 | 
|  | 48 | option(WITH_AS3 "Build ActionScript 3 Thrift Library" ON) | 
|  | 49 | if (WITH_AS3) | 
|  | 50 | set(POSSIBLE_PATHS "${FLEX_HOME}/bin" "$ENV{FLEX_HOME}/bin") | 
|  | 51 | find_program(HAVE_COMPC NAMES compc HINTS ${POSSIBLE_PATHS}) | 
|  | 52 | endif () | 
|  | 53 | CMAKE_DEPENDENT_OPTION(BUILD_AS3 "Build as3 library" ON | 
|  | 54 | "BUILD_LIBRARIES;WITH_AS3;HAVE_COMPC" OFF) | 
|  | 55 |  | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 56 | # C++ | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 57 | option(WITH_CPP "Build C++ Thrift library" ON) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 58 | if(WITH_CPP) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 59 | # NOTE: Currently the following options are C++ specific, | 
|  | 60 | # but in future other libraries might reuse them. | 
|  | 61 | # So they are not dependent on WITH_CPP but setting them without WITH_CPP currently | 
|  | 62 | # has no effect. | 
|  | 63 | if(ZLIB_LIBRARY) | 
|  | 64 | # FindZLIB.cmake does not normalize path so we need to do it ourselves. | 
|  | 65 | file(TO_CMAKE_PATH ${ZLIB_LIBRARY} ZLIB_LIBRARY) | 
|  | 66 | endif() | 
|  | 67 | find_package(ZLIB QUIET) | 
|  | 68 | CMAKE_DEPENDENT_OPTION(WITH_ZLIB "Build with ZLIB support" ON | 
|  | 69 | "ZLIB_FOUND" OFF) | 
|  | 70 | find_package(Libevent QUIET) | 
|  | 71 | CMAKE_DEPENDENT_OPTION(WITH_LIBEVENT "Build with libevent support" ON | 
|  | 72 | "Libevent_FOUND" OFF) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 73 | find_package(Qt5 QUIET COMPONENTS Core Network) | 
|  | 74 | CMAKE_DEPENDENT_OPTION(WITH_QT5 "Build with Qt5 support" ON | 
|  | 75 | "Qt5_FOUND" OFF) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 76 | find_package(OpenSSL QUIET) | 
|  | 77 | CMAKE_DEPENDENT_OPTION(WITH_OPENSSL "Build with OpenSSL support" ON | 
|  | 78 | "OPENSSL_FOUND" OFF) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 79 | endif() | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 80 | CMAKE_DEPENDENT_OPTION(BUILD_CPP "Build C++ library" ON | 
| James E. King III | c9ac8d2 | 2019-01-07 16:46:45 -0500 | [diff] [blame] | 81 | "BUILD_LIBRARIES;WITH_CPP" OFF) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 82 |  | 
|  | 83 | # C GLib | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 84 | option(WITH_C_GLIB "Build C (GLib) Thrift library" ON) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 85 | if(WITH_C_GLIB) | 
|  | 86 | find_package(GLIB QUIET COMPONENTS gobject) | 
|  | 87 | endif() | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 88 | CMAKE_DEPENDENT_OPTION(BUILD_C_GLIB "Build C (GLib) library" ON | 
|  | 89 | "BUILD_LIBRARIES;WITH_C_GLIB;GLIB_FOUND" OFF) | 
| Nobuaki Sukegawa | 33744b0 | 2016-01-03 14:24:39 +0900 | [diff] [blame] | 90 |  | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 91 | # Java | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 92 | option(WITH_JAVA "Build Java Thrift library" ON) | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 93 | if(ANDROID) | 
|  | 94 | find_package(Gradle QUIET) | 
|  | 95 | CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON | 
|  | 96 | "BUILD_LIBRARIES;WITH_JAVA;GRADLE_FOUND" OFF) | 
|  | 97 | else() | 
| Alex Volanis | 7004a61 | 2018-01-24 10:30:13 -0500 | [diff] [blame] | 98 | find_package(Gradlew QUIET) | 
| Pascal Bach | 665844e | 2015-12-01 11:02:14 +0100 | [diff] [blame] | 99 | find_package(Java QUIET) | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 100 | CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON | 
| Alex Volanis | 7004a61 | 2018-01-24 10:30:13 -0500 | [diff] [blame] | 101 | "BUILD_LIBRARIES;WITH_JAVA;JAVA_FOUND;GRADLEW_FOUND" OFF) | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 102 | endif() | 
| Roger Meier | 2659381 | 2015-04-12 16:10:35 +0200 | [diff] [blame] | 103 |  | 
|  | 104 | # Python | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 105 | option(WITH_PYTHON "Build Python Thrift library" ON) | 
|  | 106 | find_package(PythonInterp QUIET) # for Python executable | 
|  | 107 | find_package(PythonLibs QUIET) # for Python.h | 
|  | 108 | CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python library" ON | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 109 | "BUILD_LIBRARIES;WITH_PYTHON;PYTHONINTERP_FOUND;PYTHONLIBS_FOUND" OFF) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 110 |  | 
| Nobuaki Sukegawa | 27378fa | 2015-10-29 00:41:39 +0900 | [diff] [blame] | 111 | # Haskell | 
|  | 112 | option(WITH_HASKELL "Build Haskell Thrift library" ON) | 
|  | 113 | find_package(GHC QUIET) | 
|  | 114 | find_package(Cabal QUIET) | 
|  | 115 | CMAKE_DEPENDENT_OPTION(BUILD_HASKELL "Build GHC library" ON | 
|  | 116 | "BUILD_LIBRARIES;WITH_HASKELL;GHC_FOUND;CABAL_FOUND" OFF) | 
|  | 117 |  | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 118 | # Common library options | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 119 | # https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html | 
|  | 120 | # Default on Windows is static, shared mode library support needs work... | 
|  | 121 | CMAKE_DEPENDENT_OPTION(BUILD_SHARED_LIBS "Build shared libraries" OFF "WIN32" ON) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 122 |  | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 123 | if (WITH_SHARED_LIB) | 
|  | 124 | message(WARNING "WITH_SHARED_LIB is deprecated; use -DBUILD_SHARED_LIBS=ON instead") | 
|  | 125 | set(BUILD_SHARED_LIBS ON) | 
|  | 126 | elseif (WITH_STATIC_LIB) | 
|  | 127 | if (WITH_SHARED_LIB) | 
|  | 128 | message(FATAL_ERROR "Cannot build shared and static together; set BUILD_SHARED_LIBS instead.") | 
|  | 129 | endif () | 
|  | 130 | message(WARNING "WITH_STATIC_LIB is deprecated; use -DBUILD_SHARED_LIBS=OFF instead") | 
|  | 131 | set(BUILD_SHARED_LIBS OFF) | 
|  | 132 | endif () | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 133 |  | 
|  | 134 | # Visual Studio only options | 
|  | 135 | if(MSVC) | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 136 | option(WITH_MT "Build using MT instead of MD (MSVC only)" OFF) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 137 | endif(MSVC) | 
|  | 138 |  | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 139 | macro(MESSAGE_DEP flag summary) | 
|  | 140 | if(NOT ${flag}) | 
| James E. King III | 278528c | 2019-01-11 12:17:44 -0500 | [diff] [blame] | 141 | message(STATUS "   - ${summary}") | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 142 | endif() | 
|  | 143 | endmacro(MESSAGE_DEP flag summary) | 
|  | 144 |  | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 145 | macro(PRINT_CONFIG_SUMMARY) | 
|  | 146 | message(STATUS "----------------------------------------------------------") | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 147 | message(STATUS "Thrift version:                               ${thrift_VERSION} (${thrift_VERSION_MAJOR}.${thrift_VERSION_MINOR}.${thrift_VERSION_PATCH})") | 
|  | 148 | message(STATUS "Thrift package version:                       ${PACKAGE_VERSION}") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 149 | message(STATUS) | 
|  | 150 | message(STATUS "Build configuration summary") | 
| James E. King III | b1d63e7 | 2019-01-22 14:16:39 -0500 | [diff] [blame] | 151 | message(STATUS "  Build compiler:                             ${BUILD_COMPILER}") | 
| James E. King III | b1d63e7 | 2019-01-22 14:16:39 -0500 | [diff] [blame] | 152 | message(STATUS "  Build libraries:                            ${BUILD_LIBRARIES}") | 
|  | 153 | message(STATUS "  Build tests:                                ${BUILD_TESTING}") | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 154 | MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 155 | message(STATUS "  Build type:                                 ${CMAKE_BUILD_TYPE}") | 
|  | 156 | message(STATUS) | 
|  | 157 | message(STATUS "Language libraries:") | 
|  | 158 | message(STATUS) | 
| James E. King III | b1d63e7 | 2019-01-22 14:16:39 -0500 | [diff] [blame] | 159 | message(STATUS "  Build as3 library:                          ${BUILD_AS3}") | 
|  | 160 | MESSAGE_DEP(WITH_AS3 "Disabled by WITH_AS3=OFF") | 
|  | 161 | MESSAGE_DEP(HAVE_COMPC "Adobe Flex compc was not found - did you set env var FLEX_HOME?") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 162 | message(STATUS) | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 163 | message(STATUS "  Build C++ library:                          ${BUILD_CPP}") | 
| James E. King, III | c9877fb | 2016-11-14 10:20:52 -0500 | [diff] [blame] | 164 | MESSAGE_DEP(WITH_CPP "Disabled by WITH_CPP=OFF") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 165 | if (BUILD_CPP) | 
|  | 166 | message(STATUS "    C++ Language Level:                       ${CXX_LANGUAGE_LEVEL}") | 
|  | 167 | message(STATUS "    Build shared libraries:                   ${BUILD_SHARED_LIBS}") | 
|  | 168 | message(STATUS "    Build with libevent support:              ${WITH_LIBEVENT}") | 
|  | 169 | message(STATUS "    Build with Qt5 support:                   ${WITH_QT5}") | 
|  | 170 | message(STATUS "    Build with ZLIB support:                  ${WITH_ZLIB}") | 
|  | 171 | endif () | 
|  | 172 | message(STATUS) | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 173 | message(STATUS "  Build C (GLib) library:                     ${BUILD_C_GLIB}") | 
| James E. King, III | c9877fb | 2016-11-14 10:20:52 -0500 | [diff] [blame] | 174 | MESSAGE_DEP(WITH_C_GLIB "Disabled by WITH_C_GLIB=OFF") | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 175 | MESSAGE_DEP(GLIB_FOUND "GLib missing") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 176 | message(STATUS) | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 177 | message(STATUS "  Build Java library:                         ${BUILD_JAVA}") | 
| James E. King, III | c9877fb | 2016-11-14 10:20:52 -0500 | [diff] [blame] | 178 | MESSAGE_DEP(WITH_JAVA "Disabled by WITH_JAVA=OFF") | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 179 | if(ANDROID) | 
|  | 180 | MESSAGE_DEP(GRADLE_FOUND "Gradle missing") | 
|  | 181 | else() | 
|  | 182 | MESSAGE_DEP(JAVA_FOUND "Java Runtime missing") | 
| Alex Volanis | 7004a61 | 2018-01-24 10:30:13 -0500 | [diff] [blame] | 183 | MESSAGE_DEP(GRADLEW_FOUND "Gradle Wrapper missing") | 
| Nobuaki Sukegawa | ca93936 | 2015-11-14 00:23:40 +0900 | [diff] [blame] | 184 | endif() | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 185 | message(STATUS) | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 186 | message(STATUS "  Build Python library:                       ${BUILD_PYTHON}") | 
| James E. King, III | c9877fb | 2016-11-14 10:20:52 -0500 | [diff] [blame] | 187 | MESSAGE_DEP(WITH_PYTHON "Disabled by WITH_PYTHON=OFF") | 
| Roger Meier | 3b99c97 | 2015-04-20 22:49:48 +0200 | [diff] [blame] | 188 | MESSAGE_DEP(PYTHONLIBS_FOUND "Python libraries missing") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 189 | message(STATUS) | 
| Antonio Di Monaco | 796667b | 2016-01-04 23:05:19 +0100 | [diff] [blame] | 190 | message(STATUS "  Build Haskell library:                      ${BUILD_HASKELL}") | 
| James E. King, III | c9877fb | 2016-11-14 10:20:52 -0500 | [diff] [blame] | 191 | MESSAGE_DEP(WITH_HASKELL "Disabled by WITH_HASKELL=OFF") | 
| Nobuaki Sukegawa | 27378fa | 2015-10-29 00:41:39 +0900 | [diff] [blame] | 192 | MESSAGE_DEP(GHC_FOUND "GHC missing") | 
|  | 193 | MESSAGE_DEP(CABAL_FOUND "Cabal missing") | 
| James E. King III | 4c57be0 | 2019-01-27 11:12:43 -0500 | [diff] [blame] | 194 | message(STATUS) | 
| Pascal Bach | d5f87e1 | 2014-12-12 15:59:17 +0100 | [diff] [blame] | 195 | message(STATUS "----------------------------------------------------------") | 
|  | 196 | endmacro(PRINT_CONFIG_SUMMARY) |