Blame CMakeLists.txt

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