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 Service 5a9772
if (NOT WIN32)
Packit Service 5a9772
    add_definitions(-DWINPR_CRITICAL_SECTION_DISABLE_SPINCOUNT)
Packit Service 5a9772
endif()
Packit Service 5a9772
Packit 1fb8d4
# Soname versioning
Packit Service 5a9772
set(RAW_VERSION_STRING "2.1.1")
Packit Service 5a9772
if(EXISTS "${CMAKE_SOURCE_DIR}/.source_tag")
Packit Service 5a9772
	file(READ ${CMAKE_SOURCE_DIR}/.source_tag RAW_VERSION_STRING)
Packit Service 5a9772
elseif(USE_VERSION_FROM_GIT_TAG)
Packit Service 5a9772
	git_get_exact_tag(_GIT_TAG --tags --always)
Packit Service 5a9772
	if (NOT ${_GIT_TAG} STREQUAL "n/a")
Packit Service 5a9772
		set(RAW_VERSION_STRING ${_GIT_TAG})
Packit Service 5a9772
	endif()
Packit Service 5a9772
endif()
Packit Service 5a9772
string(STRIP ${RAW_VERSION_STRING} RAW_VERSION_STRING)
Packit Service 5a9772
Packit Service 5a9772
set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
Packit Service 5a9772
string(REGEX REPLACE "${VERSION_REGEX}" "\\1" WINPR_VERSION_MAJOR "${RAW_VERSION_STRING}")
Packit Service 5a9772
string(REGEX REPLACE "${VERSION_REGEX}" "\\2" WINPR_VERSION_MINOR "${RAW_VERSION_STRING}")
Packit Service 5a9772
string(REGEX REPLACE "${VERSION_REGEX}" "\\3" WINPR_VERSION_REVISION "${RAW_VERSION_STRING}")
Packit Service 5a9772
string(REGEX REPLACE "${VERSION_REGEX}" "\\4" WINPR_VERSION_SUFFIX "${RAW_VERSION_STRING}")
Packit Service 5a9772
Packit 1fb8d4
set(WINPR_VERSION "${WINPR_VERSION_MAJOR}.${WINPR_VERSION_MINOR}.${WINPR_VERSION_REVISION}")
Packit 1fb8d4
set(WINPR_API_VERSION "${WINPR_VERSION_MAJOR}")
Packit Service 5a9772
if (WINPR_VERSION_SUFFIX)
Packit Service 5a9772
	set(WINPR_VERSION_FULL "${WINPR_VERSION}-${WINPR_VERSION_SUFFIX}")
Packit Service 5a9772
else()
Packit Service 5a9772
	set(WINPR_VERSION_FULL "${WINPR_VERSION}")
Packit Service 5a9772
endif()
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 Service 5a9772
if(NOT ANDROID AND NOT IOS AND NOT UWP AND WITH_WINPR_TOOLS)
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)