Merge pull request #4060 from akallabeth/icu_support
[platform/upstream/freerdp.git] / CMakeLists.txt
index 6b69d61..1b3b86f 100644 (file)
@@ -67,11 +67,12 @@ include(CheckCCompilerFlag)
 include(CheckCXXCompilerFlag)
 include(GNUInstallDirsWrapper)
 include(CMakePackageConfigHelpers)
+include(InstallFreeRDPMan)
 
 # Soname versioning
 set(BUILD_NUMBER 0)
 if ($ENV{BUILD_NUMBER})
-  set(BUILD_NUMBER $ENV{BUILD_NUMBER})
+       set(BUILD_NUMBER $ENV{BUILD_NUMBER})
 endif()
 set(WITH_LIBRARY_VERSIONING "ON")
 set(FREERDP_VERSION_MAJOR "2")
@@ -106,6 +107,12 @@ if(CMAKE_CROSSCOMPILING)
        SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
 endif(CMAKE_CROSSCOMPILING)
 
+find_program(CCACHE ccache)
+if(CCACHE AND WITH_CCACHE)
+       set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
+       set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
+endif(CCACHE AND WITH_CCACHE)
+
 include(GetGitRevisionDescription)
 git_get_exact_tag(GIT_REVISION --tags --always)
 
@@ -127,7 +134,7 @@ if(NOT CMAKE_BUILD_TYPE)
 endif()
 
 if(NOT DEFINED BUILD_SHARED_LIBS)
-       if(IOS OR APPLE)
+       if(IOS)
                set(BUILD_SHARED_LIBS OFF)
        else()
                set(BUILD_SHARED_LIBS ON)
@@ -135,14 +142,14 @@ if(NOT DEFINED BUILD_SHARED_LIBS)
 endif()
 
 if(BUILD_TESTING)
-    set(EXPORT_ALL_SYMBOLS TRUE)
+       set(EXPORT_ALL_SYMBOLS TRUE)
 elseif(NOT DEFINED EXPORT_ALL_SYMBOLS)
-    set(EXPORT_ALL_SYMBOLS FALSE)
+       set(EXPORT_ALL_SYMBOLS FALSE)
 endif()
 
 if (EXPORT_ALL_SYMBOLS)
-#    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
-    add_definitions(-DFREERDP_TEST_EXPORTS -DBUILD_TESTING)
+#      set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+       add_definitions(-DFREERDP_TEST_EXPORTS -DBUILD_TESTING)
 endif(EXPORT_ALL_SYMBOLS)
 
 # BSD
@@ -177,6 +184,16 @@ if(MSVC)
        endif()
 endif()
 
+# Enable 64bit file support on linux.
+if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
+       add_definitions("-D_FILE_OFFSET_BITS=64")
+endif()
+
+# Use Standard conforming getpwnam_r() on Solaris.
+if("${CMAKE_SYSTEM_NAME}" MATCHES "SunOS")
+       add_definitions("-D_POSIX_PTHREAD_SEMANTICS")
+endif()
+
 # Compiler-specific flags
 if(CMAKE_COMPILER_IS_GNUCC)
        if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
@@ -236,24 +253,29 @@ if(CMAKE_COMPILER_IS_GNUCC)
        endif()
        if(CMAKE_BUILD_TYPE STREQUAL "Release")
                add_definitions(-DNDEBUG)
+       else()
+               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
+               set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
+       endif()
+       if(WITH_SSE2)
+               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
+       endif()
+endif()
 
+# When building with Unix Makefiles and doing any release builds
+# try to set __FILE__ to relative paths via a make specific macro
+if (CMAKE_GENERATOR MATCHES "Unix Makefile*")
+       if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
+               string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE)
                CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
                if(Wno-builtin-macro-redefined)
-                       set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
-                       add_definitions("-D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
+                       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 $<)))\"'")
                endif()
 
                CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
                if(Wno-builtin-macro-redefinedCXX)
-                       set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
-                       add_definitions("-D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
+                       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 $<)))\"'")
                endif()
-       else()
-               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
-               set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
-       endif()
-       if(WITH_SSE2)
-               set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
        endif()
 endif()
 
@@ -261,6 +283,7 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
+       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument")
        if(WITH_SSE2)
                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
        endif()
@@ -487,7 +510,7 @@ endif()
 if(ANDROID)
        set(WITH_LIBRARY_VERSIONING "OFF")
 
-       set_property( GLOBAL PROPERTY  FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS} )
+       set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS} )
 
        if (${ANDROID_ABI} STREQUAL "armeabi")
                set (WITH_NEON OFF)
@@ -644,6 +667,10 @@ set(OPENH264_FEATURE_TYPE "OPTIONAL")
 set(OPENH264_FEATURE_PURPOSE "codec")
 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
 
+set(KRB5_FEATURE_TYPE "OPTIONAL")
+set(KRB5_FEATURE_PURPOSE "auth")
+set(KRB5_FEATURE_DESCRIPTION "add kerberos support")
+
 set(GSM_FEATURE_TYPE "OPTIONAL")
 set(GSM_FEATURE_PURPOSE "codec")
 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
@@ -741,6 +768,7 @@ find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DE
 find_feature(x264 ${X264_FEATURE_TYPE} ${X264_FEATURE_PURPOSE} ${X264_FEATURE_DESCRIPTION})
 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
+find_feature(KRB5 ${KRB5_FEATURE_TYPE} ${KRB5_FEATURE_PURPOSE} ${KRB5_FEATURE_DESCRIPTION})
 
 if(TARGET_ARCH MATCHES "x86|x64")
        if (NOT APPLE)
@@ -751,6 +779,7 @@ endif()
 
 if(OPENSSL_FOUND)
        add_definitions("-DWITH_OPENSSL")
+       message(STATUS "Using OpenSSL Version: ${OPENSSL_VERSION}")
 endif()
 
 if(MBEDTLS_FOUND)
@@ -761,15 +790,27 @@ if (TARGET_ARCH MATCHES "sparc")
        set(HAVE_ALIGNED_REQUIRED 1)
 endif()
 
-# Path to put FreeRDP data
-set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp${FREERDP_VERSION_MAJOR}")
-
-# Path to put plugins
-
-set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
-
-set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}")
-set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
+if (WITH_X264 OR WITH_OPENH264 OR WITH_MEDIA_FOUNDATION OR WITH_FFMPEG)
+       set(WITH_GFX_H264 ON)
+else()
+       set(WITH_GFX_H264 OFF)
+endif()
+
+# Android expects all libraries to be loadable
+# without paths.
+if (ANDROID)
+       set(FREERDP_DATA_PATH "share")
+       set(FREERDP_INSTALL_PREFIX ".")
+       set(FREERDP_LIBRARY_PATH ".")
+       set(FREERDP_PLUGIN_PATH ".")
+       set(FREERDP_ADDIN_PATH ".")
+else (ANDROID)
+       set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp${FREERDP_VERSION_MAJOR}")
+       set(FREERDP_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+       set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
+       set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}")
+       set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
+endif(ANDROID)
 
 # Path to put extensions
 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}/extensions")
@@ -793,6 +834,10 @@ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
 
+if (BUILD_SHARED_LIBS)
+       set(CMAKE_MACOSX_RPATH ON)
+endif()
+
 # Android profiling
 if(ANDROID)
        if(WITH_GPROF)
@@ -808,7 +853,7 @@ endif()
 include(CTest)
 
 if(BUILD_TESTING)
-        enable_testing()
+       enable_testing()
 
        if(MSVC)
                set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
@@ -860,7 +905,7 @@ include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
 add_subdirectory(rdtk)
 
 if(WAYLAND_FOUND)
-    add_subdirectory(uwac)
+       add_subdirectory(uwac)
 endif()
 
 if(BSD)
@@ -906,9 +951,9 @@ include(${CMAKE_CPACK_INCLUDE_FILE})
 set(FREERDP_BUILD_CONFIG_LIST "")
 GET_CMAKE_PROPERTY(res VARIABLES)
 FOREACH(var ${res})
- IF (var MATCHES "^WITH_*|^BUILD_TESTING|^BUILTIN_CHANNELS|^HAVE_*")
-       LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}")
- ENDIF()
      IF (var MATCHES "^WITH_*|^BUILD_TESTING|^BUILTIN_CHANNELS|^HAVE_*")
+               LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}")
      ENDIF()
 ENDFOREACH()
 string(REPLACE ";" " " FREERDP_BUILD_CONFIG "${FREERDP_BUILD_CONFIG_LIST}")
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in ${CMAKE_CURRENT_BINARY_DIR}/buildflags.h)