# - 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) #============================================================================= # Copyright 2001-2009 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) # 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_FOUND 1) ELSE(XMLRPC_C_CONFIG) SET(XMLRPC_FOUND 0) ENDIF(XMLRPC_C_CONFIG) # Lookup the include directories needed for the components requested. IF(XMLRPC_FOUND) # Use the newer EXECUTE_PROCESS command if it is available. IF(COMMAND EXECUTE_PROCESS) 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 ) ELSE(COMMAND EXECUTE_PROCESS) EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --cflags" OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS RETURN_VALUE XMLRPC_C_CONFIG_RESULT ) ENDIF(COMMAND EXECUTE_PROCESS) # Parse the include flags. IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") # Convert the compile flags to a CMake list. STRING(REGEX REPLACE " +" ";" XMLRPC_C_CONFIG_CFLAGS "${XMLRPC_C_CONFIG_CFLAGS}") # Look for -I options. SET(XMLRPC_INCLUDE_DIRS) FOREACH(flag ${XMLRPC_C_CONFIG_CFLAGS}) IF("${flag}" MATCHES "^-I") STRING(REGEX REPLACE "^-I" "" DIR "${flag}") FILE(TO_CMAKE_PATH "${DIR}" DIR) SET(XMLRPC_INCLUDE_DIRS ${XMLRPC_INCLUDE_DIRS} "${DIR}") ENDIF("${flag}" MATCHES "^-I") ENDFOREACH(flag) ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]") SET(XMLRPC_FOUND 0) ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") ENDIF(XMLRPC_FOUND) # Lookup the libraries needed for the components requested. IF(XMLRPC_FOUND) # Use the newer EXECUTE_PROCESS command if it is available. IF(COMMAND EXECUTE_PROCESS) 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 ) ELSE(COMMAND EXECUTE_PROCESS) EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --libs" OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS RETURN_VALUE XMLRPC_C_CONFIG_RESULT ) ENDIF(COMMAND EXECUTE_PROCESS) # Parse the library names and directories. IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^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") STRING(REGEX REPLACE "^-L" "" DIR "${flag}") FILE(TO_CMAKE_PATH "${DIR}" DIR) SET(XMLRPC_LIBRARY_DIRS ${XMLRPC_LIBRARY_DIRS} "${DIR}") ELSEIF("${flag}" MATCHES "^-l") STRING(REGEX REPLACE "^-l" "" NAME "${flag}") SET(XMLRPC_LIBRARY_NAMES ${XMLRPC_LIBRARY_NAMES} "${NAME}") ENDIF("${flag}" MATCHES "^-L") ENDFOREACH(flag) # 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_FOUND 0) ENDIF(NOT XMLRPC_${name}_LIBRARY) # Build an ordered list of all the libraries needed. SET(XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES} "${XMLRPC_${name}_LIBRARY}") ENDFOREACH(name) ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]") SET(XMLRPC_FOUND 0) ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") ENDIF(XMLRPC_FOUND) # Report the results. IF(NOT XMLRPC_FOUND) SET(XMLRPC_DIR_MESSAGE "XMLRPC was not found. Make sure the entries XMLRPC_* are set.") IF(NOT XMLRPC_FIND_QUIETLY) MESSAGE(STATUS "${XMLRPC_DIR_MESSAGE}") ELSE(NOT XMLRPC_FIND_QUIETLY) IF(XMLRPC_FIND_REQUIRED) MESSAGE(FATAL_ERROR "${XMLRPC_DIR_MESSAGE}") ENDIF(XMLRPC_FIND_REQUIRED) ENDIF(NOT XMLRPC_FIND_QUIETLY) ENDIF(NOT XMLRPC_FOUND)