Blame winpr/CMakeLists.txt

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