Merge branch 'gateway-http-bugfix'
[platform/upstream/freerdp.git] / CMakeLists.txt
1 # FreeRDP: A Remote Desktop Protocol Implementation
2 # FreeRDP cmake build script
3 #
4 # Copyright 2011 O.S. Systems Software Ltda.
5 # Copyright 2011 Otavio Salvador <otavio@ossystems.com.br>
6 # Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
7 # Copyright 2012 HP Development Company, LLC
8 #
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #     http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20
21 cmake_minimum_required(VERSION 2.8)
22
23 project(FreeRDP C CXX)
24
25 if(NOT DEFINED VENDOR)
26         set(VENDOR "FreeRDP" CACHE STRING "FreeRDP package vendor")
27 endif()
28
29 if(NOT DEFINED PRODUCT)
30         set(PRODUCT "FreeRDP" CACHE STRING "FreeRDP package name")
31 endif()
32
33 if(NOT DEFINED FREERDP_VENDOR)
34         set(FREERDP_VENDOR 1)
35 endif()
36
37 set(CMAKE_COLOR_MAKEFILE ON)
38
39 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
40
41 # Include our extra modules
42 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)
43
44 if((CMAKE_SYSTEM_NAME MATCHES "WindowsStore") AND (CMAKE_SYSTEM_VERSION MATCHES "10.0"))
45         set(UWP 1)
46         add_definitions("-D_UWP")
47         set(CMAKE_WINDOWS_VERSION "WIN10")
48 endif()
49
50 # Check for cmake compatibility (enable/disable features)
51 include(CheckCmakeCompat)
52
53 # Include cmake modules
54 include(CheckIncludeFiles)
55 include(CheckLibraryExists)
56 include(CheckSymbolExists)
57 include(CheckStructHasMember)
58 include(FindPkgConfig)
59 include(TestBigEndian)
60
61 include(FindFeature)
62 include(AutoVersioning)
63 include(ConfigOptions)
64 include(ComplexLibrary)
65 include(FeatureSummary)
66 include(CheckCCompilerFlag)
67 include(CheckCXXCompilerFlag)
68 include(GNUInstallDirsWrapper)
69 include(CMakePackageConfigHelpers)
70
71 # Soname versioning
72 set(BUILD_NUMBER 0)
73 if ($ENV{BUILD_NUMBER})
74         set(BUILD_NUMBER $ENV{BUILD_NUMBER})
75 endif()
76 set(WITH_LIBRARY_VERSIONING "ON")
77 set(FREERDP_VERSION_MAJOR "2")
78 set(FREERDP_VERSION_MINOR "0")
79 set(FREERDP_VERSION_REVISION "0")
80 set(FREERDP_VERSION_SUFFIX "dev")
81 set(FREERDP_API_VERSION "${FREERDP_VERSION_MAJOR}")
82 set(FREERDP_VERSION "${FREERDP_VERSION_MAJOR}.${FREERDP_VERSION_MINOR}.${FREERDP_VERSION_REVISION}")
83 if (FREERDP_VERSION_SUFFIX)
84         set(FREERDP_VERSION_FULL "${FREERDP_VERSION}-${FREERDP_VERSION_SUFFIX}")
85 else()
86         set(FREERDP_VERSION_FULL "${FREERDP_VERSION}")
87 endif()
88 set(FREERDP_INCLUDE_DIR "include/freerdp${FREERDP_VERSION_MAJOR}/")
89
90 # Compatibility options
91 if(DEFINED STATIC_CHANNELS)
92         message(WARNING "STATIC_CHANNELS is obsolete, please use BUILTIN_CHANNELS instead")
93         set(BUILTIN_CHANNELS ${STATIC_CHANNELS} CACHE BOOL "" FORCE)
94 endif()
95
96 # Make paths absolute
97 if (CMAKE_INSTALL_PREFIX)
98         get_filename_component(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
99 endif()
100 if (FREERDP_EXTERNAL_PATH)
101         get_filename_component (FREERDP_EXTERNAL_PATH "${FREERDP_EXTERNAL_PATH}" ABSOLUTE)
102 endif()
103
104 # Allow to search the host machine for git
105 if(CMAKE_CROSSCOMPILING)
106         SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
107 endif(CMAKE_CROSSCOMPILING)
108
109 include(GetGitRevisionDescription)
110 git_get_exact_tag(GIT_REVISION --tags --always)
111
112 if (${GIT_REVISION} STREQUAL "n/a")
113         git_rev_parse (GIT_REVISION --short)
114 endif()
115 if(CMAKE_CROSSCOMPILING)
116         SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
117 endif(CMAKE_CROSSCOMPILING)
118
119 message(STATUS "Git Revision ${GIT_REVISION}")
120
121 # Turn on solution folders (2.8.4+)
122 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
123
124 # Default to release build type
125 if(NOT CMAKE_BUILD_TYPE)
126         set(CMAKE_BUILD_TYPE "Release")
127 endif()
128
129 if(NOT DEFINED BUILD_SHARED_LIBS)
130         if(IOS OR APPLE)
131                 set(BUILD_SHARED_LIBS OFF)
132         else()
133                 set(BUILD_SHARED_LIBS ON)
134         endif()
135 endif()
136
137 if(BUILD_TESTING)
138         set(EXPORT_ALL_SYMBOLS TRUE)
139 elseif(NOT DEFINED EXPORT_ALL_SYMBOLS)
140         set(EXPORT_ALL_SYMBOLS FALSE)
141 endif()
142
143 if (EXPORT_ALL_SYMBOLS)
144 #       set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
145         add_definitions(-DFREERDP_TEST_EXPORTS -DBUILD_TESTING)
146 endif(EXPORT_ALL_SYMBOLS)
147
148 # BSD
149 if(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
150         set(BSD TRUE)
151         if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
152                 set(FREEBSD TRUE)
153         endif()
154         if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
155                 set(OPENBSD TRUE)
156         endif()
157 endif()
158
159 # Configure MSVC Runtime
160 if(MSVC)
161         include(MSVCRuntime)
162         if(NOT DEFINED MSVC_RUNTIME)
163                 set(MSVC_RUNTIME "dynamic")
164         endif()
165         if(MSVC_RUNTIME STREQUAL "static")
166                 if(BUILD_SHARED_LIBS)
167                         message(FATAL_ERROR "Static CRT is only supported in a fully static build")
168                 endif()
169                 message(STATUS "Use the MSVC static runtime option carefully!")
170                 message(STATUS "OpenSSL uses /MD by default, and is very picky")
171                 message(STATUS "Random freeing errors are a common sign of runtime issues")
172         endif()
173         configure_msvc_runtime()
174
175         if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
176                 set(CMAKE_SUPPRESS_REGENERATION ON)
177         endif()
178 endif()
179
180 # Compiler-specific flags
181 if(CMAKE_COMPILER_IS_GNUCC)
182         if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
183                 CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
184                 if(IS_X86_64)
185                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
186                 else()
187                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
188                 endif()
189         else()
190                 if(CMAKE_POSITION_INDEPENDENT_CODE)
191                         if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
192                                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
193                         endif()
194                 endif()
195         endif()
196
197         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
198
199         CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
200         if(Wno-unused-result)
201                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
202         endif()
203         CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
204         if(Wno-unused-but-set-variable)
205                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
206         endif()
207         CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
208         if(Wno-deprecated-declarations)
209                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
210         endif()
211         CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
212         if(Wno-deprecated-declarationsCXX)
213                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
214         endif()
215
216         if(NOT EXPORT_ALL_SYMBOLS)
217                 message(STATUS "GCC default symbol visibility: hidden")
218                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
219         endif()
220         if(BUILD_TESTING)
221                 CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
222                 if(Wno-format)
223                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
224                 endif()
225         endif()
226         CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration)
227         if(Wimplicit-function-declaration)
228                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration")
229         endif()
230
231         if (NOT OPENBSD)
232                 CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls)
233                 if(Wredundant-decls)
234                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
235                 endif()
236         endif()
237         if(CMAKE_BUILD_TYPE STREQUAL "Release")
238                 add_definitions(-DNDEBUG)
239         else()
240                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
241                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
242         endif()
243         if(WITH_SSE2)
244                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
245         endif()
246 endif()
247
248 # When building with Unix Makefiles and doing any release builds
249 # try to set __FILE__ to relative paths via a make specific macro
250 if (CMAKE_GENERATOR MATCHES "Unix Makefile*")
251         if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
252                 string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE)
253                 CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
254                 if(Wno-builtin-macro-redefined)
255                         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 $<)))\"'")
256                 endif()
257
258                 CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
259                 if(Wno-builtin-macro-redefinedCXX)
260                         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 $<)))\"'")
261                 endif()
262         endif()
263 endif()
264
265 if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
266         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
267         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
268         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
269         if(WITH_SSE2)
270                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
271         endif()
272         CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
273         if(Wno-deprecated-declarations)
274                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
275         endif()
276         CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
277         if(Wno-deprecated-declarationsCXX)
278                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
279         endif()
280 endif()
281
282 # Enable address sanitizer, where supported and when required
283 if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC)
284         if(WITH_SANITIZE_ADDRESS)
285                 if (DEFINED CMAKE_REQUIRED_FLAGS)
286                         set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
287                 endif()
288                 set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
289                 CHECK_C_COMPILER_FLAG ("-fsanitize=address" fsanitize-address)
290                 if(fsanitize-address)
291                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
292                 endif()
293                 if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS)
294                         set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
295                 else()
296                         unset(CMAKE_REQUIRED_FLAGS)
297                 endif()
298
299                 CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer)
300                 if(fno-omit-frame-pointer)
301                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
302                 endif()
303         elseif(WITH_SANITIZE_LEAK)
304                 if (DEFINED CMAKE_REQUIRED_FLAGS)
305                         set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
306                 endif()
307                 set(CMAKE_REQUIRED_FLAGS "-fsanitize=leak")
308                 CHECK_C_COMPILER_FLAG ("-fsanitize=leak" fsanitize-leak)
309                 if(fsanitize-leak)
310                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak")
311                 endif()
312                 if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS)
313                         set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
314                 else()
315                         unset(CMAKE_REQUIRED_FLAGS)
316                 endif()
317
318                 CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer)
319                 if(fno-omit-frame-pointer)
320                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
321                 endif()
322         endif()
323
324         if (WITH_NO_UNDEFINED)
325                 if (DEFINED CMAKE_REQUIRED_FLAGS)
326                         set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
327                 endif()
328                 set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
329                 CHECK_C_COMPILER_FLAG (-Wl,--no-undefined no-undefined)
330                 if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS)
331                         set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
332                         unset(SAVE_CMAKE_REQUIRED_FLAGS)
333                 else()
334                         unset(CMAKE_REQUIRED_FLAGS)
335                 endif()
336                 if(no-undefined)
337                         SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
338                 endif()
339         endif()
340 endif()
341
342 if(MSVC)
343         # Remove previous warning definitions,
344         # NMake is otherwise complaining.
345         foreach (flags_var_to_scrub
346                 CMAKE_C_FLAGS
347                 CMAKE_CXX_FLAGS
348                 CMAKE_CXX_FLAGS_RELEASE
349                 CMAKE_CXX_FLAGS_RELWITHDEBINFO
350                 CMAKE_CXX_FLAGS_MINSIZEREL
351                 CMAKE_C_FLAGS_RELEASE
352                 CMAKE_C_FLAGS_RELWITHDEBINFO
353                 CMAKE_C_FLAGS_MINSIZEREL)
354                 string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " "
355                 "${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
356         endforeach()
357
358         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
359         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
360
361         if(CMAKE_SIZEOF_VOID_P EQUAL 8)
362                 add_definitions(-D_AMD64_)
363         else()
364                 add_definitions(-D_X86_)
365         endif()
366
367         set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
368         set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
369
370         if(CMAKE_BUILD_TYPE STREQUAL "Release")
371         else()
372                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
373                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
374         endif()
375
376 endif()
377
378 if(WIN32)
379         add_definitions(-DUNICODE -D_UNICODE)
380         add_definitions(-D_CRT_SECURE_NO_WARNINGS)
381         add_definitions(-DWIN32_LEAN_AND_MEAN)
382         add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
383
384         set(CMAKE_USE_RELATIVE_PATH ON)
385         if (${CMAKE_GENERATOR} MATCHES "NMake Makefile*")
386                 set(CMAKE_PDB_BINARY_DIR ${CMAKE_BINARY_DIR})
387         elseif (${CMAKE_GENERATOR} MATCHES "Visual Studio*")
388                 set(CMAKE_PDB_BINARY_DIR "${CMAKE_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
389         else()
390                 message(FATAL "Unknown generator ${CMAKE_GENERATOR}")
391         endif()
392
393         # Set product and vendor for dll and exe version information.
394         set(RC_VERSION_VENDOR ${VENDOR})
395         set(RC_VERSION_PRODUCT ${PRODUCT})
396         set(RC_VERSION_PATCH ${BUILD_NUMBER})
397         set(RC_VERSION_DESCRIPTION ${GIT_REVISION})
398
399         string(TIMESTAMP RC_VERSION_YEAR "%Y")
400
401         if(NOT DEFINED CMAKE_WINDOWS_VERSION)
402                 set(CMAKE_WINDOWS_VERSION "WINXP")
403         endif()
404
405         if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
406                 add_definitions(-DWINVER=0x0501 -D_WIN32_WINNT=0x0501)
407         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
408                 add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601)
409         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
410                 add_definitions(-DWINVER=0x0602 -D_WIN32_WINNT=0x0602)
411         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN10")
412                 add_definitions(-DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00)
413         endif()
414
415         if (FREERDP_EXTERNAL_SSL_PATH)
416                 set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
417         endif()
418 endif()
419
420 if(IOS)
421         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
422 endif()
423
424 add_definitions(-DWINPR_EXPORTS -DFREERDP_EXPORTS)
425
426 # Include files
427 if(NOT IOS)
428         check_include_files(fcntl.h HAVE_FCNTL_H)
429         check_include_files(unistd.h HAVE_UNISTD_H)
430         check_include_files(execinfo.h HAVE_EXECINFO_H)
431         check_include_files(inttypes.h HAVE_INTTYPES_H)
432         check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
433         check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
434         check_include_files(sys/sockio.h HAVE_SYS_SOCKIO_H)
435         check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
436         check_include_files(sys/select.h HAVE_SYS_SELECT_H)
437         check_include_files(syslog.h HAVE_SYSLOG_H)
438 else()
439         set(HAVE_FCNTL_H 1)
440         set(HAVE_UNISTD_H 1)
441         set(HAVE_INTTYPES_H 1)
442         set(HAVE_SYS_FILIO_H 1)
443 endif()
444
445 if(NOT IOS)
446         check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
447 else()
448         set(HAVE_TM_GMTOFF 1)
449 endif()
450
451 # Mac OS X
452 if(APPLE)
453         if(IOS)
454                 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
455                         message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
456                 endif()
457                 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
458                 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
459         else(IOS)
460                 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
461                         set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
462                 endif()
463
464                 if(IS_DIRECTORY /opt/local/include)
465                         include_directories(/opt/local/include)
466                         link_directories(/opt/local/lib)
467                 endif()
468         endif(IOS)
469
470 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
471 # Workaround: specify the parameter in the command-line
472 #       if(WITH_CLANG)
473 #               set(CMAKE_C_COMPILER "clang")
474 #       endif()
475
476         if (WITH_VERBOSE)
477                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
478                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
479         endif()
480 endif(APPLE)
481
482 # OpenBSD
483 if(OPENBSD)
484         set(WITH_MANPAGES "ON")
485         set(WITH_ALSA "OFF")
486         set(WITH_PULSE "OFF")
487         set(WITH_OSS "ON")
488         set(WITH_WAYLAND "OFF")
489 endif()
490
491 # Android
492 if(ANDROID)
493         set(WITH_LIBRARY_VERSIONING "OFF")
494
495         set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS} )
496
497         if (${ANDROID_ABI} STREQUAL "armeabi")
498                 set (WITH_NEON OFF)
499         endif()
500
501         if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
502                 add_definitions(-DNDK_DEBUG=1)
503
504                 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
505                 #       which is not supported by the gdbserver binary shipped with
506                 #       the android NDK (tested with r9b)
507                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
508         endif()
509         set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
510
511         if (NOT FREERDP_EXTERNAL_PATH)
512                 if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/")
513                         set (FREERDP_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/")
514                 else()
515                         message(STATUS "FREERDP_EXTERNAL_PATH not set!")
516                 endif()
517         endif()
518
519         list (APPEND CMAKE_INCLUDE_PATH ${FREERDP_EXTERNAL_PATH}/include)
520         list (APPEND CMAKE_LIBRARY_PATH ${FREERDP_EXTERNAL_PATH}/${ANDROID_ABI}/ )
521         set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
522         set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )
523
524         if (WITH_GPROF)
525                 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake
526                         ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
527         endif(WITH_GPROF)
528 endif()
529
530 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
531
532 if(NOT IOS)
533         find_package(Threads REQUIRED)
534 endif()
535
536 if(NOT WIN32)
537         CHECK_SYMBOL_EXISTS(pthread_mutex_timedlock pthread.h HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
538         if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
539                 CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
540         endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
541         if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
542                 CHECK_LIBRARY_EXISTS(pthreads pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
543         endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
544
545         if (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
546                 set(HAVE_PTHREAD_MUTEX_TIMEDLOCK ON)
547         endif (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
548 endif()
549
550 if(WITH_VALGRIND_MEMCHECK)
551         check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
552 else()
553         unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
554 endif()
555
556 if(UNIX OR CYGWIN)
557         check_include_files(sys/eventfd.h HAVE_AIO_H)
558         check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
559         if (HAVE_EVENTFD_H)
560                 check_symbol_exists(eventfd_read sys/eventfd.h WITH_EVENTFD_READ_WRITE)
561         endif()
562         check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
563         check_include_files(poll.h HAVE_POLL_H)
564         list(APPEND CMAKE_REQUIRED_LIBRARIES m)
565         check_symbol_exists(ceill math.h HAVE_MATH_C99_LONG_DOUBLE)
566         list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
567         set(X11_FEATURE_TYPE "RECOMMENDED")
568         set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
569 else()
570         set(X11_FEATURE_TYPE "DISABLED")
571         set(WAYLAND_FEATURE_TYPE "DISABLED")
572 endif()
573
574 if(WITH_PCSC_WINPR)
575         find_package(PCSCWinPR)
576 endif()
577
578 set(X11_FEATURE_PURPOSE "X11")
579 set(X11_FEATURE_DESCRIPTION "X11 client and server")
580
581 set(WAYLAND_FEATURE_PURPOSE "Wayland")
582 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
583
584 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
585 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
586 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
587
588 set(ZLIB_FEATURE_TYPE "REQUIRED")
589 set(ZLIB_FEATURE_PURPOSE "compression")
590 set(ZLIB_FEATURE_DESCRIPTION "data compression")
591
592 set(OPENSSL_FEATURE_TYPE "REQUIRED")
593 set(OPENSSL_FEATURE_PURPOSE "cryptography")
594 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
595
596 set(MBEDTLS_FEATURE_TYPE "OPTIONAL")
597 set(MBEDTLS_FEATURE_PURPOSE "cryptography")
598 set(MBEDTLS_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
599
600 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
601 set(OPENSLES_FEATURE_PURPOSE "multimedia")
602 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
603
604 set(OSS_FEATURE_TYPE "RECOMMENDED")
605 set(OSS_FEATURE_PURPOSE "sound")
606 set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
607
608 set(ALSA_FEATURE_TYPE "RECOMMENDED")
609 set(ALSA_FEATURE_PURPOSE "sound")
610 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
611
612 set(PULSE_FEATURE_TYPE "OPTIONAL")
613 set(PULSE_FEATURE_PURPOSE "sound")
614 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
615
616 set(CUPS_FEATURE_TYPE "OPTIONAL")
617 set(CUPS_FEATURE_PURPOSE "printing")
618 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
619
620 set(PCSC_FEATURE_TYPE "OPTIONAL")
621 set(PCSC_FEATURE_PURPOSE "smart card")
622 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
623
624 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
625 set(FFMPEG_FEATURE_PURPOSE "multimedia")
626 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
627
628 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
629 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
630 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
631
632 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
633 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
634 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
635
636 set(IPP_FEATURE_TYPE "OPTIONAL")
637 set(IPP_FEATURE_PURPOSE "performance")
638 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
639
640 set(JPEG_FEATURE_TYPE "OPTIONAL")
641 set(JPEG_FEATURE_PURPOSE "codec")
642 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
643
644 set(X264_FEATURE_TYPE "OPTIONAL")
645 set(X264_FEATURE_PURPOSE "codec")
646 set(X264_FEATURE_DESCRIPTION "use x264 library")
647
648 set(OPENH264_FEATURE_TYPE "OPTIONAL")
649 set(OPENH264_FEATURE_PURPOSE "codec")
650 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
651
652 set(GSM_FEATURE_TYPE "OPTIONAL")
653 set(GSM_FEATURE_PURPOSE "codec")
654 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
655
656 if(WIN32)
657         set(X11_FEATURE_TYPE "DISABLED")
658         set(WAYLAND_FEATURE_TYPE "DISABLED")
659         set(ZLIB_FEATURE_TYPE "DISABLED")
660         set(DIRECTFB_FEATURE_TYPE "DISABLED")
661         set(OSS_FEATURE_TYPE "DISABLED")
662         set(ALSA_FEATURE_TYPE "DISABLED")
663         set(PULSE_FEATURE_TYPE "DISABLED")
664         set(CUPS_FEATURE_TYPE "DISABLED")
665         set(PCSC_FEATURE_TYPE "DISABLED")
666         set(FFMPEG_FEATURE_TYPE "DISABLED")
667         set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
668         set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
669         set(OPENSLES_FEATURE_TYPE "DISABLED")
670 endif()
671
672 if(APPLE)
673         set(DIRECTFB_FEATURE_TYPE "DISABLED")
674         set(FFMPEG_FEATURE_TYPE "OPTIONAL")
675         set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
676         set(X11_FEATURE_TYPE "OPTIONAL")
677         set(WAYLAND_FEATURE_TYPE "DISABLED")
678         set(OSS_FEATURE_TYPE "DISABLED")
679         set(ALSA_FEATURE_TYPE "DISABLED")
680         if(IOS)
681                 set(X11_FEATURE_TYPE "DISABLED")
682                 set(PULSE_FEATURE_TYPE "DISABLED")
683                 set(CUPS_FEATURE_TYPE "DISABLED")
684                 set(PCSC_FEATURE_TYPE "DISABLED")
685                 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
686                 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
687         endif()
688         set(OPENSLES_FEATURE_TYPE "DISABLED")
689 endif()
690
691 if(UNIX AND NOT ANDROID)
692         set(WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE "RECOMMENDED")
693         set(WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE "systemd journal appender")
694         set(WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION "allows to export wLog to systemd journal")
695
696         #include(Findlibsystemd)
697         find_feature(libsystemd ${WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION})
698
699         if(LIBSYSTEMD_FOUND)
700                 set(HAVE_JOURNALD_H TRUE)
701         else()
702                 unset(HAVE_JOURNALD_H)
703         endif()
704 endif(UNIX AND NOT ANDROID)
705
706 if(ANDROID)
707         set(X11_FEATURE_TYPE "DISABLED")
708         set(WAYLAND_FEATURE_TYPE "DISABLED")
709         set(DIRECTFB_FEATURE_TYPE "DISABLED")
710         set(OSS_FEATURE_TYPE "DISABLED")
711         set(ALSA_FEATURE_TYPE "DISABLED")
712         set(PULSE_FEATURE_TYPE "DISABLED")
713         set(CUPS_FEATURE_TYPE "DISABLED")
714         set(PCSC_FEATURE_TYPE "DISABLED")
715         set(FFMPEG_FEATURE_TYPE "DISABLED")
716         set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
717         set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
718         set(OPENSLES_FEATURE_TYPE "REQUIRED")
719 endif()
720
721 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
722 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
723 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
724 if (${WITH_DIRECTFB})
725         message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
726 endif()
727
728 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
729 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
730 find_feature(MbedTLS ${MBEDTLS_FEATURE_TYPE} ${MBEDTLS_FEATURE_PURPOSE} ${MBEDTLS_FEATURE_DESCRIPTION})
731 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
732
733 find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
734 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
735 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
736
737 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
738 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
739
740 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
741
742 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
743 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
744
745 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
746 find_feature(x264 ${X264_FEATURE_TYPE} ${X264_FEATURE_PURPOSE} ${X264_FEATURE_DESCRIPTION})
747 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
748 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
749
750 if(TARGET_ARCH MATCHES "x86|x64")
751         if (NOT APPLE)
752                 # Intel Performance Primitives
753                 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
754         endif()
755 endif()
756
757 if(OPENSSL_FOUND)
758         add_definitions("-DWITH_OPENSSL")
759 endif()
760
761 if(MBEDTLS_FOUND)
762         add_definitions("-DWITH_MBEDTLS")
763 endif()
764
765 if (TARGET_ARCH MATCHES "sparc")
766         set(HAVE_ALIGNED_REQUIRED 1)
767 endif()
768
769 # Path to put FreeRDP data
770 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp${FREERDP_VERSION_MAJOR}")
771
772 # Path to put plugins
773
774 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
775
776 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}")
777 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
778
779 # Path to put extensions
780 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}/extensions")
781
782 # Include directories
783 include_directories(${CMAKE_CURRENT_BINARY_DIR})
784 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
785 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
786
787 # Configure files
788 add_definitions("-DHAVE_CONFIG_H")
789 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
790
791 # RPATH configuration
792 if(CMAKE_SKIP_RPATH)
793         set(CMAKE_SKIP_RPATH FALSE)
794         set(CMAKE_SKIP_INSTALL_RPATH TRUE)
795 endif()
796 set(CMAKE_SKIP_BUILD_RPATH FALSE)
797 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
798 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
799 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
800
801 # Android profiling
802 if(ANDROID)
803         if(WITH_GPROF)
804                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
805                 set(PROFILER_LIBRARIES
806                         "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
807                 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
808         endif()
809 endif()
810
811 # Unit Tests
812
813 include(CTest)
814
815 if(BUILD_TESTING)
816         enable_testing()
817
818         if(MSVC)
819                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
820         else()
821                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
822         endif()
823 endif()
824
825 # WinPR
826 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
827 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
828
829 if (${CMAKE_VERSION} VERSION_LESS 2.8.12)
830         set(PUBLIC_KEYWORD "")
831         set(PRIVATE_KEYWORD "")
832 else()
833         set(PUBLIC_KEYWORD "PUBLIC")
834         set(PRIVATE_KEYWORD "PRIVATE")
835 endif()
836
837 add_subdirectory(winpr)
838
839 # Sub-directories
840
841 if(WITH_THIRD_PARTY)
842         add_subdirectory(third-party)
843         if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
844                 include_directories(${THIRD_PARTY_INCLUDES})
845         endif()
846 endif()
847
848 add_subdirectory(include)
849
850 add_subdirectory(libfreerdp)
851
852 if (IOS)
853         set(CMAKE_OSX_DEPLOYMENT_TARGET "")
854         if (IOS_PLATFORM MATCHES "SIMULATOR")
855                 set(CMAKE_OSX_SYSROOT "iphonesimulator")
856         else()
857                 set(CMAKE_OSX_SYSROOT "iphoneos")
858         endif()
859 endif()
860
861 # RdTk
862 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
863 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
864
865 add_subdirectory(rdtk)
866
867 if(WAYLAND_FOUND)
868         add_subdirectory(uwac)
869 endif()
870
871 if(BSD)
872         if(IS_DIRECTORY /usr/local/include)
873                 include_directories(/usr/local/include)
874                 link_directories(/usr/local/lib)
875         endif()
876         if(OPENBSD)
877                 if(IS_DIRECTORY /usr/X11R6/include)
878                         include_directories(/usr/X11R6/include)
879                 endif()
880         endif()
881 endif()
882
883 if(WITH_CHANNELS)
884         add_subdirectory(channels)
885 endif()
886
887 if(WITH_CLIENT_COMMON OR WITH_CLIENT)
888 add_subdirectory(client)
889 endif()
890
891 if(WITH_SERVER)
892         add_subdirectory(server)
893 endif()
894
895 # Packaging
896
897 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
898
899 if(NOT (VENDOR MATCHES "FreeRDP"))
900         if(DEFINED CLIENT_VENDOR_PATH)
901                 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
902                         set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
903                 endif()
904         endif()
905 endif()
906
907 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
908
909 include(${CMAKE_CPACK_INCLUDE_FILE})
910
911 set(FREERDP_BUILD_CONFIG_LIST "")
912 GET_CMAKE_PROPERTY(res VARIABLES)
913 FOREACH(var ${res})
914         IF (var MATCHES "^WITH_*|^BUILD_TESTING|^BUILTIN_CHANNELS|^HAVE_*")
915                 LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}")
916         ENDIF()
917 ENDFOREACH()
918 string(REPLACE ";" " " FREERDP_BUILD_CONFIG "${FREERDP_BUILD_CONFIG_LIST}")
919 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in ${CMAKE_CURRENT_BINARY_DIR}/buildflags.h)