Blame CMakeLists.txt

Packit Service fa4841
# FreeRDP: A Remote Desktop Protocol Implementation
Packit Service fa4841
# FreeRDP cmake build script
Packit Service fa4841
#
Packit Service fa4841
# Copyright 2011 O.S. Systems Software Ltda.
Packit Service fa4841
# Copyright 2011 Otavio Salvador <otavio@ossystems.com.br>
Packit Service fa4841
# Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
# Copyright 2012 HP Development Company, LLC
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(FreeRDP C CXX)
Packit Service fa4841
Packit Service fa4841
if(NOT DEFINED VENDOR)
Packit Service fa4841
	set(VENDOR "FreeRDP" CACHE STRING "FreeRDP package vendor")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(NOT DEFINED PRODUCT)
Packit Service fa4841
	set(PRODUCT "FreeRDP" CACHE STRING "FreeRDP package name")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(NOT DEFINED FREERDP_VENDOR)
Packit Service fa4841
	set(FREERDP_VENDOR 1)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
set(CMAKE_COLOR_MAKEFILE ON)
Packit Service fa4841
Packit Service fa4841
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
Packit Service fa4841
Packit Service fa4841
# Include our extra modules
Packit Service fa4841
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)
Packit Service fa4841
Packit Service fa4841
if((CMAKE_SYSTEM_NAME MATCHES "WindowsStore") AND (CMAKE_SYSTEM_VERSION MATCHES "10.0"))
Packit Service fa4841
	set(UWP 1)
Packit Service fa4841
	add_definitions("-D_UWP")
Packit Service fa4841
	set(CMAKE_WINDOWS_VERSION "WIN10")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Check for cmake compatibility (enable/disable features)
Packit Service fa4841
include(CheckCmakeCompat)
Packit Service fa4841
Packit Service fa4841
# Include cmake modules
Packit Service b1ea74
if(WITH_CLANG_FORMAT)
Packit Service b1ea74
	include(ClangFormat)
Packit Service b1ea74
endif()
Packit Service b1ea74
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(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(CheckCXXCompilerFlag)
Packit Service fa4841
include(GNUInstallDirsWrapper)
Packit Service fa4841
include(CMakePackageConfigHelpers)
Packit Service fa4841
include(InstallFreeRDPMan)
Packit Service fa4841
include(GetGitRevisionDescription)
Packit Service fa4841
include(SetFreeRDPCMakeInstallDir)
Packit Service fa4841
Packit Service fa4841
# Soname versioning
Packit Service fa4841
set(BUILD_NUMBER 0)
Packit Service fa4841
if ($ENV{BUILD_NUMBER})
Packit Service fa4841
	set(BUILD_NUMBER $ENV{BUILD_NUMBER})
Packit Service fa4841
endif()
Packit Service fa4841
set(WITH_LIBRARY_VERSIONING "ON")
Packit Service fa4841
Packit Service b1ea74
set(RAW_VERSION_STRING "2.2.0")
Packit Service fa4841
if(EXISTS "${CMAKE_SOURCE_DIR}/.source_tag")
Packit Service b1ea74
	file(READ ${CMAKE_SOURCE_DIR}/.source_tag RAW_VERSION_STRING)
Packit Service fa4841
elseif(USE_VERSION_FROM_GIT_TAG)
Packit Service fa4841
	git_get_exact_tag(_GIT_TAG --tags --always)
Packit Service fa4841
	if (NOT ${_GIT_TAG} STREQUAL "n/a")
Packit Service b1ea74
		set(RAW_VERSION_STRING ${_GIT_TAG})
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service b1ea74
string(STRIP ${RAW_VERSION_STRING} RAW_VERSION_STRING)
Packit Service fa4841
Packit Service fa4841
set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
Packit Service b1ea74
string(REGEX REPLACE "${VERSION_REGEX}" "\\1" FREERDP_VERSION_MAJOR "${RAW_VERSION_STRING}")
Packit Service b1ea74
string(REGEX REPLACE "${VERSION_REGEX}" "\\2" FREERDP_VERSION_MINOR "${RAW_VERSION_STRING}")
Packit Service b1ea74
string(REGEX REPLACE "${VERSION_REGEX}" "\\3" FREERDP_VERSION_REVISION "${RAW_VERSION_STRING}")
Packit Service b1ea74
string(REGEX REPLACE "${VERSION_REGEX}" "\\4" FREERDP_VERSION_SUFFIX "${RAW_VERSION_STRING}")
Packit Service fa4841
Packit Service fa4841
set(FREERDP_API_VERSION "${FREERDP_VERSION_MAJOR}")
Packit Service fa4841
set(FREERDP_VERSION "${FREERDP_VERSION_MAJOR}.${FREERDP_VERSION_MINOR}.${FREERDP_VERSION_REVISION}")
Packit Service fa4841
if (FREERDP_VERSION_SUFFIX)
Packit Service fa4841
	set(FREERDP_VERSION_FULL "${FREERDP_VERSION}-${FREERDP_VERSION_SUFFIX}")
Packit Service fa4841
else()
Packit Service fa4841
	set(FREERDP_VERSION_FULL "${FREERDP_VERSION}")
Packit Service fa4841
endif()
Packit Service fa4841
message("FREERDP_VERSION=${FREERDP_VERSION_FULL}")
Packit Service fa4841
Packit Service fa4841
set(FREERDP_INCLUDE_DIR "include/freerdp${FREERDP_VERSION_MAJOR}/")
Packit Service fa4841
Packit Service fa4841
# Compatibility options
Packit Service fa4841
if(DEFINED STATIC_CHANNELS)
Packit Service fa4841
	message(WARNING "STATIC_CHANNELS is obsolete, please use BUILTIN_CHANNELS instead")
Packit Service fa4841
	set(BUILTIN_CHANNELS ${STATIC_CHANNELS} CACHE BOOL "" FORCE)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Make paths absolute
Packit Service fa4841
if (CMAKE_INSTALL_PREFIX)
Packit Service fa4841
	get_filename_component(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
Packit Service fa4841
endif()
Packit Service fa4841
if (FREERDP_EXTERNAL_PATH)
Packit Service fa4841
	get_filename_component (FREERDP_EXTERNAL_PATH "${FREERDP_EXTERNAL_PATH}" ABSOLUTE)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Allow to search the host machine for git/ccache
Packit Service fa4841
if(CMAKE_CROSSCOMPILING)
Packit Service fa4841
	SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
Packit Service fa4841
endif(CMAKE_CROSSCOMPILING)
Packit Service fa4841
Packit Service fa4841
find_program(CCACHE ccache)
Packit Service fa4841
if(CCACHE AND WITH_CCACHE)
Packit Service fa4841
	if(CMAKE_VERSION VERSION_GREATER 3.3.2)
Packit Service fa4841
		if(NOT DEFINED CMAKE_C_COMPILER_LAUNCHER)
Packit Service fa4841
			SET(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
Packit Service fa4841
		endif(NOT DEFINED CMAKE_C_COMPILER_LAUNCHER)
Packit Service fa4841
		if(NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER)
Packit Service fa4841
			SET(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
Packit Service fa4841
		endif(NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER)
Packit Service fa4841
	else()
Packit Service fa4841
		set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
Packit Service fa4841
		set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
Packit Service fa4841
	endif()
Packit Service fa4841
endif(CCACHE AND WITH_CCACHE)
Packit Service fa4841
Packit Service fa4841
if(EXISTS "${CMAKE_SOURCE_DIR}/.source_version" )
Packit Service fa4841
	file(READ ${CMAKE_SOURCE_DIR}/.source_version GIT_REVISION)
Packit Service fa4841
Packit Service fa4841
  string(STRIP ${GIT_REVISION} GIT_REVISION)
Packit Service fa4841
else()
Packit Service fa4841
	git_get_exact_tag(GIT_REVISION --tags --always)
Packit Service fa4841
Packit Service fa4841
	if (${GIT_REVISION} STREQUAL "n/a")
Packit Service fa4841
		git_rev_parse (GIT_REVISION --short)
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(CMAKE_CROSSCOMPILING)
Packit Service fa4841
	SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
Packit Service fa4841
endif(CMAKE_CROSSCOMPILING)
Packit Service fa4841
# /Allow to search the host machine for git/ccache
Packit Service fa4841
Packit Service fa4841
message(STATUS "Git Revision ${GIT_REVISION}")
Packit Service fa4841
Packit Service fa4841
# Turn on solution folders (2.8.4+)
Packit Service fa4841
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
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
if(NOT DEFINED BUILD_SHARED_LIBS)
Packit Service fa4841
	if(IOS)
Packit Service fa4841
		set(BUILD_SHARED_LIBS OFF)
Packit Service fa4841
	else()
Packit Service fa4841
		set(BUILD_SHARED_LIBS ON)
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(BUILD_TESTING)
Packit Service fa4841
	set(EXPORT_ALL_SYMBOLS TRUE)
Packit Service fa4841
elseif(NOT DEFINED EXPORT_ALL_SYMBOLS)
Packit Service fa4841
	set(EXPORT_ALL_SYMBOLS FALSE)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if (EXPORT_ALL_SYMBOLS)
Packit Service fa4841
#	set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Packit Service fa4841
	add_definitions(-DFREERDP_TEST_EXPORTS -DBUILD_TESTING)
Packit Service fa4841
endif(EXPORT_ALL_SYMBOLS)
Packit Service fa4841
Packit Service fa4841
# BSD
Packit Service fa4841
if(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
Packit Service fa4841
	set(BSD TRUE)
Packit Service fa4841
	if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
Packit Service fa4841
		set(FREEBSD TRUE)
Packit Service fa4841
	endif()
Packit Service fa4841
	if(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD")
Packit Service fa4841
		set(KFREEBSD TRUE)
Packit Service fa4841
	endif()
Packit Service fa4841
	if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
Packit Service fa4841
		set(OPENBSD TRUE)
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
Packit Service fa4841
	set(BSD TRUE)
Packit Service fa4841
	set(FREEBSD TRUE)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(FREEBSD)
Packit Service fa4841
	find_path(EPOLLSHIM_INCLUDE_DIR NAMES sys/epoll.h sys/timerfd.h HINTS /usr/local/include/libepoll-shim)
Packit Service fa4841
	find_library(EPOLLSHIM_LIBS NAMES epoll-shim libepoll-shim HINTS /usr/local/lib)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Configure MSVC Runtime
Packit Service fa4841
if(MSVC)
Packit Service fa4841
	include(MSVCRuntime)
Packit Service fa4841
	if(NOT DEFINED MSVC_RUNTIME)
Packit Service fa4841
		set(MSVC_RUNTIME "dynamic")
Packit Service fa4841
	endif()
Packit Service fa4841
	if(MSVC_RUNTIME STREQUAL "static")
Packit Service fa4841
		if(BUILD_SHARED_LIBS)
Packit Service fa4841
			message(FATAL_ERROR "Static CRT is only supported in a fully static build")
Packit Service fa4841
		endif()
Packit Service fa4841
		message(STATUS "Use the MSVC static runtime option carefully!")
Packit Service fa4841
		message(STATUS "OpenSSL uses /MD by default, and is very picky")
Packit Service fa4841
		message(STATUS "Random freeing errors are a common sign of runtime issues")
Packit Service fa4841
	endif()
Packit Service fa4841
	configure_msvc_runtime()
Packit Service fa4841
Packit Service fa4841
	if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
Packit Service fa4841
		set(CMAKE_SUPPRESS_REGENERATION ON)
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
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
# Use Standard conforming getpwnam_r() on Solaris.
Packit Service fa4841
if("${CMAKE_SYSTEM_NAME}" MATCHES "SunOS")
Packit Service fa4841
	add_definitions("-D_POSIX_PTHREAD_SEMANTICS")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Compiler-specific flags
Packit Service fa4841
if(CMAKE_COMPILER_IS_GNUCC)
Packit Service fa4841
	if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
Packit Service fa4841
		CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
Packit Service fa4841
		if(IS_X86_64)
Packit Service fa4841
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
Packit Service fa4841
		else()
Packit Service fa4841
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
Packit Service fa4841
		endif()
Packit Service fa4841
	else()
Packit Service fa4841
		if(CMAKE_POSITION_INDEPENDENT_CODE)
Packit Service fa4841
			if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
Packit Service fa4841
				set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
Packit Service fa4841
			endif()
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
Packit Service fa4841
Packit Service fa4841
	CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
Packit Service fa4841
	if(Wno-unused-result)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
Packit Service fa4841
	endif()
Packit Service fa4841
	CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
Packit Service fa4841
	if(Wno-unused-but-set-variable)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
Packit Service fa4841
	endif()
Packit Service fa4841
	CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
Packit Service fa4841
	if(Wno-deprecated-declarations)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
Packit Service fa4841
	endif()
Packit Service fa4841
	CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
Packit Service fa4841
	if(Wno-deprecated-declarationsCXX)
Packit Service fa4841
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if(NOT EXPORT_ALL_SYMBOLS)
Packit Service fa4841
		message(STATUS "GCC default symbol visibility: hidden")
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
Packit Service fa4841
	endif()
Packit Service fa4841
	if(BUILD_TESTING)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
Packit Service fa4841
		if(Wno-format)
Packit Service fa4841
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
	CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration)
Packit Service fa4841
	if(Wimplicit-function-declaration)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if (NOT OPENBSD)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls)
Packit Service fa4841
		if(Wredundant-decls)
Packit Service fa4841
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
	if(CMAKE_BUILD_TYPE STREQUAL "Release")
Packit Service fa4841
		add_definitions(-DNDEBUG)
Packit Service fa4841
	else()
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
Packit Service fa4841
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# When building with Unix Makefiles and doing any release builds
Packit Service fa4841
# try to set __FILE__ to relative paths via a make specific macro
Packit Service fa4841
if (CMAKE_GENERATOR MATCHES "Unix Makefile*")
Packit Service fa4841
	if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
Packit Service fa4841
		string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
Packit Service fa4841
		if(Wno-builtin-macro-redefined)
Packit Service fa4841
			set(CMAKE_C_FLAGS_${UPPER_BUILD_TYPE} "${CMAKE_C_FLAGS_${UPPER_BUILD_TYPE}} -Wno-builtin-macro-redefined -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
Packit Service fa4841
		endif()
Packit Service fa4841
Packit Service fa4841
		CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
Packit Service fa4841
		if(Wno-builtin-macro-redefinedCXX)
Packit Service fa4841
			set(CMAKE_CXX_FLAGS_${UPPER_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${UPPER_BUILD_TYPE}} -Wno-builtin-macro-redefined -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument")
Packit Service fa4841
	CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
Packit Service fa4841
	if(Wno-deprecated-declarations)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
Packit Service fa4841
	endif()
Packit Service fa4841
	CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
Packit Service fa4841
	if(Wno-deprecated-declarationsCXX)
Packit Service fa4841
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service b1ea74
set(THREAD_PREFER_PTHREAD_FLAG TRUE)
Packit Service b1ea74
Packit Service b1ea74
if(NOT IOS)
Packit Service b1ea74
	find_package(Threads REQUIRED)
Packit Service b1ea74
endif()
Packit Service b1ea74
Packit Service b1ea74
if(NOT WIN32)
Packit Service b1ea74
	CHECK_SYMBOL_EXISTS(pthread_mutex_timedlock pthread.h HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service b1ea74
	if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service b1ea74
		CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service b1ea74
	endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
Packit Service b1ea74
	if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service b1ea74
		CHECK_LIBRARY_EXISTS(pthreads pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service b1ea74
	endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
Packit Service b1ea74
Packit Service b1ea74
	if (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service b1ea74
		set(HAVE_PTHREAD_MUTEX_TIMEDLOCK ON)
Packit Service b1ea74
	endif (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
Packit Service b1ea74
endif()
Packit Service b1ea74
Packit Service fa4841
# Enable address sanitizer, where supported and when required
Packit Service fa4841
if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC)
Packit Service bb5c11
	CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer)
Packit Service fa4841
Packit Service b1ea74
	if (fno-omit-frame-pointer)
Packit Service b1ea74
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
Packit Service b1ea74
	endif()
Packit Service b1ea74
Packit Service b1ea74
	set(CMAKE_REQUIRED_LINK_OPTIONS_SAVED ${CMAKE_REQUIRED_LINK_OPTIONS})
Packit Service fa4841
	file(WRITE ${CMAKE_BINARY_DIR}/foo.txt "")
Packit Service fa4841
	if(WITH_SANITIZE_ADDRESS)
Packit Service b1ea74
		list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=address")
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize=address" fsanitize-address)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-blacklist=${CMAKE_BINARY_DIR}/foo.txt" fsanitize-blacklist)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-address-use-after-scope" fsanitize-address-use-after-scope)
Packit Service fa4841
Packit Service b1ea74
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
Packit Service b1ea74
		set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
Packit Service b1ea74
		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
Packit Service fa4841
Packit Service b1ea74
		if(fsanitize-blacklist)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/scripts/blacklist-address-sanitizer.txt")
Packit Service b1ea74
		endif(fsanitize-blacklist)
Packit Service fa4841
Packit Service b1ea74
		if(fsanitize-address-use-after-scope)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-address-use-after-scope")
Packit Service b1ea74
		endif(fsanitize-address-use-after-scope)
Packit Service fa4841
	elseif(WITH_SANITIZE_MEMORY)
Packit Service b1ea74
		list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=memory")
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize=memory" fsanitize-memory)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-blacklist=${CMAKE_BINARY_DIR}/foo.txt" fsanitize-blacklist)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-memory-use-after-dtor" fsanitize-memory-use-after-dtor)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-memory-track-origins" fsanitize-memory-track-origins)
Packit Service fa4841
Packit Service b1ea74
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory")
Packit Service b1ea74
		set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=memory")
Packit Service b1ea74
		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory")
Packit Service fa4841
Packit Service b1ea74
		if(fsanitize-blacklist)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/scripts/blacklist-memory-sanitizer.txt")
Packit Service b1ea74
		endif(fsanitize-blacklist)
Packit Service fa4841
Packit Service b1ea74
		if (fsanitize-memory-use-after-dtor)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-use-after-dtor")
Packit Service b1ea74
		endif(fsanitize-memory-use-after-dtor)
Packit Service fa4841
Packit Service b1ea74
		if (fsanitize-memory-track-origins)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-track-origins")
Packit Service b1ea74
		endif(fsanitize-memory-track-origins)
Packit Service fa4841
	elseif(WITH_SANITIZE_THREAD)
Packit Service b1ea74
		list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=thread")
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize=thread" fsanitize-thread)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG ("-fsanitize-blacklist=${CMAKE_BINARY_DIR}/foo.txt" fsanitize-blacklist)
Packit Service b1ea74
Packit Service b1ea74
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
Packit Service b1ea74
		if(fsanitize-blacklist)
Packit Service b1ea74
			set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/scripts/blacklist-thread-sanitizer.txt")
Packit Service b1ea74
		endif(fsanitize-blacklist)
Packit Service b1ea74
		set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=thread")
Packit Service b1ea74
		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	file(REMOVE ${CMAKE_BINARY_DIR}/foo.txt)
Packit Service b1ea74
	set(CMAKE_REQUIRED_LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS_SAVED})
Packit Service fa4841
Packit Service fa4841
	if (WITH_NO_UNDEFINED)
Packit Service fa4841
		CHECK_C_COMPILER_FLAG (-Wl,--no-undefined no-undefined)
Packit Service fa4841
Packit Service fa4841
		if(no-undefined)
Packit Service b1ea74
			SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined" )
Packit Service fa4841
			SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(MSVC)
Packit Service fa4841
	# Remove previous warning definitions,
Packit Service fa4841
	# NMake is otherwise complaining.
Packit Service fa4841
	foreach (flags_var_to_scrub
Packit Service fa4841
		CMAKE_C_FLAGS
Packit Service fa4841
		CMAKE_CXX_FLAGS
Packit Service fa4841
		CMAKE_CXX_FLAGS_RELEASE
Packit Service fa4841
		CMAKE_CXX_FLAGS_RELWITHDEBINFO
Packit Service fa4841
		CMAKE_CXX_FLAGS_MINSIZEREL
Packit Service fa4841
		CMAKE_C_FLAGS_RELEASE
Packit Service fa4841
		CMAKE_C_FLAGS_RELWITHDEBINFO
Packit Service fa4841
		CMAKE_C_FLAGS_MINSIZEREL)
Packit Service fa4841
		string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " "
Packit Service fa4841
		"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
Packit Service fa4841
	endforeach()
Packit Service fa4841
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
Packit Service fa4841
Packit Service fa4841
	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
Packit Service fa4841
		add_definitions(-D_AMD64_)
Packit Service fa4841
	else()
Packit Service fa4841
		add_definitions(-D_X86_)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
Packit Service fa4841
	set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
Packit Service fa4841
Packit Service fa4841
	if(CMAKE_BUILD_TYPE STREQUAL "Release")
Packit Service fa4841
	else()
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
Packit Service fa4841
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WIN32)
Packit Service fa4841
	add_definitions(-DUNICODE -D_UNICODE)
Packit Service fa4841
	add_definitions(-D_CRT_SECURE_NO_WARNINGS)
Packit Service fa4841
	add_definitions(-DWIN32_LEAN_AND_MEAN)
Packit Service fa4841
	add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
Packit Service fa4841
Packit Service fa4841
	set(CMAKE_USE_RELATIVE_PATH ON)
Packit Service b1ea74
	if (${CMAKE_GENERATOR} MATCHES "NMake Makefile*" OR ${CMAKE_GENERATOR} MATCHES "Ninja*" OR ${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
Packit Service fa4841
		set(CMAKE_PDB_BINARY_DIR ${CMAKE_BINARY_DIR})
Packit Service fa4841
	elseif (${CMAKE_GENERATOR} MATCHES "Visual Studio*")
Packit Service fa4841
		set(CMAKE_PDB_BINARY_DIR "${CMAKE_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
Packit Service fa4841
	else()
Packit Service fa4841
		message(FATAL_ERROR "Unknown generator ${CMAKE_GENERATOR}")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	string(TIMESTAMP RC_VERSION_YEAR "%Y")
Packit Service fa4841
Packit Service fa4841
	if(NOT DEFINED CMAKE_WINDOWS_VERSION)
Packit Service b1ea74
		set(CMAKE_WINDOWS_VERSION "WIN7")
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
Packit Service fa4841
		add_definitions(-DWINVER=0x0501 -D_WIN32_WINNT=0x0501)
Packit Service fa4841
	elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
Packit Service fa4841
		add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601)
Packit Service fa4841
	elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
Packit Service fa4841
		add_definitions(-DWINVER=0x0602 -D_WIN32_WINNT=0x0602)
Packit Service fa4841
	elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN10")
Packit Service fa4841
		add_definitions(-DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service b1ea74
	# Set product and vendor for dll and exe version information.
Packit Service b1ea74
	set(RC_VERSION_VENDOR ${VENDOR})
Packit Service b1ea74
	set(RC_VERSION_PRODUCT ${PRODUCT})
Packit Service b1ea74
	set(RC_VERSION_PATCH ${BUILD_NUMBER})
Packit Service b1ea74
		set(RC_VERSION_DESCRIPTION "${FREERDP_VERSION_FULL} ${GIT_REVISION} ${CMAKE_WINDOWS_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
Packit Service b1ea74
Packit Service fa4841
	if (FREERDP_EXTERNAL_SSL_PATH)
Packit Service fa4841
		set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(IOS)
Packit Service fa4841
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
add_definitions(-DWINPR_EXPORTS -DFREERDP_EXPORTS)
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
	check_include_files(syslog.h HAVE_SYSLOG_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
# Mac OS X
Packit Service fa4841
if(APPLE)
Packit Service fa4841
	if(IOS)
Packit Service fa4841
		if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
Packit Service fa4841
			message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
Packit Service fa4841
		endif()
Packit Service fa4841
		set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
Packit Service fa4841
		set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
Packit Service fa4841
	else(IOS)
Packit Service fa4841
		if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
Packit Service fa4841
			set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
Packit Service fa4841
		endif()
Packit Service fa4841
	endif(IOS)
Packit Service fa4841
Packit Service fa4841
# Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
Packit Service fa4841
# Workaround: specify the parameter in the command-line
Packit Service fa4841
#	if(WITH_CLANG)
Packit Service fa4841
#		set(CMAKE_C_COMPILER "clang")
Packit Service fa4841
#	endif()
Packit Service fa4841
Packit Service fa4841
	if (WITH_VERBOSE)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
Packit Service fa4841
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
Packit Service fa4841
	endif()
Packit Service fa4841
endif(APPLE)
Packit Service fa4841
Packit Service fa4841
# OpenBSD
Packit Service fa4841
if(OPENBSD)
Packit Service fa4841
	set(WITH_MANPAGES "ON")
Packit Service fa4841
	set(WITH_ALSA "OFF")
Packit Service fa4841
	set(WITH_PULSE "OFF")
Packit Service fa4841
	set(WITH_OSS "ON")
Packit Service fa4841
	set(WITH_WAYLAND "OFF")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Android
Packit Service fa4841
if(ANDROID)
Packit Service fa4841
	set(WITH_LIBRARY_VERSIONING "OFF")
Packit Service fa4841
Packit Service fa4841
	set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS} )
Packit Service fa4841
Packit Service fa4841
	if (${ANDROID_ABI} STREQUAL "armeabi")
Packit Service fa4841
		set (WITH_NEON OFF)
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service fa4841
	if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
Packit Service fa4841
		add_definitions(-DNDK_DEBUG=1)
Packit Service fa4841
Packit Service fa4841
		# NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
Packit Service fa4841
		#       which is not supported by the gdbserver binary shipped with
Packit Service fa4841
		#       the android NDK (tested with r9b)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
Packit Service fa4841
	endif()
Packit Service fa4841
	set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
Packit Service fa4841
Packit Service fa4841
	if (NOT FREERDP_EXTERNAL_PATH)
Packit Service fa4841
		if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/")
Packit Service fa4841
			set (FREERDP_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/")
Packit Service fa4841
		else()
Packit Service fa4841
			message(STATUS "FREERDP_EXTERNAL_PATH not set!")
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
Packit Service b1ea74
	list (APPEND CMAKE_INCLUDE_PATH ${FREERDP_EXTERNAL_PATH}/${ANDROID_ABI}/include)
Packit Service fa4841
	list (APPEND CMAKE_LIBRARY_PATH ${FREERDP_EXTERNAL_PATH}/${ANDROID_ABI}/ )
Packit Service fa4841
	set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
Packit Service fa4841
	set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )
Packit Service fa4841
Packit Service fa4841
	if (WITH_GPROF)
Packit Service fa4841
		CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake
Packit Service fa4841
			${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
Packit Service fa4841
	endif(WITH_GPROF)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WITH_VALGRIND_MEMCHECK)
Packit Service fa4841
	check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
Packit Service fa4841
else()
Packit Service fa4841
	unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(UNIX OR CYGWIN)
Packit Service fa4841
	check_include_files(aio.h HAVE_AIO_H)
Packit Service fa4841
	check_include_files(sys/eventfd.h HAVE_SYS_EVENTFD_H)
Packit Service fa4841
	if (HAVE_SYS_EVENTFD_H)
Packit Service fa4841
		check_symbol_exists(eventfd_read sys/eventfd.h WITH_EVENTFD_READ_WRITE)
Packit Service fa4841
	endif()
Packit Service fa4841
	if (FREEBSD)
Packit Service fa4841
		list(APPEND CMAKE_REQUIRED_INCLUDES ${EPOLLSHIM_INCLUDE_DIR})
Packit Service fa4841
	endif()
Packit Service fa4841
	check_include_files(sys/timerfd.h HAVE_SYS_TIMERFD_H)
Packit Service fa4841
	if (FREEBSD)
Packit Service fa4841
		list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES ${EPOLLSHIM_INCLUDE_DIR})
Packit Service fa4841
	endif()
Packit Service fa4841
	check_include_files(poll.h HAVE_POLL_H)
Packit Service fa4841
	list(APPEND CMAKE_REQUIRED_LIBRARIES m)
Packit Service fa4841
	check_symbol_exists(ceill math.h HAVE_MATH_C99_LONG_DOUBLE)
Packit Service fa4841
	list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
Packit Service fa4841
	set(X11_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
	set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
Packit Service b1ea74
Packit Service b1ea74
	include(CheckFunctionExists)
Packit Service b1ea74
Packit Service b1ea74
	check_function_exists(getlogin_r HAVE_GETLOGIN_R)
Packit Service fa4841
else()
Packit Service fa4841
	set(X11_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(WAYLAND_FEATURE_TYPE "DISABLED")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WITH_PCSC_WINPR)
Packit Service fa4841
	find_package(PCSCWinPR)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
set(X11_FEATURE_PURPOSE "X11")
Packit Service fa4841
set(X11_FEATURE_DESCRIPTION "X11 client and server")
Packit Service fa4841
Packit Service fa4841
set(WAYLAND_FEATURE_PURPOSE "Wayland")
Packit Service fa4841
set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
Packit Service fa4841
Packit Service fa4841
set(ZLIB_FEATURE_TYPE "REQUIRED")
Packit Service fa4841
set(ZLIB_FEATURE_PURPOSE "compression")
Packit Service fa4841
set(ZLIB_FEATURE_DESCRIPTION "data compression")
Packit Service fa4841
Packit Service fa4841
set(OPENSSL_FEATURE_TYPE "REQUIRED")
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
set(OPENSLES_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(OPENSLES_FEATURE_PURPOSE "multimedia")
Packit Service fa4841
set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
Packit Service fa4841
Packit Service fa4841
set(OSS_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(OSS_FEATURE_PURPOSE "sound")
Packit Service fa4841
set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
Packit Service fa4841
Packit Service fa4841
set(ALSA_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(ALSA_FEATURE_PURPOSE "sound")
Packit Service fa4841
set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
Packit Service fa4841
Packit Service b1ea74
set(PULSE_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(PULSE_FEATURE_PURPOSE "sound")
Packit Service fa4841
set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
Packit Service fa4841
Packit Service b1ea74
set(CUPS_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(CUPS_FEATURE_PURPOSE "printing")
Packit Service fa4841
set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
Packit Service fa4841
Packit Service b1ea74
set(PCSC_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(PCSC_FEATURE_PURPOSE "smart card")
Packit Service fa4841
set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
Packit Service fa4841
Packit Service fa4841
set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
set(FFMPEG_FEATURE_PURPOSE "multimedia")
Packit Service fa4841
set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
Packit Service fa4841
Packit Service fa4841
set(VAAPI_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(VAAPI_FEATURE_PURPOSE "multimedia")
Packit Service fa4841
set(VAAPI_FEATURE_DESCRIPTION "VA-API hardware acceleration for video playback")
Packit Service fa4841
Packit Service fa4841
set(IPP_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(IPP_FEATURE_PURPOSE "performance")
Packit Service fa4841
set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
Packit Service fa4841
Packit Service fa4841
set(JPEG_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(JPEG_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
Packit Service fa4841
Packit Service fa4841
set(X264_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(X264_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(X264_FEATURE_DESCRIPTION "use x264 library")
Packit Service fa4841
Packit Service fa4841
set(OPENH264_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(OPENH264_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
Packit Service fa4841
Packit Service b1ea74
set(OPENCL_FEATURE_TYPE "OPTIONAL")
Packit Service b1ea74
set(OPENCL_FEATURE_PURPOSE "codec")
Packit Service b1ea74
set(OPENCL_FEATURE_DESCRIPTION "use OpenCL library")
Packit Service b1ea74
Packit Service fa4841
set(GSM_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(GSM_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
Packit Service fa4841
Packit Service fa4841
set(LAME_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(LAME_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(LAME_FEATURE_DESCRIPTION "lame MP3 audio codec library")
Packit Service fa4841
Packit Service fa4841
set(FAAD2_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(FAAD2_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(FAAD2_FEATURE_DESCRIPTION "FAAD2 AAC audio codec library")
Packit Service fa4841
Packit Service fa4841
set(FAAC_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(FAAC_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(FAAC_FEATURE_DESCRIPTION "FAAC AAC audio codec library")
Packit Service fa4841
Packit Service fa4841
set(SOXR_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(SOXR_FEATURE_PURPOSE "codec")
Packit Service fa4841
set(SOXR_FEATURE_DESCRIPTION "SOX audio resample library")
Packit Service fa4841
Packit Service fa4841
set(GSSAPI_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
set(GSSAPI_FEATURE_PURPOSE "auth")
Packit Service fa4841
set(GSSAPI_FEATURE_DESCRIPTION "add kerberos support")
Packit Service fa4841
Packit Service fa4841
if(WIN32)
Packit Service fa4841
	set(X11_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(WAYLAND_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(ZLIB_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(OSS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(ALSA_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(PULSE_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(CUPS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(PCSC_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(FFMPEG_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(VAAPI_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(OPENSLES_FEATURE_TYPE "DISABLED")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(APPLE)
Packit Service fa4841
	set(FFMPEG_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
	set(VAAPI_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(X11_FEATURE_TYPE "OPTIONAL")
Packit Service fa4841
	set(WAYLAND_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(OSS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(ALSA_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	if(IOS)
Packit Service fa4841
		set(X11_FEATURE_TYPE "DISABLED")
Packit Service fa4841
		set(PULSE_FEATURE_TYPE "DISABLED")
Packit Service fa4841
		set(CUPS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
		set(PCSC_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	endif()
Packit Service fa4841
	set(OPENSLES_FEATURE_TYPE "DISABLED")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(UNIX AND NOT ANDROID)
Packit Service fa4841
	set(WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE "RECOMMENDED")
Packit Service fa4841
	set(WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE "systemd journal appender")
Packit Service fa4841
	set(WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION "allows to export wLog to systemd journal")
Packit Service fa4841
Packit Service fa4841
	#include(Findlibsystemd)
Packit Service fa4841
	find_feature(libsystemd ${WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
	if(LIBSYSTEMD_FOUND)
Packit Service fa4841
		set(HAVE_JOURNALD_H TRUE)
Packit Service fa4841
	else()
Packit Service fa4841
		unset(HAVE_JOURNALD_H)
Packit Service fa4841
	endif()
Packit Service fa4841
endif(UNIX AND NOT ANDROID)
Packit Service fa4841
Packit Service fa4841
if(ANDROID)
Packit Service fa4841
	set(X11_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(WAYLAND_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(OSS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(ALSA_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(PULSE_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(CUPS_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(PCSC_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(FFMPEG_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(VAAPI_FEATURE_TYPE "DISABLED")
Packit Service fa4841
	set(OPENSLES_FEATURE_TYPE "REQUIRED")
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
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
find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(x264 ${X264_FEATURE_TYPE} ${X264_FEATURE_PURPOSE} ${X264_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
Packit Service b1ea74
find_feature(OpenCL ${OPENCL_FEATURE_TYPE} ${OPENCL_FEATURE_PURPOSE} ${OPENCL_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(LAME ${LAME_FEATURE_TYPE} ${LAME_FEATURE_PURPOSE} ${LAME_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(FAAD2 ${FAAD2_FEATURE_TYPE} ${FAAD2_FEATURE_PURPOSE} ${FAAD2_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(FAAC ${FAAC_FEATURE_TYPE} ${FAAC_FEATURE_PURPOSE} ${FAAC_FEATURE_DESCRIPTION})
Packit Service fa4841
find_feature(soxr ${SOXR_FEATURE_TYPE} ${SOXR_FEATURE_PURPOSE} ${SOXR_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service fa4841
find_feature(GSSAPI ${GSSAPI_FEATURE_TYPE} ${GSSAPI_FEATURE_PURPOSE} ${GSSAPI_FEATURE_DESCRIPTION})
Packit Service fa4841
Packit Service b1ea74
if (WITH_OPENH264 AND NOT WITH_OPENH264_LOADING)
Packit Service b1ea74
	option(WITH_OPENH264_LOADING "Use LoadLibrary to load openh264 at runtime" OFF)
Packit Service b1ea74
endif (WITH_OPENH264 AND NOT WITH_OPENH264_LOADING)
Packit Service b1ea74
Packit Service fa4841
if ((WITH_FFMPEG OR WITH_DSP_FFMPEG) AND NOT FFMPEG_FOUND)
Packit Service fa4841
	message(FATAL_ERROR "FFMPEG support requested but not detected")
Packit Service fa4841
endif()
Packit Service fa4841
set(WITH_FFMPEG ${FFMPEG_FOUND})
Packit Service fa4841
Packit Service fa4841
# Version check, if we have detected FFMPEG but the version is too old
Packit Service fa4841
# deactivate it as sound backend.
Packit Service fa4841
if (WITH_DSP_FFMPEG)
Packit Service fa4841
	# Deactivate FFmpeg backend for sound, if the version is too old.
Packit Service fa4841
	# See libfreerdp/codec/dsp_ffmpeg.h
Packit Service fa4841
	file(STRINGS "${AVCODEC_INCLUDE_DIR}/libavcodec/version.h" AV_VERSION_FILE REGEX "LIBAVCODEC_VERSION_M[A-Z]+[\t ]*[0-9]+")
Packit Service fa4841
	FOREACH(item ${AV_VERSION_FILE})
Packit Service fa4841
	  STRING(REGEX MATCH "LIBAVCODEC_VERSION_M[A-Z]+[\t ]*[0-9]+" litem ${item})
Packit Service fa4841
	IF(litem)
Packit Service fa4841
			string(REGEX REPLACE "[ \t]+" ";" VSPLIT_LINE ${litem})
Packit Service fa4841
			list(LENGTH VSPLIT_LINE VSPLIT_LINE_LEN)
Packit Service fa4841
			if (NOT "${VSPLIT_LINE_LEN}" EQUAL "2")
Packit Service fa4841
				message(ERROR "invalid entry in libavcodec version header ${item}")
Packit Service fa4841
			endif(NOT "${VSPLIT_LINE_LEN}" EQUAL "2")
Packit Service fa4841
			list(GET VSPLIT_LINE 0 VNAME)
Packit Service fa4841
			list(GET VSPLIT_LINE 1 VVALUE)
Packit Service fa4841
			set(${VNAME} ${VVALUE})
Packit Service fa4841
	ENDIF(litem)
Packit Service fa4841
	ENDFOREACH(item ${AV_VERSION_FILE})
Packit Service fa4841
Packit Service fa4841
	set(AVCODEC_VERSION "${LIBAVCODEC_VERSION_MAJOR}.${LIBAVCODEC_VERSION_MINOR}.${LIBAVCODEC_VERSION_MICRO}")
Packit Service fa4841
	if (AVCODEC_VERSION VERSION_LESS "57.48.101")
Packit Service fa4841
		message(WARNING "FFmpeg version detected (${AVCODEC_VERSION}) is too old. (Require at least 57.48.101 for sound). Deactivating")
Packit Service fa4841
		set(WITH_DSP_FFMPEG OFF)
Packit Service fa4841
	endif()
Packit Service fa4841
endif (WITH_DSP_FFMPEG)
Packit Service fa4841
Packit Service fa4841
if (WITH_OPENH264 AND NOT OPENH264_FOUND)
Packit Service fa4841
	message(FATAL_ERROR "OpenH264 support requested but not detected")
Packit Service fa4841
endif()
Packit Service fa4841
set(WITH_OPENH264 ${OPENH264_FOUND})
Packit Service fa4841
Packit Service fa4841
if ( (WITH_GSSAPI) AND (NOT GSS_FOUND))
Packit Service fa4841
	message(WARNING "-DWITH_GSSAPI=ON is set, but not GSSAPI implementation was found, disabling")
Packit Service fa4841
elseif(WITH_GSSAPI)
Packit Service fa4841
	if(GSS_FLAVOUR STREQUAL "MIT")
Packit Service fa4841
		add_definitions("-DWITH_GSSAPI -DWITH_GSSAPI_MIT")
Packit Service fa4841
		if(GSS_VERSION_1_13)
Packit Service fa4841
			add_definitions("-DHAVE_AT_LEAST_KRB_V1_13")
Packit Service fa4841
		endif()
Packit Service fa4841
		include_directories(${_GSS_INCLUDE_DIR})
Packit Service fa4841
	elseif(GSS_FLAVOUR STREQUAL "Heimdal")
Packit Service fa4841
		add_definitions("-DWITH_GSSAPI -DWITH_GSSAPI_HEIMDAL")
Packit Service fa4841
		include_directories(${_GSS_INCLUDE_DIR})
Packit Service fa4841
	else()
Packit Service fa4841
		message(WARNING "Kerberos version not detected")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(TARGET_ARCH MATCHES "x86|x64")
Packit Service fa4841
	if (NOT APPLE)
Packit Service fa4841
		# Intel Performance Primitives
Packit Service fa4841
		find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(OPENSSL_FOUND)
Packit Service fa4841
	add_definitions("-DWITH_OPENSSL")
Packit Service fa4841
	message(STATUS "Using OpenSSL Version: ${OPENSSL_VERSION}")
Packit Service b1ea74
	include_directories(${OPENSSL_INCLUDE_DIR})
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
if (WITH_X264 OR WITH_OPENH264 OR WITH_MEDIA_FOUNDATION OR WITH_FFMPEG)
Packit Service fa4841
	set(WITH_GFX_H264 ON)
Packit Service fa4841
else()
Packit Service fa4841
	set(WITH_GFX_H264 OFF)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Android expects all libraries to be loadable
Packit Service fa4841
# without paths.
Packit Service b1ea74
if (ANDROID OR WIN32 OR MAC_BUNDLE)
Packit Service b1ea74
  set(FREERDP_DATA_PATH "share")
Packit Service b1ea74
  if (NOT FREERDP_INSTALL_PREFIX)
Packit Service b1ea74
	  set(FREERDP_INSTALL_PREFIX ".")
Packit Service b1ea74
  endif()
Packit Service b1ea74
  set(FREERDP_LIBRARY_PATH ".")
Packit Service b1ea74
  set(FREERDP_PLUGIN_PATH ".")
Packit Service b1ea74
else()
Packit Service fa4841
	set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp${FREERDP_VERSION_MAJOR}")
Packit Service b1ea74
	if (NOT FREERDP_INSTALL_PREFIX)
Packit Service b1ea74
		set(FREERDP_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
Packit Service b1ea74
	endif()
Packit Service fa4841
	set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
Packit Service fa4841
	set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}")
Packit Service b1ea74
endif()
Packit Service b1ea74
set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
Packit Service fa4841
Packit Service fa4841
# Path to put extensions
Packit Service fa4841
set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}/extensions")
Packit Service fa4841
Packit Service b1ea74
# Proxy plugins path
Packit Service b1ea74
if(NOT DEFINED PROXY_PLUGINDIR)
Packit Service b1ea74
	message("using default plugins location")
Packit Service b1ea74
  	set(FREERDP_PROXY_PLUGINDIR "${CMAKE_BINARY_DIR}/server/proxy/plugins")
Packit Service b1ea74
else()
Packit Service b1ea74
	set(FREERDP_PROXY_PLUGINDIR "${PROXY_PLUGINDIR}")
Packit Service b1ea74
endif()
Packit Service b1ea74
Packit Service fa4841
# Include directories
Packit Service fa4841
include_directories(${CMAKE_CURRENT_BINARY_DIR})
Packit Service fa4841
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
Packit Service fa4841
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
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
# RPATH configuration
Packit Service fa4841
set(CMAKE_SKIP_BUILD_RPATH FALSE)
Packit Service fa4841
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
Packit Service fa4841
if (APPLE)
Packit Service fa4841
	set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
Packit Service fa4841
	set(CMAKE_INSTALL_RPATH "@loader_path/../Frameworks")
Packit Service fa4841
else (APPLE)
Packit Service fa4841
	set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
Packit Service fa4841
	if (NOT FREEBSD)
Packit Service fa4841
		set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
Packit Service fa4841
	endif()
Packit Service fa4841
endif(APPLE)
Packit Service fa4841
Packit Service fa4841
if (BUILD_SHARED_LIBS)
Packit Service fa4841
	set(CMAKE_MACOSX_RPATH ON)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Android profiling
Packit Service fa4841
if(ANDROID)
Packit Service fa4841
	if(WITH_GPROF)
Packit Service fa4841
		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
Packit Service fa4841
		set(PROFILER_LIBRARIES
Packit Service fa4841
			"${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
Packit Service fa4841
		include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Unit Tests
Packit Service fa4841
Packit Service fa4841
include(CTest)
Packit Service fa4841
Packit Service fa4841
if(BUILD_TESTING)
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
# WinPR
Packit Service fa4841
include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
Packit Service fa4841
include_directories("${CMAKE_BINARY_DIR}/winpr/include")
Packit Service fa4841
Packit Service fa4841
if (${CMAKE_VERSION} VERSION_LESS 2.8.12)
Packit Service fa4841
	set(PUBLIC_KEYWORD "")
Packit Service fa4841
	set(PRIVATE_KEYWORD "")
Packit Service fa4841
else()
Packit Service fa4841
	set(PUBLIC_KEYWORD "PUBLIC")
Packit Service fa4841
	set(PRIVATE_KEYWORD "PRIVATE")
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
add_subdirectory(winpr)
Packit Service fa4841
Packit Service fa4841
# Sub-directories
Packit Service fa4841
Packit Service fa4841
if(WITH_THIRD_PARTY)
Packit Service fa4841
	add_subdirectory(third-party)
Packit Service fa4841
	if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
Packit Service fa4841
		include_directories(${THIRD_PARTY_INCLUDES})
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
add_subdirectory(include)
Packit Service fa4841
Packit Service fa4841
add_subdirectory(libfreerdp)
Packit Service fa4841
Packit Service fa4841
if (IOS)
Packit Service b1ea74
	set(CMAKE_OSX_DEPLOYMENT_TARGET "10.0")
Packit Service fa4841
	if (IOS_PLATFORM MATCHES "SIMULATOR")
Packit Service fa4841
		set(CMAKE_OSX_SYSROOT "iphonesimulator")
Packit Service fa4841
	else()
Packit Service fa4841
		set(CMAKE_OSX_SYSROOT "iphoneos")
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# RdTk
Packit Service fa4841
include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
Packit Service fa4841
include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
Packit Service fa4841
Packit Service fa4841
add_subdirectory(rdtk)
Packit Service fa4841
Packit Service fa4841
if(WAYLAND_FOUND)
Packit Service fa4841
	add_subdirectory(uwac)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(BSD)
Packit Service fa4841
	if(IS_DIRECTORY /usr/local/include)
Packit Service fa4841
		include_directories(/usr/local/include)
Packit Service fa4841
		link_directories(/usr/local/lib)
Packit Service fa4841
	endif()
Packit Service fa4841
	if(OPENBSD)
Packit Service fa4841
		if(IS_DIRECTORY /usr/X11R6/include)
Packit Service fa4841
			include_directories(/usr/X11R6/include)
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WITH_CHANNELS)
Packit Service fa4841
	add_subdirectory(channels)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WITH_CLIENT_COMMON OR WITH_CLIENT)
Packit Service fa4841
add_subdirectory(client)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
if(WITH_SERVER)
Packit Service fa4841
	add_subdirectory(server)
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
# Packaging
Packit Service fa4841
Packit Service fa4841
set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
Packit Service fa4841
Packit Service fa4841
if(NOT (VENDOR MATCHES "FreeRDP"))
Packit Service fa4841
	if(DEFINED CLIENT_VENDOR_PATH)
Packit Service fa4841
		if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
Packit Service fa4841
			set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
Packit Service fa4841
		endif()
Packit Service fa4841
	endif()
Packit Service fa4841
endif()
Packit Service fa4841
Packit Service fa4841
#message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
Packit Service fa4841
Packit Service fa4841
include(${CMAKE_CPACK_INCLUDE_FILE})
Packit Service fa4841
Packit Service fa4841
set(FREERDP_BUILD_CONFIG_LIST "")
Packit Service fa4841
GET_CMAKE_PROPERTY(res VARIABLES)
Packit Service fa4841
FOREACH(var ${res})
Packit Service fa4841
	IF (var MATCHES "^WITH_*|^BUILD_TESTING|^BUILTIN_CHANNELS|^HAVE_*")
Packit Service fa4841
		LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}")
Packit Service fa4841
	ENDIF()
Packit Service fa4841
ENDFOREACH()
Packit Service fa4841
string(REPLACE ";" " " FREERDP_BUILD_CONFIG "${FREERDP_BUILD_CONFIG_LIST}")
Packit Service fa4841
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in ${CMAKE_CURRENT_BINARY_DIR}/buildflags.h)