1 # WinPR: Windows Portable Runtime
2 # winpr cmake build script
4 # Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
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
10 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 cmake_minimum_required(VERSION 2.8)
22 set(CMAKE_COLOR_MAKEFILE ON)
28 # Include cmake modules
29 include(CheckIncludeFiles)
30 include(CheckLibraryExists)
31 include(CheckSymbolExists)
32 include(CheckStructHasMember)
33 include(FindPkgConfig)
34 include(TestBigEndian)
36 # Include our extra modules
37 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/)
39 # Check for cmake compatibility (enable/disable features)
40 include(CheckCmakeCompat)
42 include(AutoVersioning)
43 include(ConfigOptions)
44 include(ComplexLibrary)
45 include(FeatureSummary)
46 include(CheckCCompilerFlag)
47 include(GNUInstallDirsWrapper)
48 include(CMakePackageConfigHelpers)
51 set(WINPR_VERSION_MAJOR "1")
52 set(WINPR_VERSION_MINOR "1")
53 set(WINPR_VERSION_REVISION "0")
54 set(WINPR_VERSION "${WINPR_VERSION_MAJOR}.${WINPR_VERSION_MINOR}")
55 set(WINPR_VERSION_FULL "${WINPR_VERSION}.${WINPR_VERSION_REVISION}")
58 set(WINPR_VERSION_FULL ${WINPR_VERSION_FULL} PARENT_SCOPE)
60 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
62 if(NOT IOS AND NOT ANDROID)
63 find_package(Threads REQUIRED)
68 check_include_files(fcntl.h HAVE_FCNTL_H)
69 check_include_files(unistd.h HAVE_UNISTD_H)
70 check_include_files(execinfo.h HAVE_EXECINFO_H)
71 check_include_files(stdint.h HAVE_STDINT_H)
72 check_include_files(inttypes.h HAVE_INTTYPES_H)
73 check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
74 check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
75 check_include_files(sys/sockio.h HAVE_SYS_SOCKIO_H)
76 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
77 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
82 set(HAVE_INTTYPES_H 1)
83 set(HAVE_SYS_FILIO_H 1)
87 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
93 check_library_exists(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK)
96 set(OPENSSL_FEATURE_TYPE "OPTIONAL")
97 set(OPENSSL_FEATURE_PURPOSE "cryptography")
98 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
100 set(MBEDTLS_FEATURE_TYPE "OPTIONAL")
101 set(MBEDTLS_FEATURE_PURPOSE "cryptography")
102 set(MBEDTLS_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
104 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
105 find_feature(MbedTLS ${MBEDTLS_FEATURE_TYPE} ${MBEDTLS_FEATURE_PURPOSE} ${MBEDTLS_FEATURE_DESCRIPTION})
108 add_definitions("-DWITH_OPENSSL")
112 add_definitions("-DWITH_MBEDTLS")
115 # Include directories
116 include_directories(${CMAKE_CURRENT_BINARY_DIR})
119 add_definitions("-DHAVE_CONFIG_H")
120 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
125 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
127 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
131 # Default to release build type
132 if(NOT CMAKE_BUILD_TYPE)
133 set(CMAKE_BUILD_TYPE "Release")
136 # Default to build shared libs
137 if(NOT DEFINED BUILD_SHARED_LIBS)
138 set(BUILD_SHARED_LIBS ON)
141 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS")
143 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
144 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
146 add_subdirectory(include)
148 add_subdirectory(libwinpr)
150 if(NOT ANDROID AND NOT IOS)
151 add_subdirectory(tools)
155 add_subdirectory(test)
160 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
162 export(PACKAGE winpr)
164 set(WINPR_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/WinPR")
166 set(WINPR_INCLUDE_DIR "include")
168 configure_package_config_file(WinPRConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake
169 INSTALL_DESTINATION ${WINPR_CMAKE_INSTALL_DIR}
170 PATH_VARS WINPR_INCLUDE_DIR)
172 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
173 VERSION ${WINPR_VERSION} COMPATIBILITY SameMajorVersion)
175 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
176 DESTINATION ${WINPR_CMAKE_INSTALL_DIR})
178 install(EXPORT WinPRTargets DESTINATION ${WINPR_CMAKE_INSTALL_DIR})