Guest User

Untitled

a guest
Oct 16th, 2017
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. ################################################################################
  2. # Copyright 2017 Antoine HOARAU <hoarau.robotics@gmail.com>
  3. #
  4. # CMake script for finding the XENOMAI 2 native or XENOMAI 3 alchemy/posix/rtdm skin.
  5. # If the optional XENOMAI_ROOT_DIR environment variable exists, header files and
  6. # libraries will be searched in the XENOMAI_ROOT_DIR/include and XENOMAI_ROOT_DIR/lib
  7. # directories, respectively. Otherwise the default CMake search process will be
  8. # used.
  9. #
  10. # This script creates the following variables for each skin :
  11. # XENOMAI_FOUND: Boolean that indicates if the package was found
  12. # XENOMAI_INCLUDE_DIRS: Paths to the necessary header files
  13. # XENOMAI_LIBRARIES: Package libraries
  14. # XENOMAI_CFLAGS: Package cflags for additional parsing
  15. # XENOMAI_LD_FLAGS: Package linker flags for additional parsing
  16. # XENOMAI_COMPILE_DEFINITIONS: Package compile flags
  17. #
  18. # It also set the XENOMAI_POSIX_* and XENOMAI_RTDM_* variables
  19. # NOTE: You still need FindRTnet.cmake for rtnet support on xenomai 2.x
  20. ################################################################################
  21.  
  22. include(FindPackageHandleStandardArgs)
  23.  
  24. # Get hint from environment variable (if any)
  25. if(NOT $ENV{XENOMAI_ROOT_DIR} STREQUAL "")
  26. set(XENOMAI_ROOT_DIR $ENV{XENOMAI_ROOT_DIR} CACHE PATH "Xenomai base directory location (optional, used for nonstandard installation paths)" FORCE)
  27. mark_as_advanced(XENOMAI_ROOT_DIR)
  28. endif()
  29.  
  30. # Find headers and libraries
  31. if(XENOMAI_ROOT_DIR)
  32. # Use location specified by environment variable
  33. find_program(XENOMAI_XENO_CONFIG NAMES xeno-config PATHS ${XENOMAI_ROOT_DIR}/bin NO_DEFAULT_PATH)
  34. else()
  35. # Use default CMake search process
  36. find_program(XENOMAI_XENO_CONFIG NAMES xeno-config )
  37. endif()
  38.  
  39. mark_as_advanced(XENOMAI_XENO_CONFIG)
  40.  
  41. function(find_xeno_skin_variables prefix skin_name)
  42.  
  43. execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS}
  44. OUTPUT_VARIABLE ${prefix}_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE
  45. ERROR_VARIABLE ${prefix}_LDFLAGS_ERROR)
  46. execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --cflags
  47. OUTPUT_VARIABLE ${prefix}_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE
  48. ERROR_VARIABLE ${prefix}_CFLAGS_ERROR)
  49.  
  50. if(${prefix}_LDFLAGS_ERROR)
  51. message(FATAL_ERROR "Could not determine ldflags with command ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS}")
  52. endif()
  53.  
  54. if(${prefix}_CFLAGS_ERROR)
  55. message(FATAL_ERROR "Could not determine cflags with command ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --cflags")
  56. endif()
  57.  
  58. set(${prefix}_FOUND TRUE)
  59.  
  60. if(NOT ${${prefix}_LDFLAGS} STREQUAL "")
  61. string(REGEX MATCHALL "-L([^ ]+)|-l([^ ]+)" ${prefix}_LIBRARY ${${prefix}_LDFLAGS})
  62. else()
  63. set(${prefix}_LIBRARY "")
  64. endif()
  65. string(REGEX MATCHALL "-I([^ ]+)" ${prefix}_INCLUDE_DIR ${${prefix}_CFLAGS})
  66. string(REGEX MATCHALL "-D([^ ]+)" ${prefix}_COMPILE_DEFINITIONS ${${prefix}_CFLAGS})
  67. string(REPLACE "-I" ";" ${prefix}_INCLUDE_DIR ${${prefix}_INCLUDE_DIR})
  68.  
  69. message(STATUS "Xenomai ${XENOMAI_VERSION} ${skin_name} skin
  70. libs : ${${prefix}_LIBRARY}
  71. include : ${${prefix}_INCLUDE_DIR}
  72. ldflags : ${${prefix}_LDFLAGS}
  73. cflags : ${${prefix}_CFLAGS}
  74. ")
  75.  
  76. set(${prefix}_INCLUDE_DIRS ${${prefix}_INCLUDE_DIR} CACHE INTERNAL "")
  77. set(${prefix}_LIBRARIES ${${prefix}_LIBRARY} CACHE INTERNAL "")
  78. set(${prefix}_COMPILE_DEFINITIONS ${${prefix}_COMPILE_DEFINITIONS} CACHE INTERNAL "")
  79. set(${prefix}_LDFLAGS ${${prefix}_LDFLAGS} CACHE INTERNAL "")
  80. set(${prefix}_CFLAGS ${${prefix}_CFLAGS} CACHE INTERNAL "")
  81. set(${prefix}_FOUND ${${prefix}_FOUND} CACHE INTERNAL "")
  82.  
  83. mark_as_advanced(${prefix}_LIBRARIES ${prefix}_INCLUDE_DIRS ${prefix}_COMPILE_DEFINITIONS ${prefix}_CFLAGS ${prefix}_LDFLAGS)
  84. endfunction()
  85.  
  86. function(handle_standard_args prefix)
  87. find_package_handle_standard_args(${prefix} DEFAULT_MSG ${prefix}_LIBRARIES ${prefix}_INCLUDE_DIRS ${prefix}_COMPILE_DEFINITIONS ${prefix}_CFLAGS ${prefix}_LDFLAGS)
  88. endfunction()
  89.  
  90. if(XENOMAI_XENO_CONFIG)
  91. # Detect Xenomai version
  92. execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --version OUTPUT_VARIABLE XENOMAI_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
  93. string(REPLACE "." ";" XENOMAI_VERSION_LIST ${XENOMAI_VERSION} )
  94. list(GET XENOMAI_VERSION_LIST 0 XENOMAI_VERSION_MAJOR)
  95. list(GET XENOMAI_VERSION_LIST 1 XENOMAI_VERSION_MINOR)
  96. list(GET XENOMAI_VERSION_LIST 2 XENOMAI_VERSION_PATCH)
  97.  
  98. # Here we have xeno-config
  99. if(${XENOMAI_VERSION_MAJOR} EQUAL 2)
  100. set(XENOMAI_SKIN_NAME native)
  101. endif()
  102.  
  103. if(${XENOMAI_VERSION_MAJOR} EQUAL 3)
  104. set(XENOMAI_SKIN_NAME alchemy)
  105. # NOTE: --auto-init-solib bootstraps xenomai_init()
  106. set(XENO_CONFIG_LDFLAGS_EXTRA_ARGS "--auto-init-solib")
  107. endif()
  108.  
  109. if(NOT XENOMAI_SKIN_NAME)
  110. message(FATAL_ERROR "Only Xenomai 2.x and 3.x are supported, your version is ${XENOMAI_VERSION}")
  111. endif()
  112.  
  113. find_xeno_skin_variables(XENOMAI ${XENOMAI_SKIN_NAME})
  114. find_xeno_skin_variables(XENOMAI_POSIX posix)
  115. find_xeno_skin_variables(XENOMAI_RTDM rtdm)
  116. else()
  117. set(XENOMAI_FOUND FALSE)
  118. set(XENOMAI_POSIX_FOUND FALSE)
  119. set(XENOMAI_RTDM_FOUND FALSE)
  120. endif()
  121.  
  122. handle_standard_args(XENOMAI)
  123. handle_standard_args(XENOMAI_POSIX)
  124. handle_standard_args(XENOMAI_RTDM)
  125.  
  126. find_package_handle_standard_args(Xenomai DEFAULT_MSG XENOMAI_XENO_CONFIG)
Add Comment
Please, Sign In to add comment