Blame winpr/CMakeLists.txt

Packit Service fa4841
# WinPR: Windows Portable Runtime
Packit Service fa4841
# winpr cmake build script
Packit Service fa4841
#
Packit Service fa4841
# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
#
Packit Service fa4841
# Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
# you may not use this file except in compliance with the License.
Packit Service fa4841
# You may obtain a copy of the License at
Packit Service fa4841
#
Packit Service fa4841
#     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
#
Packit Service fa4841
# Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
# distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
# See the License for the specific language governing permissions and
Packit Service fa4841
# limitations under the License.
Packit Service fa4841
Packit Service fa4841
cmake_minimum_required(VERSION 2.8)
Packit Service fa4841
Packit Service fa4841
project(WinPR C)
Packit Service fa4841
Packit Service fa4841
set(CMAKE_COLOR_MAKEFILE ON)
Packit Service fa4841
Packit Service fa4841
if(FREERDP_VERSION)
Packit Service fa4841
	set(FREERDP_BUILD 1)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Include cmake modules
Packit Service fa4841
include(CheckIncludeFiles)
Packit Service fa4841
include(CheckLibraryExists)
Packit Service fa4841
include(CheckSymbolExists)
Packit Service fa4841
include(CheckStructHasMember)
Packit Service fa4841
include(FindPkgConfig)
Packit Service fa4841
include(TestBigEndian)
Packit Service fa4841
Packit Service fa4841
# Include our extra modules
Packit Service fa4841
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/)
Packit Service fa4841
Packit Service fa4841
# Check for cmake compatibility (enable/disable features)
Packit Service fa4841
include(CheckCmakeCompat)
Packit Service fa4841
include(FindFeature)
Packit Service fa4841
include(ConfigOptions)
Packit Service fa4841
include(ComplexLibrary)
Packit Service fa4841
include(FeatureSummary)
Packit Service fa4841
include(CheckCCompilerFlag)
Packit Service fa4841
include(GNUInstallDirsWrapper)
Packit Service fa4841
include(CMakePackageConfigHelpers)
Packit Service fa4841
Packit Service fa4841
# Soname versioning
Packit Service bb5c11
set(WINPR_VERSION_MAJOR "2")
Packit Service bb5c11
set(WINPR_VERSION_MINOR "0")
Packit Service bb5c11
set(WINPR_VERSION_REVISION "0")
Packit Service fa4841
set(WINPR_VERSION "${WINPR_VERSION_MAJOR}.${WINPR_VERSION_MINOR}.${WINPR_VERSION_REVISION}")
Packit Service bb5c11
set(WINPR_VERSION_FULL "${WINPR_VERSION}")
Packit Service fa4841
set(WINPR_API_VERSION "${WINPR_VERSION_MAJOR}")
Packit Service fa4841
Packit Service fa4841
if(NOT IOS)
Packit Service fa4841
	check_include_files(stdbool.h WINPR_HAVE_STDBOOL_H)
Packit Service fa4841
	check_include_files(stdint.h WINPR_HAVE_STDINT_H)
Packit Service fa4841
	check_include_files(inttypes.h WINPR_HAVE_INTTYPES_H)
Packit Service fa4841
else(NOT IOS)
Packit Service fa4841
	set(WINPR_HAVE_STDBOOL_H 1)
Packit Service fa4841
	set(WINPR_HAVE_STDINT_H 1)
Packit Service fa4841
	set(WINPR_HAVE_INTTYPES_H 1)
Packit Service fa4841
endif(NOT IOS)
Packit Service fa4841
Packit Service fa4841
if(FREERDP_BUILD)
Packit Service fa4841
	set(WINPR_VERSION_FULL ${WINPR_VERSION_FULL} PARENT_SCOPE)
Packit Service fa4841
	set(WINPR_VERSION ${WINPR_VERSION} PARENT_SCOPE)
Packit Service fa4841
	set(WINPR_API_VERSION ${WINPR_API_VERSION} PARENT_SCOPE)
Packit Service fa4841
else()
Packit Service fa4841
	set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
Packit Service fa4841
Packit Service fa4841
	if(NOT IOS)
Packit Service fa4841
		find_package(Threads REQUIRED)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	# Include files
Packit Service fa4841
	if(NOT IOS)
Packit Service fa4841
		check_include_files(fcntl.h HAVE_FCNTL_H)
Packit Service fa4841
		check_include_files(unistd.h HAVE_UNISTD_H)
Packit Service fa4841
		check_include_files(execinfo.h HAVE_EXECINFO_H)
Packit Service fa4841
		check_include_files(inttypes.h HAVE_INTTYPES_H)
Packit Service fa4841
		check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
Packit Service fa4841
		check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
Packit Service fa4841
		check_include_files(sys/sockio.h HAVE_SYS_SOCKIO_H)
Packit Service fa4841
		check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
Packit Service fa4841
		check_include_files(sys/select.h HAVE_SYS_SELECT_H)
Packit Service fa4841
	else()
Packit Service fa4841
		set(HAVE_FCNTL_H 1)
Packit Service fa4841
		set(HAVE_UNISTD_H 1)
Packit Service fa4841
		set(HAVE_INTTYPES_H 1)
Packit Service fa4841
		set(HAVE_SYS_FILIO_H 1)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if(NOT IOS)
Packit Service fa4841
		check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
Packit Service fa4841
	else()
Packit Service fa4841
		set(HAVE_TM_GMTOFF 1)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if(NOT WIN32)
Packit Service fa4841
		CHECK_SYMBOL_EXISTS(pthread_mutex_timedlock pthread.h HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service fa4841
		if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service fa4841
			CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service fa4841
		endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service fa4841
		if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service fa4841
			CHECK_LIBRARY_EXISTS(pthreads pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service fa4841
		endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service fa4841
Packit Service fa4841
		if (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service fa4841
			set(HAVE_PTHREAD_MUTEX_TIMEDLOCK ON)
Packit Service fa4841
		endif (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	set(OPENSSL_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
	set(OPENSSL_FEATURE_PURPOSE "cryptography")
Packit Service fa4841
	set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
Packit Service fa4841
Packit Service fa4841
	set(MBEDTLS_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
	set(MBEDTLS_FEATURE_PURPOSE "cryptography")
Packit Service fa4841
	set(MBEDTLS_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
Packit Service fa4841
Packit Service fa4841
	find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
Packit Service fa4841
	find_feature(MbedTLS ${MBEDTLS_FEATURE_TYPE} ${MBEDTLS_FEATURE_PURPOSE} ${MBEDTLS_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
	if(OPENSSL_FOUND)
Packit Service fa4841
		add_definitions("-DWITH_OPENSSL")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if(MBEDTLS_FOUND)
Packit Service fa4841
		add_definitions("-DWITH_MBEDTLS")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	# Include directories
Packit Service fa4841
	include_directories(${CMAKE_CURRENT_BINARY_DIR})
Packit Service fa4841
Packit Service fa4841
	# Configure files
Packit Service fa4841
	add_definitions("-DHAVE_CONFIG_H")
Packit Service fa4841
	configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
Packit Service fa4841
Packit Service fa4841
	enable_testing()
Packit Service fa4841
Packit Service fa4841
	if(MSVC)
Packit Service fa4841
		set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
Packit Service fa4841
	else()
Packit Service fa4841
		set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Default to release build type
Packit Service fa4841
if(NOT CMAKE_BUILD_TYPE)
Packit Service fa4841
   set(CMAKE_BUILD_TYPE "Release")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Default to build shared libs
Packit Service fa4841
if(NOT DEFINED BUILD_SHARED_LIBS)
Packit Service fa4841
	set(BUILD_SHARED_LIBS ON)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(BUILD_SHARED_LIBS)
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_DLL")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS")
Packit Service fa4841
Packit Service fa4841
# Enable 64bit file support on linux and FreeBSD.
Packit Service fa4841
if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux" OR FREEBSD)
Packit Service fa4841
	add_definitions("-D_FILE_OFFSET_BITS=64")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
Packit Service fa4841
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
Packit Service fa4841
Packit Service fa4841
add_subdirectory(include)
Packit Service fa4841
Packit Service fa4841
add_subdirectory(libwinpr)
Packit Service fa4841
Packit Service bb5c11
if(NOT ANDROID AND NOT IOS AND NOT UWP)
Packit Service fa4841
	add_subdirectory(tools)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(BUILD_TESTING)
Packit Service fa4841
	add_subdirectory(test)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
install_freerdp_man(wlog.7 7)
Packit Service fa4841
# Exporting
Packit Service fa4841
Packit Service fa4841
if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
Packit Service fa4841
Packit Service fa4841
	export(PACKAGE winpr)
Packit Service fa4841
Packit Service fa4841
	SetFreeRDPCMakeInstallDir(WINPR_CMAKE_INSTALL_DIR "WinPR${WINPR_VERSION_MAJOR}")
Packit Service fa4841
Packit Service fa4841
	set(WINPR_INCLUDE_DIR "include/winpr${WINPR_VERSION_MAJOR}")
Packit Service fa4841
Packit Service fa4841
	configure_package_config_file(WinPRConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake
Packit Service fa4841
		INSTALL_DESTINATION ${WINPR_CMAKE_INSTALL_DIR}
Packit Service fa4841
		PATH_VARS WINPR_INCLUDE_DIR)
Packit Service fa4841
Packit Service fa4841
	write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
Packit Service fa4841
		VERSION ${WINPR_VERSION} COMPATIBILITY SameMajorVersion)
Packit Service fa4841
Packit Service fa4841
	install(FILES ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/WinPRConfigVersion.cmake
Packit Service fa4841
		DESTINATION ${WINPR_CMAKE_INSTALL_DIR})
Packit Service fa4841
Packit Service fa4841
	install(EXPORT WinPRTargets DESTINATION ${WINPR_CMAKE_INSTALL_DIR})
Packit Service fa4841
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(FREERDP_BUILD)
Packit Service fa4841
	set(WINPR_PKG_CONFIG_FILENAME winpr${WINPR_VERSION_MAJOR} PARENT_SCOPE)
Packit Service fa4841
endif()
Packit Service fa4841
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr${WINPR_VERSION_MAJOR}.pc @ONLY)
Packit Service fa4841
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr${WINPR_VERSION_MAJOR}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)