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