Merge pull request #3436 from akallabeth/openh264_1_6_support
[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 # BSD
144 if(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
145         set(BSD TRUE)
146         if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
147                 set(FREEBSD TRUE)
148         endif()
149         if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
150                 set(OPENBSD TRUE)
151         endif()
152 endif()
153
154 # Configure MSVC Runtime
155 if(MSVC)
156         include(MSVCRuntime)
157         if(NOT DEFINED MSVC_RUNTIME)
158                 set(MSVC_RUNTIME "dynamic")
159         endif()
160         if(MSVC_RUNTIME STREQUAL "static")
161                 if(BUILD_SHARED_LIBS)
162                         message(FATAL_ERROR "Static CRT is only supported in a fully static build")
163                 endif()
164                 message(STATUS "Use the MSVC static runtime option carefully!")
165                 message(STATUS "OpenSSL uses /MD by default, and is very picky")
166                 message(STATUS "Random freeing errors are a common sign of runtime issues")
167         endif()
168         configure_msvc_runtime()
169
170         if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
171                 set(CMAKE_SUPPRESS_REGENERATION ON)
172         endif()
173 endif()
174
175 # Compiler-specific flags
176 if(CMAKE_COMPILER_IS_GNUCC)
177         if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
178                 CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
179                 if(IS_X86_64)
180                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
181                 else()
182                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
183                 endif()
184         else()
185                 if(CMAKE_POSITION_INDEPENDENT_CODE)
186                         if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
187                                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
188                         endif()
189                 endif()
190         endif()
191
192         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
193
194         CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
195         if(Wno-unused-result)
196                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
197         endif()
198         CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
199         if(Wno-unused-but-set-variable)
200                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
201         endif()
202         CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
203         if(Wno-deprecated-declarations)
204                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
205         endif()
206         CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
207         if(Wno-deprecated-declarationsCXX)
208                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
209         endif()
210
211         if(NOT EXPORT_ALL_SYMBOLS)
212                 message(STATUS "GCC default symbol visibility: hidden")
213                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
214         endif()
215         if(BUILD_TESTING)
216                 CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
217                 if(Wno-format)
218                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
219                 endif()
220         endif()
221         CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration)
222         if(Wimplicit-function-declaration)
223                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration")
224         endif()
225
226         if (NOT OPENBSD)
227                 CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls)
228                 if(Wredundant-decls)
229                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
230                 endif()
231         endif()
232         if(CMAKE_BUILD_TYPE STREQUAL "Release")
233                 set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG")
234                 set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
235
236                 CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
237                 if(Wno-builtin-macro-redefined)
238                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
239                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
240                 endif()
241
242                 CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
243                 if(Wno-builtin-macro-redefinedCXX)
244                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
245                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
246                 endif()
247         else()
248                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
249                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
250         endif()
251         if(WITH_SSE2)
252                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
253         endif()
254 endif()
255
256 if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
257         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
258         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
259         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
260         if(WITH_SSE2)
261                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
262         endif()
263         CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
264         if(Wno-deprecated-declarations)
265                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
266         endif()
267         CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
268         if(Wno-deprecated-declarationsCXX)
269                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
270         endif()
271 endif()
272
273 # Enable address sanitizer, where supported and when required
274 if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC)
275         if(WITH_SANITIZE_ADDRESS)
276                 if (DEFINED CMAKE_REQUIRED_FLAGS)
277                         set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
278                 endif()
279                 set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
280                 CHECK_C_COMPILER_FLAG ("-fsanitize=address" fsanitize-address)
281                 if(fsanitize-address)
282                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
283                 endif()
284                 if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS)
285                         set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
286                 else()
287                         unset(CMAKE_REQUIRED_FLAGS)
288                 endif()
289
290                 CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer)
291                 if(fno-omit-frame-pointer)
292                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
293                 endif()
294         endif()
295         if (WITH_NO_UNDEFINED)
296                 if (DEFINED CMAKE_REQUIRED_FLAGS)
297                         set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
298                 endif()
299                 set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
300                 CHECK_C_COMPILER_FLAG (-Wl,--no-undefined no-undefined)
301                 if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS)
302                         set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
303                         unset(SAVE_CMAKE_REQUIRED_FLAGS)
304                 else()
305                         unset(CMAKE_REQUIRED_FLAGS)
306                 endif()
307                 if(no-undefined)
308                         SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
309                 endif()
310         endif()
311 endif()
312
313 if(MSVC)
314         # Remove previous warning definitions,
315         # NMake is otherwise complaining.
316         foreach (flags_var_to_scrub
317                 CMAKE_C_FLAGS
318                 CMAKE_CXX_FLAGS
319                 CMAKE_CXX_FLAGS_RELEASE
320                 CMAKE_CXX_FLAGS_RELWITHDEBINFO
321                 CMAKE_CXX_FLAGS_MINSIZEREL
322                 CMAKE_C_FLAGS_RELEASE
323                 CMAKE_C_FLAGS_RELWITHDEBINFO
324                 CMAKE_C_FLAGS_MINSIZEREL)
325                 string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " "
326                 "${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
327         endforeach()
328
329         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
330         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
331
332         if(CMAKE_SIZEOF_VOID_P EQUAL 8)
333                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_AMD64_")
334         else()
335                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_X86_")
336         endif()
337
338         set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
339         set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
340
341         if(CMAKE_BUILD_TYPE STREQUAL "Release")
342         else()
343                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
344                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
345         endif()
346
347 endif()
348
349 if(WIN32)
350         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUNICODE -D_UNICODE")
351         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
352         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN")
353         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WINSOCK_DEPRECATED_NO_WARNINGS")
354
355         set(CMAKE_USE_RELATIVE_PATH ON)
356         if (${CMAKE_GENERATOR} MATCHES "NMake Makefile*")
357                 set(CMAKE_PDB_BINARY_DIR ${CMAKE_BINARY_DIR})
358         elseif (${CMAKE_GENERATOR} MATCHES "Visual Studio*")
359                 set(CMAKE_PDB_BINARY_DIR "${CMAKE_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
360         else()
361                 message(FATAL "Unknown generator ${CMAKE_GENERATOR}")
362         endif()
363
364         # Set product and vendor for dll and exe version information.
365         set(RC_VERSION_VENDOR ${VENDOR})
366         set(RC_VERSION_PRODUCT ${PRODUCT})
367         set(RC_VERSION_PATCH ${BUILD_NUMBER})
368         set(RC_VERSION_DESCRIPTION ${GIT_REVISION})
369
370         string(TIMESTAMP RC_VERSION_YEAR "%Y")
371
372         if(NOT DEFINED CMAKE_WINDOWS_VERSION)
373                 set(CMAKE_WINDOWS_VERSION "WINXP")
374         endif()
375
376         if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
377                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0501 -D_WIN32_WINNT=0x0501")
378                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0501 -D_WIN32_WINNT=0x0501")
379         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
380                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0601 -D_WIN32_WINNT=0x0601")
381                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0601 -D_WIN32_WINNT=0x0601")
382         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
383                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0602 -D_WIN32_WINNT=0x0602")
384                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0602 -D_WIN32_WINNT=0x0602")
385         elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN10")
386                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00")
387                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00")
388         endif()
389
390         if (FREERDP_EXTERNAL_SSL_PATH)
391                 set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
392         endif()
393 endif()
394
395 if(IOS)
396         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
397 endif()
398
399 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
400 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
401
402 # Include files
403 if(NOT IOS)
404         check_include_files(fcntl.h HAVE_FCNTL_H)
405         check_include_files(unistd.h HAVE_UNISTD_H)
406         check_include_files(execinfo.h HAVE_EXECINFO_H)
407         check_include_files(inttypes.h HAVE_INTTYPES_H)
408         check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
409         check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
410         check_include_files(sys/sockio.h HAVE_SYS_SOCKIO_H)
411         check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
412         check_include_files(sys/select.h HAVE_SYS_SELECT_H)
413         check_include_files(syslog.h HAVE_SYSLOG_H)
414 else()
415         set(HAVE_FCNTL_H 1)
416         set(HAVE_UNISTD_H 1)
417         set(HAVE_INTTYPES_H 1)
418         set(HAVE_SYS_FILIO_H 1)
419 endif()
420
421 if(NOT IOS)
422         check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
423 else()
424         set(HAVE_TM_GMTOFF 1)
425 endif()
426
427 # Mac OS X
428 if(APPLE)
429         if(IOS)
430                 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
431                         message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
432                 endif()
433                 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
434                 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
435         else(IOS)
436                 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
437                         set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
438                 endif()
439
440                 if(IS_DIRECTORY /opt/local/include)
441                         include_directories(/opt/local/include)
442                         link_directories(/opt/local/lib)
443                 endif()
444         endif(IOS)
445
446 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
447 # Workaround: specify the parameter in the command-line
448 #       if(WITH_CLANG)
449 #               set(CMAKE_C_COMPILER "clang")
450 #       endif()
451
452         if (WITH_VERBOSE)
453                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
454                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
455         endif()
456 endif(APPLE)
457
458 # OpenBSD
459 if(OPENBSD)
460         set(WITH_MANPAGES "ON")
461         set(WITH_ALSA "OFF")
462         set(WITH_PULSE "OFF")
463         set(WITH_OSS "ON")
464         set(WITH_WAYLAND "OFF")
465 endif()
466
467 # Android
468 if(ANDROID)
469         set(WITH_LIBRARY_VERSIONING "OFF")
470
471         set_property( GLOBAL PROPERTY  FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS} )
472
473         if (${ANDROID_ABI} STREQUAL "armeabi")
474                 set (WITH_NEON OFF)
475         endif()
476
477         if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
478                 add_definitions(-DNDK_DEBUG=1)
479
480                 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
481                 #       which is not supported by the gdbserver binary shipped with
482                 #       the android NDK (tested with r9b)
483                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
484         endif()
485         set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
486
487         if (NOT FREERDP_EXTERNAL_PATH)
488                 if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/")
489                         set (FREERDP_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/")
490                 else()
491                         message(STATUS "FREERDP_EXTERNAL_PATH not set!")
492                 endif()
493         endif()
494
495         list (APPEND CMAKE_INCLUDE_PATH ${FREERDP_EXTERNAL_PATH}/include)
496         list (APPEND CMAKE_LIBRARY_PATH ${FREERDP_EXTERNAL_PATH}/${ANDROID_ABI}/ )
497         set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
498         set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )
499
500         if (WITH_GPROF)
501                 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake
502                         ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
503         endif(WITH_GPROF)
504 endif()
505
506 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
507
508 if(NOT IOS)
509         find_package(Threads REQUIRED)
510 endif()
511
512 if(NOT WIN32)
513         CHECK_SYMBOL_EXISTS(pthread_mutex_timedlock pthread.h HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
514         if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
515                 CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
516         endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL)
517         if (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
518                 CHECK_LIBRARY_EXISTS(pthreads pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
519         endif (NOT HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB)
520
521         if (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
522                 set(HAVE_PTHREAD_MUTEX_TIMEDLOCK ON)
523         endif (HAVE_PTHREAD_MUTEX_TIMEDLOCK_SYMBOL OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIB OR HAVE_PTHREAD_MUTEX_TIMEDLOCK_LIBS)
524 endif()
525
526 if(WITH_VALGRIND_MEMCHECK)
527         check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
528 else()
529         unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
530 endif()
531
532 if(UNIX OR CYGWIN)
533         check_include_files(sys/eventfd.h HAVE_AIO_H)
534         check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
535         if (HAVE_EVENTFD_H)
536                 check_symbol_exists(eventfd_read sys/eventfd.h WITH_EVENTFD_READ_WRITE)
537         endif()
538         check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
539         check_include_files(poll.h HAVE_POLL_H)
540         list(APPEND CMAKE_REQUIRED_LIBRARIES m)
541         check_symbol_exists(ceill math.h HAVE_MATH_C99_LONG_DOUBLE)
542         list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
543         set(X11_FEATURE_TYPE "RECOMMENDED")
544         set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
545 else()
546         set(X11_FEATURE_TYPE "DISABLED")
547         set(WAYLAND_FEATURE_TYPE "DISABLED")
548 endif()
549
550 if(WITH_PCSC_WINPR)
551         find_package(PCSCWinPR)
552 endif()
553
554 set(X11_FEATURE_PURPOSE "X11")
555 set(X11_FEATURE_DESCRIPTION "X11 client and server")
556
557 set(WAYLAND_FEATURE_PURPOSE "Wayland")
558 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
559
560 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
561 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
562 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
563
564 set(ZLIB_FEATURE_TYPE "REQUIRED")
565 set(ZLIB_FEATURE_PURPOSE "compression")
566 set(ZLIB_FEATURE_DESCRIPTION "data compression")
567
568 set(OPENSSL_FEATURE_TYPE "REQUIRED")
569 set(OPENSSL_FEATURE_PURPOSE "cryptography")
570 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
571
572 set(MBEDTLS_FEATURE_TYPE "OPTIONAL")
573 set(MBEDTLS_FEATURE_PURPOSE "cryptography")
574 set(MBEDTLS_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
575
576 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
577 set(OPENSLES_FEATURE_PURPOSE "multimedia")
578 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
579
580 set(OSS_FEATURE_TYPE "RECOMMENDED")
581 set(OSS_FEATURE_PURPOSE "sound")
582 set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
583
584 set(ALSA_FEATURE_TYPE "RECOMMENDED")
585 set(ALSA_FEATURE_PURPOSE "sound")
586 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
587
588 set(PULSE_FEATURE_TYPE "OPTIONAL")
589 set(PULSE_FEATURE_PURPOSE "sound")
590 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
591
592 set(CUPS_FEATURE_TYPE "OPTIONAL")
593 set(CUPS_FEATURE_PURPOSE "printing")
594 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
595
596 set(PCSC_FEATURE_TYPE "OPTIONAL")
597 set(PCSC_FEATURE_PURPOSE "smart card")
598 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
599
600 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
601 set(FFMPEG_FEATURE_PURPOSE "multimedia")
602 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
603
604 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
605 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
606 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
607
608 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
609 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
610 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
611
612 set(IPP_FEATURE_TYPE "OPTIONAL")
613 set(IPP_FEATURE_PURPOSE "performance")
614 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
615
616 set(JPEG_FEATURE_TYPE "OPTIONAL")
617 set(JPEG_FEATURE_PURPOSE "codec")
618 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
619
620 set(X264_FEATURE_TYPE "OPTIONAL")
621 set(X264_FEATURE_PURPOSE "codec")
622 set(X264_FEATURE_DESCRIPTION "use x264 library")
623
624 set(OPENH264_FEATURE_TYPE "OPTIONAL")
625 set(OPENH264_FEATURE_PURPOSE "codec")
626 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
627
628 set(GSM_FEATURE_TYPE "OPTIONAL")
629 set(GSM_FEATURE_PURPOSE "codec")
630 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
631
632 if(WIN32)
633         set(X11_FEATURE_TYPE "DISABLED")
634         set(WAYLAND_FEATURE_TYPE "DISABLED")
635         set(ZLIB_FEATURE_TYPE "DISABLED")
636         set(DIRECTFB_FEATURE_TYPE "DISABLED")
637         set(OSS_FEATURE_TYPE "DISABLED")
638         set(ALSA_FEATURE_TYPE "DISABLED")
639         set(PULSE_FEATURE_TYPE "DISABLED")
640         set(CUPS_FEATURE_TYPE "DISABLED")
641         set(PCSC_FEATURE_TYPE "DISABLED")
642         set(FFMPEG_FEATURE_TYPE "DISABLED")
643         set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
644         set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
645         set(OPENSLES_FEATURE_TYPE "DISABLED")
646 endif()
647
648 if(APPLE)
649         set(DIRECTFB_FEATURE_TYPE "DISABLED")
650         set(FFMPEG_FEATURE_TYPE "OPTIONAL")
651         set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
652         set(X11_FEATURE_TYPE "OPTIONAL")
653         set(WAYLAND_FEATURE_TYPE "DISABLED")
654         set(OSS_FEATURE_TYPE "DISABLED")
655         set(ALSA_FEATURE_TYPE "DISABLED")
656         if(IOS)
657                 set(X11_FEATURE_TYPE "DISABLED")
658                 set(PULSE_FEATURE_TYPE "DISABLED")
659                 set(CUPS_FEATURE_TYPE "DISABLED")
660                 set(PCSC_FEATURE_TYPE "DISABLED")
661                 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
662                 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
663         endif()
664         set(OPENSLES_FEATURE_TYPE "DISABLED")
665 endif()
666
667 if(UNIX AND NOT ANDROID)
668         set(WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE "RECOMMENDED")
669         set(WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE "systemd journal appender")
670         set(WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION "allows to export wLog to systemd journal")
671
672         #include(Findlibsystemd)
673         find_feature(libsystemd ${WLOG_SYSTEMD_JOURNAL_FEATURE_TYPE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_PURPOSE} ${WLOG_SYSTEMD_JOURNAL_FEATURE_DESCRIPTION})
674
675         if(LIBSYSTEMD_FOUND)
676                 set(HAVE_JOURNALD_H TRUE)
677         else()
678                 unset(HAVE_JOURNALD_H)
679         endif()
680 endif(UNIX AND NOT ANDROID)
681
682 if(ANDROID)
683         set(X11_FEATURE_TYPE "DISABLED")
684         set(WAYLAND_FEATURE_TYPE "DISABLED")
685         set(DIRECTFB_FEATURE_TYPE "DISABLED")
686         set(OSS_FEATURE_TYPE "DISABLED")
687         set(ALSA_FEATURE_TYPE "DISABLED")
688         set(PULSE_FEATURE_TYPE "DISABLED")
689         set(CUPS_FEATURE_TYPE "DISABLED")
690         set(PCSC_FEATURE_TYPE "DISABLED")
691         set(FFMPEG_FEATURE_TYPE "DISABLED")
692         set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
693         set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
694         set(OPENSLES_FEATURE_TYPE "REQUIRED")
695 endif()
696
697 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
698 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
699 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
700 if (${WITH_DIRECTFB})
701         message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
702 endif()
703
704 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
705 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
706 find_feature(MbedTLS ${MBEDTLS_FEATURE_TYPE} ${MBEDTLS_FEATURE_PURPOSE} ${MBEDTLS_FEATURE_DESCRIPTION})
707 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
708
709 find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
710 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
711 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
712
713 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
714 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
715
716 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
717
718 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
719 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
720
721 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
722 find_feature(x264 ${X264_FEATURE_TYPE} ${X264_FEATURE_PURPOSE} ${X264_FEATURE_DESCRIPTION})
723 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
724 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
725
726 if(TARGET_ARCH MATCHES "x86|x64")
727         if (NOT APPLE)
728                 # Intel Performance Primitives
729                 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
730         endif()
731 endif()
732
733 if(OPENSSL_FOUND)
734         add_definitions("-DWITH_OPENSSL")
735 endif()
736
737 if(MBEDTLS_FOUND)
738         add_definitions("-DWITH_MBEDTLS")
739 endif()
740
741 if (TARGET_ARCH MATCHES "sparc")
742         set(HAVE_ALIGNED_REQUIRED 1)
743 endif()
744
745 # Path to put FreeRDP data
746 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp${FREERDP_VERSION_MAJOR}")
747
748 # Path to put plugins
749
750 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
751
752 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}")
753 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
754
755 # Path to put extensions
756 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}/extensions")
757
758 # Include directories
759 include_directories(${CMAKE_CURRENT_BINARY_DIR})
760 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
761 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
762
763 # Configure files
764 add_definitions("-DHAVE_CONFIG_H")
765 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
766
767 # RPATH configuration
768 if(CMAKE_SKIP_RPATH)
769         set(CMAKE_SKIP_RPATH FALSE)
770         set(CMAKE_SKIP_INSTALL_RPATH TRUE)
771 endif()
772 set(CMAKE_SKIP_BUILD_RPATH FALSE)
773 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
774 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
775 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
776
777 # Android profiling
778 if(ANDROID)
779         if(WITH_GPROF)
780                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
781                 set(PROFILER_LIBRARIES
782                         "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
783                 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
784         endif()
785 endif()
786
787 # Unit Tests
788
789 include(CTest)
790
791 if(BUILD_TESTING)
792         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
793
794         enable_testing()
795
796         if(MSVC)
797                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
798         else()
799                 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
800         endif()
801 endif()
802
803 # WinPR
804 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
805 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
806
807 if (${CMAKE_VERSION} VERSION_LESS 2.8.12)
808         set(PUBLIC_KEYWORD "")
809         set(PRIVATE_KEYWORD "")
810 else()
811         set(PUBLIC_KEYWORD "PUBLIC")
812         set(PRIVATE_KEYWORD "PRIVATE")
813 endif()
814
815 add_subdirectory(winpr)
816
817 # Sub-directories
818
819 if(WITH_THIRD_PARTY)
820         add_subdirectory(third-party)
821         if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
822                 include_directories(${THIRD_PARTY_INCLUDES})
823         endif()
824 endif()
825
826 add_subdirectory(include)
827
828 add_subdirectory(libfreerdp)
829
830 if (IOS)
831         set(CMAKE_OSX_DEPLOYMENT_TARGET "")
832         if (IOS_PLATFORM MATCHES "SIMULATOR")
833                 set(CMAKE_OSX_SYSROOT "iphonesimulator")
834         else()
835                 set(CMAKE_OSX_SYSROOT "iphoneos")
836         endif()
837 endif()
838
839 # RdTk
840 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
841 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
842
843 add_subdirectory(rdtk)
844
845 if(WAYLAND_FOUND)
846     add_subdirectory(uwac)
847 endif()
848
849 if(BSD)
850         if(IS_DIRECTORY /usr/local/include)
851                 include_directories(/usr/local/include)
852                 link_directories(/usr/local/lib)
853         endif()
854         if(OPENBSD)
855                 if(IS_DIRECTORY /usr/X11R6/include)
856                         include_directories(/usr/X11R6/include)
857                 endif()
858         endif()
859 endif()
860
861 if(WITH_CHANNELS)
862         add_subdirectory(channels)
863 endif()
864
865 if(WITH_CLIENT_COMMON OR WITH_CLIENT)
866 add_subdirectory(client)
867 endif()
868
869 if(WITH_SERVER)
870         add_subdirectory(server)
871 endif()
872
873 # Packaging
874
875 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
876
877 if(NOT (VENDOR MATCHES "FreeRDP"))
878         if(DEFINED CLIENT_VENDOR_PATH)
879                 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
880                         set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
881                 endif()
882         endif()
883 endif()
884
885 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
886
887 include(${CMAKE_CPACK_INCLUDE_FILE})
888
889 set(FREERDP_BUILD_CONFIG_LIST "")
890 GET_CMAKE_PROPERTY(res VARIABLES)
891 FOREACH(var ${res})
892  IF (var MATCHES "^WITH_*|^BUILD_TESTING|^BUILTIN_CHANNELS|^HAVE_*")
893         LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}")
894  ENDIF()
895 ENDFOREACH()
896 string(REPLACE ";" " " FREERDP_BUILD_CONFIG "${FREERDP_BUILD_CONFIG_LIST}")
897 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in ${CMAKE_CURRENT_BINARY_DIR}/buildflags.h)