include(CMakeDependentOption)

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}" STREQUAL "CJSON_LIBRARIES-NOTFOUND" AND NOT "${CJSON_INCLUDE_DIRS}" STREQUAL "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()
