ENH: Find module for XMLRPC libraries.

This commit is contained in:
Brad King 2006-10-19 12:58:05 -04:00
parent d913a7b1e7
commit 93ce08e373
1 changed files with 134 additions and 0 deletions

134
Modules/FindXMLRPC.cmake Normal file
View File

@ -0,0 +1,134 @@
# - 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_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}
PATHS ${XMLRPC_LIBRARY_DIRS}
NO_DEFAULT_PATH
)
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)