# Find json-rcp-cpp 
#
# Find the json-rpc-cpp includes and library
# 
# if you nee to add a custom library search path, do it via via CMAKE_PREFIX_PATH 
# 
# This module defines
#  JSON_RCP_CPP_INCLUDE_DIRS, where to find header, etc.
#  JSON_RCP_CPP_LIBRARIES, the libraries needed to use json-rpc-cpp.
#  JSON_RPC_CPP_SERVER_LIBRARIES, the libraries needed to use json-rpc-cpp-server
#  JSON_RPC_CPP_CLIENT_LIBRARIES, the libraries needed to use json-rpc-cpp-client
#  JSON_RCP_CPP_FOUND, If false, do not try to use json-rpc-cpp.
#  JSON_RPC_CPP_VERSION, version of library
#  JSON_RPC_CPP_VERSION_MAJOR
#  JSON_RPC_CPP_VERSION_MINOR
#  JSON_RPC_CPP_VERSION_PATCH


# only look in default directories
find_path(
	JSON_RPC_CPP_INCLUDE_DIR 
	NAMES jsonrpccpp/server.h jsonrpc/server.h
	PATH_SUFFIXES jsonrpc
	DOC "json-rpc-cpp include dir"
)

find_library(
	JSON_RPC_CPP_COMMON_LIBRARY
	NAMES jsonrpccpp-common
	DOC "json-rpc-cpp common library"
)

find_library(
	JSON_RPC_CPP_SERVER_LIBRARY
	NAMES jsonrpccpp-server
	DOC "json-rpc-cpp server library"
)

find_library(
	JSON_RPC_CPP_CLIENT_LIBRARY
	NAMES jsonrpccpp-client
	DOC "json-rpc-cpp client library"
)

# these are the variables to be uses by the calling script
set (JSON_RPC_CPP_INCLUDE_DIRS ${JSON_RPC_CPP_INCLUDE_DIR})
set (JSON_RPC_CPP_LIBRARIES ${JSON_RPC_CPP_COMMON_LIBRARY} ${JSON_RPC_CPP_SERVER_LIBRARY} ${JSON_RPC_CPP_CLIENT_LIBRARY})
set (JSON_RPC_CPP_SERVER_LIBRARIES ${JSON_RPC_CPP_COMMON_LIBRARY} ${JSON_RPC_CPP_SERVER_LIBRARY})
set (JSON_RPC_CPP_CLIENT_LIBRARIES ${JSON_RPC_CPP_COMMON_LIBRARY} ${JSON_RPC_CPP_CLIENT_LIBRARY})

# debug library on windows
# same naming convention as in qt (appending debug library with d)
# boost is using the same "hack" as us with "optimized" and "debug"
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")

	find_library(
		JSON_RPC_CPP_COMMON_LIBRARY_DEBUG
		NAMES jsonrpccpp-commond
		DOC "json-rpc-cpp common debug library"
	)
	
	find_library(
		JSON_RPC_CPP_SERVER_LIBRARY_DEBUG
		NAMES jsonrpccpp-serverd
		DOC "json-rpc-cpp server debug library"
	)

	find_library(
		JSON_RPC_CPP_CLIENT_LIBRARY_DEBUG
		NAMES jsonrpccpp-clientd
		DOC "json-rpc-cpp client debug library"
	)

	set (JSON_RPC_CPP_LIBRARIES
		optimized ${JSON_RPC_CPP_COMMON_LIBRARY}
		optimized ${JSON_RPC_CPP_SERVER_LIBRARY}
		optimized ${JSON_RPC_CPP_CLIENT_LIBRARY}
		debug ${JSON_RPC_CPP_COMMON_LIBRARY_DEBUG}
		debug ${JSON_RPC_CPP_SERVER_LIBRARY_DEBUG}
		debug ${JSON_RPC_CPP_CLIENT_LIBRARY_DEBUG}
	)
	
	set (JSON_RPC_CPP_SERVER_LIBRARIES
		optimized ${JSON_RPC_CPP_COMMON_LIBRARY}
		optimized ${JSON_RPC_CPP_SERVER_LIBRARY}
		debug ${JSON_RPC_CPP_COMMON_LIBRARY_DEBUG}
		debug ${JSON_RPC_CPP_SERVER_LIBRARY_DEBUG}
	)

	set (JSON_RPC_CPP_CLIENT_LIBRARIES
		optimized ${JSON_RPC_CPP_COMMON_LIBRARY}
		optimized ${JSON_RPC_CPP_CLIENT_LIBRARY}
		debug ${JSON_RPC_CPP_COMMON_LIBRARY_DEBUG}
		debug ${JSON_RPC_CPP_CLIENT_LIBRARY_DEBUG}
	)

endif()

if (JSON_RPC_CPP_INCLUDE_DIR)
	set (JSON_RPC_CPP_VERSION_HEADER "${JSON_RPC_CPP_INCLUDE_DIR}/jsonrpccpp/version.h")
	if (EXISTS ${JSON_RPC_CPP_VERSION_HEADER})
		file (STRINGS ${JSON_RPC_CPP_VERSION_HEADER} JSON_RPC_CPP_VERSION_MAJOR REGEX "^#define JSONRPC_CPP_MAJOR_VERSION[ \t]+[0-9]+$") 
		file (STRINGS ${JSON_RPC_CPP_VERSION_HEADER} JSON_RPC_CPP_VERSION_MINOR REGEX "^#define JSONRPC_CPP_MINOR_VERSION[ \t]+[0-9]+$") 
		file (STRINGS ${JSON_RPC_CPP_VERSION_HEADER} JSON_RPC_CPP_VERSION_PATCH REGEX "^#define JSONRPC_CPP_PATCH_VERSION[ \t]+[0-9]+$") 
		string (REGEX REPLACE "^#define JSONRPC_CPP_MAJOR_VERSION[ \t]+([0-9]+)" "\\1" JSON_RPC_CPP_VERSION_MAJOR ${JSON_RPC_CPP_VERSION_MAJOR})
		string (REGEX REPLACE "^#define JSONRPC_CPP_MINOR_VERSION[ \t]+([0-9]+)" "\\1" JSON_RPC_CPP_VERSION_MINOR ${JSON_RPC_CPP_VERSION_MINOR})
		string (REGEX REPLACE "^#define JSONRPC_CPP_PATCH_VERSION[ \t]+([0-9]+)" "\\1" JSON_RPC_CPP_VERSION_PATCH ${JSON_RPC_CPP_VERSION_PATCH})
		set (JSON_RPC_CPP_VERSION ${JSON_RPC_CPP_VERSION_MAJOR}.${JSON_RPC_CPP_VERSION_MINOR}.${JSON_RPC_CPP_VERSION_PATCH})
	endif()
endif()

# handle the QUIETLY and REQUIRED arguments and set JSON_RPC_CPP_FOUND to TRUE
# if all listed variables are TRUE, hide their existence from configuration view
include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(
	json_rpc_cpp
	REQUIRED_VARS JSON_RPC_CPP_INCLUDE_DIR JSON_RPC_CPP_COMMON_LIBRARY JSON_RPC_CPP_SERVER_LIBRARY JSON_RPC_CPP_CLIENT_LIBRARY
	VERSION_VAR JSON_RPC_CPP_VERSION
)

mark_as_advanced (JSON_RPC_CPP_INCLUDE_DIR JSON_RPC_CPP_COMMON_LIBRARY JSON_RPC_CPP_SERVER_LIBRARY JSON_RPC_CPP_CLIENT_LIBRARY)