FindXMLRPC.cmake 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # - Find xmlrpc
  2. # Find the native XMLRPC headers and libraries.
  3. # XMLRPC_INCLUDE_DIRS - where to find xmlrpc.h, etc.
  4. # XMLRPC_LIBRARIES - List of libraries when using xmlrpc.
  5. # XMLRPC_FOUND - True if xmlrpc found.
  6. # XMLRPC modules may be specified as components for this find module.
  7. # Modules may be listed by running "xmlrpc-c-config". Modules include:
  8. # c++ C++ wrapper code
  9. # libwww-client libwww-based client
  10. # cgi-server CGI-based server
  11. # abyss-server ABYSS-based server
  12. # Typical usage:
  13. # FIND_PACKAGE(XMLRPC REQUIRED libwww-client)
  14. # First find the config script from which to obtain other values.
  15. FIND_PROGRAM(XMLRPC_C_CONFIG NAMES xmlrpc-c-config)
  16. # Check whether we found anything.
  17. IF(XMLRPC_C_CONFIG)
  18. SET(XMLRPC_FOUND 1)
  19. ELSE(XMLRPC_C_CONFIG)
  20. SET(XMLRPC_FOUND 0)
  21. ENDIF(XMLRPC_C_CONFIG)
  22. # Lookup the include directories needed for the components requested.
  23. IF(XMLRPC_FOUND)
  24. # Use the newer EXECUTE_PROCESS command if it is available.
  25. IF(COMMAND EXECUTE_PROCESS)
  26. EXECUTE_PROCESS(
  27. COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --cflags
  28. OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS
  29. OUTPUT_STRIP_TRAILING_WHITESPACE
  30. RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT
  31. )
  32. ELSE(COMMAND EXECUTE_PROCESS)
  33. EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --cflags"
  34. OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS
  35. RETURN_VALUE XMLRPC_C_CONFIG_RESULT
  36. )
  37. ENDIF(COMMAND EXECUTE_PROCESS)
  38. # Parse the include flags.
  39. IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  40. # Convert the compile flags to a CMake list.
  41. STRING(REGEX REPLACE " +" ";"
  42. XMLRPC_C_CONFIG_CFLAGS "${XMLRPC_C_CONFIG_CFLAGS}")
  43. # Look for -I options.
  44. SET(XMLRPC_INCLUDE_DIRS)
  45. FOREACH(flag ${XMLRPC_C_CONFIG_CFLAGS})
  46. IF("${flag}" MATCHES "^-I")
  47. STRING(REGEX REPLACE "^-I" "" DIR "${flag}")
  48. FILE(TO_CMAKE_PATH "${DIR}" DIR)
  49. SET(XMLRPC_INCLUDE_DIRS ${XMLRPC_INCLUDE_DIRS} "${DIR}")
  50. ENDIF("${flag}" MATCHES "^-I")
  51. ENDFOREACH(flag)
  52. ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  53. MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]")
  54. SET(XMLRPC_FOUND 0)
  55. ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  56. ENDIF(XMLRPC_FOUND)
  57. # Lookup the libraries needed for the components requested.
  58. IF(XMLRPC_FOUND)
  59. # Use the newer EXECUTE_PROCESS command if it is available.
  60. IF(COMMAND EXECUTE_PROCESS)
  61. EXECUTE_PROCESS(
  62. COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --libs
  63. OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS
  64. OUTPUT_STRIP_TRAILING_WHITESPACE
  65. RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT
  66. )
  67. ELSE(COMMAND EXECUTE_PROCESS)
  68. EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --libs"
  69. OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS
  70. RETURN_VALUE XMLRPC_C_CONFIG_RESULT
  71. )
  72. ENDIF(COMMAND EXECUTE_PROCESS)
  73. # Parse the library names and directories.
  74. IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  75. STRING(REGEX REPLACE " +" ";"
  76. XMLRPC_C_CONFIG_LIBS "${XMLRPC_C_CONFIG_LIBS}")
  77. # Look for -L flags for directories and -l flags for library names.
  78. SET(XMLRPC_LIBRARY_DIRS)
  79. SET(XMLRPC_LIBRARY_NAMES)
  80. FOREACH(flag ${XMLRPC_C_CONFIG_LIBS})
  81. IF("${flag}" MATCHES "^-L")
  82. STRING(REGEX REPLACE "^-L" "" DIR "${flag}")
  83. FILE(TO_CMAKE_PATH "${DIR}" DIR)
  84. SET(XMLRPC_LIBRARY_DIRS ${XMLRPC_LIBRARY_DIRS} "${DIR}")
  85. ELSEIF("${flag}" MATCHES "^-l")
  86. STRING(REGEX REPLACE "^-l" "" NAME "${flag}")
  87. SET(XMLRPC_LIBRARY_NAMES ${XMLRPC_LIBRARY_NAMES} "${NAME}")
  88. ENDIF("${flag}" MATCHES "^-L")
  89. ENDFOREACH(flag)
  90. # Search for each library needed using the directories given.
  91. FOREACH(name ${XMLRPC_LIBRARY_NAMES})
  92. # Look for this library.
  93. FIND_LIBRARY(XMLRPC_${name}_LIBRARY
  94. NAMES ${name}
  95. PATHS ${XMLRPC_LIBRARY_DIRS}
  96. NO_DEFAULT_PATH
  97. )
  98. FIND_LIBRARY(XMLRPC_${name}_LIBRARY NAMES ${name})
  99. MARK_AS_ADVANCED(XMLRPC_${name}_LIBRARY)
  100. # If any library is not found then the whole package is not found.
  101. IF(NOT XMLRPC_${name}_LIBRARY)
  102. SET(XMLRPC_FOUND 0)
  103. ENDIF(NOT XMLRPC_${name}_LIBRARY)
  104. # Build an ordered list of all the libraries needed.
  105. SET(XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES} "${XMLRPC_${name}_LIBRARY}")
  106. ENDFOREACH(name)
  107. ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  108. MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]")
  109. SET(XMLRPC_FOUND 0)
  110. ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$")
  111. ENDIF(XMLRPC_FOUND)
  112. # Report the results.
  113. IF(NOT XMLRPC_FOUND)
  114. SET(XMLRPC_DIR_MESSAGE
  115. "XMLRPC was not found. Make sure the entries XMLRPC_* are set.")
  116. IF(NOT XMLRPC_FIND_QUIETLY)
  117. MESSAGE(STATUS "${XMLRPC_DIR_MESSAGE}")
  118. ELSE(NOT XMLRPC_FIND_QUIETLY)
  119. IF(XMLRPC_FIND_REQUIRED)
  120. MESSAGE(FATAL_ERROR "${XMLRPC_DIR_MESSAGE}")
  121. ENDIF(XMLRPC_FIND_REQUIRED)
  122. ENDIF(NOT XMLRPC_FIND_QUIETLY)
  123. ENDIF(NOT XMLRPC_FOUND)