Skip to content

Commit

Permalink
[winpr,utils] split json detection to include
Browse files Browse the repository at this point in the history
  • Loading branch information
akallabeth committed May 16, 2024
1 parent 28bd901 commit acd137f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 46 deletions.
49 changes: 49 additions & 0 deletions cmake/JsonDetect.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
option(WITH_JSON_DISABLED "Build without any JSON support" OFF)
CMAKE_DEPENDENT_OPTION(WITH_CJSON_REQUIRED "Build with cJSON (fail if not found)" OFF "NOT WITH_JSON_DISABLED" OFF)
CMAKE_DEPENDENT_OPTION(WITH_JSONC_REQUIRED "Build with JSON-C (fail if not found)" OFF "NOT WITH_JSON_DISABLED" OFF)
if (NOT WITH_JSON_DISABLED)
find_package(cJSON)

# Fallback detection:
# older ubuntu releases did not ship CMake or pkg-config files
# for cJSON. Be optimistic and try pkg-config and as last resort
# try manual detection
if (NOT CJSON_FOUND)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(CJSON libcjson)
endif()

if (NOT CJSON_FOUND)
find_path(CJSON_INCLUDE_DIRS
NAMES cjson/cJSON.h
)
find_library(CJSON_LIBRARIES
NAMES cjson
)
if (NOT "${CJSON_LIBRARIES}" EQUAL "CJSON_LIBRARIES-NOTFOUND" AND NOT "${CJSON_INCLUDE_DIRS}" EQUAL "CJSON_INCLUDE_DIRS-NOTFOUND")
set(CJSON_FOUND ON)
endif()
endif()
endif()

if (WITH_CJSON_REQUIRED)
if (NOT CJSON_FOUND)
message(FATAL_ERROR "cJSON was requested but not found")
endif()
endif()

if (WITH_JSONC_REQUIRED)
find_package(JSONC REQUIRED)
else()
find_package(JSONC)
endif()

if (NOT JSONC_FOUND AND NOT CJSON_FOUND)
set(WITH_WINPR_JSON OFF CACHE INTERNAL "internal")
message("compiling without JSON support. Install cJSON or json-c to enable")
endif()
else()
set(WITH_WINPR_JSON OFF CACHE INTERNAL "internal")
message("forced compile without JSON support. Set -DWITH_JSON_DISABLED=OFF to enable compile time detection")
endif()
1 change: 1 addition & 0 deletions winpr/libwinpr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
# limitations under the License.

include(CheckFunctionExists)
include(JsonDetect)

set(WINPR_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(WINPR_SRCS "")
Expand Down
47 changes: 1 addition & 46 deletions winpr/libwinpr/utils/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -186,47 +186,8 @@ if (WINPR_HAVE_UNWIND_H)
endif()
endif()

option(WITH_JSON_DISABLED "Build without any JSON support" OFF)
CMAKE_DEPENDENT_OPTION(WITH_CJSON_REQUIRED "Build with cJSON (fail if not found)" OFF "NOT WITH_JSON_DISABLED" OFF)
CMAKE_DEPENDENT_OPTION(WITH_JSONC_REQUIRED "Build with JSON-C (fail if not found)" OFF "NOT WITH_JSON_DISABLED" OFF)
include(JsonDetect)
if (NOT WITH_JSON_DISABLED)
find_package(cJSON)

# Fallback detection:
# older ubuntu releases did not ship CMake or pkg-config files
# for cJSON. Be optimistic and try pkg-config and as last resort
# try manual detection
if (NOT CJSON_FOUND)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(CJSON libcjson)
endif()

if (NOT CJSON_FOUND)
find_path(CJSON_INCLUDE_DIRS
NAMES cjson/cJSON.h
)
find_library(CJSON_LIBRARIES
NAMES cjson
)
if (NOT "${CJSON_LIBRARIES}" EQUAL "CJSON_LIBRARIES-NOTFOUND" AND NOT "${CJSON_INCLUDE_DIRS}" EQUAL "CJSON_INCLUDE_DIRS-NOTFOUND")
set(CJSON_FOUND ON)
endif()
endif()
endif()

if (WITH_CJSON_REQUIRED)
if (NOT CJSON_FOUND)
message(FATAL_ERROR "cJSON was requested but not found")
endif()
endif()

if (WITH_JSONC_REQUIRED)
find_package(JSONC REQUIRED)
else()
find_package(JSONC)
endif()

if (JSONC_FOUND AND NOT WITH_CJSON_REQUIRED)
winpr_library_add_private(${JSONC_LIBRARIES})
winpr_include_directory_add(${JSONC_INCLUDE_DIRS})
Expand All @@ -237,13 +198,7 @@ if (NOT WITH_JSON_DISABLED)
winpr_include_directory_add(${CJSON_INCLUDE_DIRS})
winpr_definition_add(-DWITH_CJSON)
set(WITH_WINPR_JSON ON CACHE INTERNAL "internal")
else()
set(WITH_WINPR_JSON OFF CACHE INTERNAL "internal")
message("compiling without JSON support. Install cJSON or json-c to enable")
endif()
else()
set(WITH_WINPR_JSON OFF CACHE INTERNAL "internal")
message("forced compile without JSON support. Set -DWITH_JSON_DISABLED=OFF to enable compile time detection")
endif()

winpr_module_add(json/json.c)
Expand Down

0 comments on commit acd137f

Please sign in to comment.