Merge pull request #3172 from realjiangms/android_launch_by_scheme_2720
[platform/upstream/freerdp.git] / winpr / CMakeLists.txt
1 # WinPR: Windows Portable Runtime
2 # winpr cmake build script
3 #
4 # Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # 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, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17
18 cmake_minimum_required(VERSION 2.8)
19
20 project(WinPR C)
21
22 set(CMAKE_COLOR_MAKEFILE ON)
23
24 if(FREERDP_VERSION)
25         set(FREERDP_BUILD 1)
26 endif()
27
28 # Include cmake modules
29 include(CheckIncludeFiles)
30 include(CheckLibraryExists)
31 include(CheckSymbolExists)
32 include(CheckStructHasMember)
33 include(FindPkgConfig)
34 include(TestBigEndian)
35
36 # Include our extra modules
37 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/)
38
39 # Check for cmake compatibility (enable/disable features)
40 include(CheckCmakeCompat)
41 include(FindFeature)
42 include(AutoVersioning)
43 include(ConfigOptions)
44 include(ComplexLibrary)
45 include(FeatureSummary)
46 include(CheckCCompilerFlag)
47 include(GNUInstallDirsWrapper)
48 include(CMakePackageConfigHelpers)
49
50 # Soname versioning
51 set(WINPR_VERSION_MAJOR "2")
52 set(WINPR_VERSION_MINOR "0")
53 set(WINPR_VERSION_REVISION "0")
54 set(WINPR_VERSION "${WINPR_VERSION_MAJOR}.${WINPR_VERSION_MINOR}.${WINPR_VERSION_REVISION}")
55 set(WINPR_VERSION_FULL "${WINPR_VERSION}")
56 set(WINPR_API_VERSION "${WINPR_VERSION_MAJOR}")
57
58 if(NOT IOS)
59         check_include_files(stdbool.h WINPR_HAVE_STDBOOL_H)
60         check_include_files(stdint.h WINPR_HAVE_STDINT_H)
61 else(NOT IOS)
62         set(WINPR_HAVE_STDBOOL_H 1)
63         set(WINPR_HAVE_STDINT_H 1)
64 endif(NOT IOS)
65
66 if(FREERDP_BUILD)
67         set(WINPR_VERSION_FULL ${WINPR_VERSION_FULL} PARENT_SCOPE)
68         set(WINPR_VERSION ${WINPR_VERSION} PARENT_SCOPE)
69         set(WINPR_API_VERSION ${WINPR_API_VERSION} PARENT_SCOPE)
70 else()
71         set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
72
73         if(NOT IOS AND NOT ANDROID)
74                 find_package(Threads REQUIRED)
75         endif()
76
77         # Include files
78         if(NOT IOS)
79                 check_include_files(fcntl.h HAVE_FCNTL_H)
80                 check_include_files(unistd.h HAVE_UNISTD_H)
81                 check_include_files(execinfo.h HAVE_EXECINFO_H)
82                 check_include_files(inttypes.h HAVE_INTTYPES_H)
83                 check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
84                 check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
85                 check_include_files(sys/sockio.h HAVE_SYS_SOCKIO_H)
86                 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
87                 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
88         else()
89                 set(HAVE_FCNTL_H 1)
90                 set(HAVE_UNISTD_H 1)
91                 set(HAVE_INTTYPES_H 1)
92                 set(HAVE_SYS_FILIO_H 1)
93         endif()
94
95         if(NOT IOS)
96                 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
97         else()
98                 set(HAVE_TM_GMTOFF 1)
99         endif()
100
101         if(NOT WIN32)
102                 check_library_exists(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK)
103         endif()
104
105         set(OPENSSL_FEATURE_TYPE "OPTIONAL")
106         set(OPENSSL_FEATURE_PURPOSE "cryptography")
107         set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
108
109         set(MBEDTLS_FEATURE_TYPE "OPTIONAL")
110         set(MBEDTLS_FEATURE_PURPOSE "cryptography")
111         set(MBEDTLS_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
112
113         find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
114         find_feature(MbedTLS ${MBEDTLS_FEATURE_TYPE} ${MBEDTLS_FEATURE_PURPOSE} ${MBEDTLS_FEATURE_DESCRIPTION})
115
116         if(OPENSSL_FOUND)
117                 add_definitions("-DWITH_OPENSSL")
118         endif()
119
120         if(MBEDTLS_FOUND)
121                 add_definitions("-DWITH_MBEDTLS")
122         endif()
123
124         # Include directories
125         include_directories(${CMAKE_CURRENT_BINARY_DIR})
126
127         # Configure files
128         add_definitions("-DHAVE_CONFIG_H")
129         configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
130
131         enable_testing()
132
133         if(MSVC)
134                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
135         else()
136                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
137         endif()
138 endif()
139
140 # Default to release build type
141 if(NOT CMAKE_BUILD_TYPE)
142    set(CMAKE_BUILD_TYPE "Release")
143 endif()
144
145 # Default to build shared libs
146 if(NOT DEFINED BUILD_SHARED_LIBS)
147         set(BUILD_SHARED_LIBS ON)
148 endif()
149
150 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS")
151
152 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
153 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
154
155 add_subdirectory(include)
156
157 add_subdirectory(libwinpr)
158
159 if(NOT ANDROID AND NOT IOS)
160         add_subdirectory(tools)
161 endif()
162
163 if(BUILD_TESTING)
164         add_subdirectory(test)
165 endif()
166
167 # Exporting
168
169 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
170
171         export(PACKAGE winpr)
172
173         set(WINPR_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/WinPR${WINPR_VERSION_MAJOR}")
174
175         set(WINPR_INCLUDE_DIR "include/winpr${WINPR_VERSION_MAJOR}")
176
177         configure_package_config_file(WinPRConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake
178                 INSTALL_DESTINATION ${WINPR_CMAKE_INSTALL_DIR}
179                 PATH_VARS WINPR_INCLUDE_DIR)
180
181         write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
182                 VERSION ${WINPR_VERSION} COMPATIBILITY SameMajorVersion)
183
184         install(FILES ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
185                 DESTINATION ${WINPR_CMAKE_INSTALL_DIR})
186
187         install(EXPORT WinPRTargets DESTINATION ${WINPR_CMAKE_INSTALL_DIR})
188
189 endif()
190
191 if(FREERDP_BUILD)
192         set(WINPR_PKG_CONFIG_FILENAME winpr${WINPR_VERSION_MAJOR} PARENT_SCOPE)
193 endif()
194 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr${WINPR_VERSION_MAJOR}.pc @ONLY)
195 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr${WINPR_VERSION_MAJOR}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)