123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- # file Copyright.txt or https://cmake.org/licensing for details.
- #[=======================================================================[.rst:
- FindXMLRPC
- ----------
- Find xmlrpc
- Find the native XMLRPC headers and libraries.
- ::
- XMLRPC_INCLUDE_DIRS - where to find xmlrpc.h, etc.
- XMLRPC_LIBRARIES - List of libraries when using xmlrpc.
- XMLRPC_FOUND - True if xmlrpc found.
- XMLRPC modules may be specified as components for this find module.
- Modules may be listed by running "xmlrpc-c-config". Modules include:
- ::
- c++ C++ wrapper code
- libwww-client libwww-based client
- cgi-server CGI-based server
- abyss-server ABYSS-based server
- Typical usage:
- ::
- find_package(XMLRPC REQUIRED libwww-client)
- #]=======================================================================]
- # First find the config script from which to obtain other values.
- find_program(XMLRPC_C_CONFIG NAMES xmlrpc-c-config)
- # Check whether we found anything.
- if(XMLRPC_C_CONFIG)
- set(XMLRPC_C_FOUND 1)
- else()
- set(XMLRPC_C_FOUND 0)
- endif()
- # Lookup the include directories needed for the components requested.
- if(XMLRPC_C_FOUND)
- execute_process(
- COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --cflags
- OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS
- OUTPUT_STRIP_TRAILING_WHITESPACE
- RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT
- )
- # Parse the include flags.
- if("${XMLRPC_C_CONFIG_RESULT}" STREQUAL "0")
- # Convert the compile flags to a CMake list.
- string(REGEX REPLACE " +" ";"
- XMLRPC_C_CONFIG_CFLAGS "${XMLRPC_C_CONFIG_CFLAGS}")
- # Look for -I options.
- # FIXME: Use these as hints to a find_path call to find the headers.
- set(XMLRPC_INCLUDE_DIRS)
- foreach(flag ${XMLRPC_C_CONFIG_CFLAGS})
- if("${flag}" MATCHES "^-I(.+)")
- file(TO_CMAKE_PATH "${CMAKE_MATCH_1}" DIR)
- list(APPEND XMLRPC_INCLUDE_DIRS "${DIR}")
- endif()
- endforeach()
- else()
- message("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]")
- set(XMLRPC_C_FOUND 0)
- endif()
- endif()
- # Lookup the libraries needed for the components requested.
- if(XMLRPC_C_FOUND)
- execute_process(
- COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --libs
- OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS
- OUTPUT_STRIP_TRAILING_WHITESPACE
- RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT
- )
- # Parse the library names and directories.
- if("${XMLRPC_C_CONFIG_RESULT}" STREQUAL "0")
- string(REGEX REPLACE " +" ";"
- XMLRPC_C_CONFIG_LIBS "${XMLRPC_C_CONFIG_LIBS}")
- # Look for -L flags for directories and -l flags for library names.
- set(XMLRPC_LIBRARY_DIRS)
- set(XMLRPC_LIBRARY_NAMES)
- foreach(flag ${XMLRPC_C_CONFIG_LIBS})
- if("${flag}" MATCHES "^-L(.+)")
- file(TO_CMAKE_PATH "${CMAKE_MATCH_1}" DIR)
- list(APPEND XMLRPC_LIBRARY_DIRS "${DIR}")
- elseif("${flag}" MATCHES "^-l(.+)")
- list(APPEND XMLRPC_LIBRARY_NAMES "${CMAKE_MATCH_1}")
- endif()
- endforeach()
- # Search for each library needed using the directories given.
- foreach(name ${XMLRPC_LIBRARY_NAMES})
- # Look for this library.
- find_library(XMLRPC_${name}_LIBRARY
- NAMES ${name}
- HINTS ${XMLRPC_LIBRARY_DIRS}
- )
- mark_as_advanced(XMLRPC_${name}_LIBRARY)
- # If any library is not found then the whole package is not found.
- if(NOT XMLRPC_${name}_LIBRARY)
- set(XMLRPC_C_FOUND 0)
- endif()
- # Build an ordered list of all the libraries needed.
- set(XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES} "${XMLRPC_${name}_LIBRARY}")
- endforeach()
- else()
- message("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]")
- set(XMLRPC_C_FOUND 0)
- endif()
- endif()
- # Report the results.
- include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(
- XMLRPC
- REQUIRED_VARS XMLRPC_C_FOUND XMLRPC_LIBRARIES
- FAIL_MESSAGE "XMLRPC was not found. Make sure the entries XMLRPC_* are set.")
|