diff --git a/CMakeLists.txt b/CMakeLists.txt index 587eee858..498cee41c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -612,6 +612,10 @@ set(PCSC_FEATURE_TYPE "RECOMMENDED") set(PCSC_FEATURE_PURPOSE "smart card") set(PCSC_FEATURE_DESCRIPTION "smart card device redirection") +set(CJSON_FEATURE_TYPE "RECOMMENDED") +set(CJSON_FEATURE_PURPOSE "JSON") +set(CJSON_FEATURE_DESCRIPTION "Azure AD, RDS AAD authentication") + set(FFMPEG_FEATURE_TYPE "RECOMMENDED") set(FFMPEG_FEATURE_PURPOSE "multimedia") set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback") @@ -731,6 +735,8 @@ find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATUR find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION}) find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION}) +find_feature(CJSON ${CJSON_FEATURE_TYPE} ${CJSON_FEATURE_PURPOSE} ${CJSON_FEATURE_DESCRIPTION}) + if (WITH_DSP_FFMPEG OR WITH_VIDEO_FFMPEG OR WITH_FFMPEG) set(FFMPEG_FEATURE_TYPE "REQUIRED" ) endif() diff --git a/cmake/FindCJSON.cmake b/cmake/FindCJSON.cmake new file mode 100644 index 000000000..4a17bbea6 --- /dev/null +++ b/cmake/FindCJSON.cmake @@ -0,0 +1,19 @@ +# - Try to find CJSON +# Once done this will define +# CJSON_FOUND - cJSON was found +# CJSON_INCLUDE_DIRS - cJSON include directories +# CJSON_LIBRARIES - cJSON libraries for linking + +find_path(CJSON_INCLUDE_DIR + NAMES cjson/cJSON.h) + +find_library(CJSON_LIBRARY + NAMES cjson) + +if (CJSON_INCLUDE_DIR AND CJSON_LIBRARY) + set(CJSON_FOUND ON) + set(CJSON_INCLUDE_DIRS ${CJSON_INCLUDE_DIR}) + set(CJSON_LIBRARIES ${CJSON_LIBRARY}) +endif() + +mark_as_advanced(CJSON_INCLUDE_DIRS CJSON_LIBRARIES) diff --git a/include/config/config.h.in b/include/config/config.h.in index 19519abc9..1d3c81565 100644 --- a/include/config/config.h.in +++ b/include/config/config.h.in @@ -20,6 +20,7 @@ #cmakedefine WITH_CUPS #cmakedefine WITH_JPEG #cmakedefine WITH_WIN8 +#cmakedefine WITH_CJSON #cmakedefine WITH_CAIRO #cmakedefine WITH_SWSCALE #cmakedefine WITH_RDPSND_DSOUND diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index 2cb942764..8c3203074 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -82,39 +82,6 @@ macro (freerdp_definition_add) set (LIBFREERDP_DEFINITIONS ${LIBFREERDP_DEFINITIONS} PARENT_SCOPE) endmacro() -find_package(cJSON) - -# some very enthusiastic packagers forgot to package the cJSONConfig.cmake -# so try to find the paths manually -if (NOT CJSON_FOUND) - find_file(CJSON_INCLUDE_HEADER - NAMES cJSON.h - PATH_SUFFIXES cjson - ) - - # Extract the include base path from the header file path. - # first remove the filename, and then the last directory component as we expect - # somepath/cjson/cJSON.h (#include ) - get_filename_component(CJSON_INCLUDE_DIRS ${CJSON_INCLUDE_HEADER} DIRECTORY) - get_filename_component(CJSON_INCLUDE_DIRS ${CJSON_INCLUDE_DIRS} DIRECTORY) - - find_library(CJSON_LIBRARIES - NAMES cjson - ) - - if (CJSON_INCLUDE_DIRS AND CJSON_LIBRARIES) - set(CJSON_FOUND ON) - endif() -endif() - -if (CJSON_FOUND) - freerdp_definition_add(-DCJSON_FOUND) - freerdp_include_directory_add(${CJSON_INCLUDE_DIRS}) - freerdp_library_add(${CJSON_LIBRARIES}) -else() - message(WARNING "building without cJSON, AAD authentication disabled for this build") -endif() - if (WITH_SWSCALE) find_package(SWScale REQUIRED) endif(WITH_SWSCALE) @@ -252,6 +219,11 @@ if(FAAC_FOUND) include_directories(${FAAC_INCLUDE_DIRS}) endif() +if(WITH_CJSON) + freerdp_library_add(${CJSON_LIBRARIES}) + include_directories(${CJSON_INCLUDE_DIRS}) +endif() + if(WITH_NEON) check_symbol_exists("_M_AMD64" "" MSVC_ARM64) check_symbol_exists("__aarch64__" "" ARCH_ARM64) diff --git a/libfreerdp/core/aad.c b/libfreerdp/core/aad.c index 0990c9e3d..ea6661ee4 100644 --- a/libfreerdp/core/aad.c +++ b/libfreerdp/core/aad.c @@ -24,7 +24,7 @@ #include -#if defined(CJSON_FOUND) +#ifdef WITH_CJSON #include #endif @@ -39,7 +39,7 @@ #include "aad.h" -#if defined(CJSON_FOUND) +#ifdef WITH_CJSON #if CJSON_VERSION_MAJOR == 1 #if CJSON_VERSION_MINOR <= 7 #if CJSON_VERSION_PATCH < 13 @@ -62,7 +62,7 @@ struct rdp_aad wLog* log; }; -#if defined(CJSON_FOUND) +#ifdef WITH_CJSON #if OPENSSL_VERSION_NUMBER >= 0x30000000L #include #else @@ -1208,7 +1208,7 @@ AAD_STATE aad_get_state(rdpAad* aad) BOOL aad_is_supported(void) { -#if defined(CJSON_FOUND) +#ifdef WITH_CJSON return TRUE; #else return FALSE;