diff --git a/cmake/FindJsonCPP.cmake b/cmake/FindJsonCPP.cmake index 59e971a58..18260fde8 100644 --- a/cmake/FindJsonCPP.cmake +++ b/cmake/FindJsonCPP.cmake @@ -39,10 +39,11 @@ # JsonCPP_FOUND - The jsoncpp library has been found # JsonCPP_TARGET - The name of the CMake target for the jsoncpp library +if(TARGET jsoncpp_lib OR TARGET jsoncpp_static OR TARGET PkgConfig::jsoncpp) -if(TARGET jsoncpp_lib OR TARGET jsoncpp_static) - - if(TARGET jsoncpp_lib) + if(TARGET PkgConfig::jsoncpp) + set(JsonCPP_TARGET PkgConfig::jsoncpp) + elseif(TARGET jsoncpp_lib) set(JsonCPP_TARGET jsoncpp_lib) else() set(JsonCPP_TARGET jsoncpp_static) @@ -57,24 +58,50 @@ if(TARGET jsoncpp_lib OR TARGET jsoncpp_static) mark_as_advanced(JsonCPP_TARGET) else() - - set(_OPTIONS "CONFIG") + find_package(PkgConfig QUIET) + + set(_OPTIONS1 "CONFIG") + set(_OPTIONS2 "IMPORTED_TARGET") # for pkg_check_modules fallback + if(JsonCPP_FIND_REQUIRED) - list(APPEND _OPTIONS "REQUIRED") - endif() - if(JsonCPP_FIND_QUIETLY) - list(APPEND _OPTIONS "QUIET") + if(PKG_CONFIG_FOUND) + list(APPEND _OPTIONS2 "REQUIRED") + else() + list(APPEND _OPTIONS1 "REQUIRED") + endif() endif() - if(JsonCPP_FIND_VERSION) - list(PREPEND _OPTIONS "${jsoncpp_FIND_VERSION}") + if(JsonCPP_FIND_QUIETLY) + list(APPEND _OPTIONS1 "QUIET") + list(APPEND _OPTIONS2 "QUIET") endif() - if(JsonCPP_FIND_EXACT) - list(APPEND _OPTIONS "EXACT") + if(PKG_CONFIG_FOUND) + if(JsonCPP_FIND_VERSION) + if(JsonCPP_FIND_EXACT) + list(APPEND _OPTIONS2 "jsoncpp=${JsonCPP_FIND_VERSION}") + else() + list(APPEND _OPTIONS2 "jsoncpp>=${JsonCPP_FIND_VERSION}") + endif() + else() + list(APPEND _OPTIONS2 "jsoncpp") + endif() + else() + if(JsonCPP_FIND_VERSION) + list(PREPEND _OPTIONS1 "${jsoncpp_FIND_VERSION}") + endif() + if(JsonCPP_FIND_EXACT) + list(APPEND _OPTIONS1 "EXACT") + endif() endif() - find_package(jsoncpp ${_OPTIONS}) + find_package(jsoncpp ${_OPTIONS1}) + + if(NOT JsonCPP_FOUND) + pkg_check_modules(jsoncpp ${_OPTIONS2}) + endif() - if(TARGET jsoncpp_lib) + if(TARGET PkgConfig::jsoncpp) + set(JsonCPP_TARGET jsoncpp) + elseif(TARGET jsoncpp_lib) set(JsonCPP_TARGET jsoncpp_lib) else() set(JsonCPP_TARGET jsoncpp_static)