Misc.cmake 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. include(CheckCXXCompilerFlag)
  2. # Flatten our header structure
  3. function(flatify target headers)
  4. foreach(header ${headers})
  5. get_filename_component(tgt ${header} NAME)
  6. configure_file(${header} ${target}/${tgt} @ONLY)
  7. endforeach(header ${headers})
  8. endfunction()
  9. function(add_optional_compile_options flags)
  10. foreach(flag ${flags})
  11. check_cxx_compiler_flag(-${flag} have-compiler-flag:-${flag})
  12. if (have-compiler-flag:-${flag})
  13. add_compile_options("-${flag}")
  14. endif()
  15. endforeach()
  16. endfunction()
  17. # Substitute vendor references in a file
  18. function(add_vendor_file)
  19. set(options)
  20. set(oneValueArgs OUTPUT INPUT MODE)
  21. set(multiValueArgs VARIABLES)
  22. cmake_parse_arguments(AVF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  23. message(STATUS "Configuring vendor file ${AVF_OUTPUT}")
  24. FILE(READ ${CMAKE_CURRENT_SOURCE_DIR}/${AVF_INPUT} input)
  25. foreach(variable ${AVF_VARIABLES})
  26. execute_process(COMMAND ../vendor/getinfo ${variable} OUTPUT_VARIABLE value OUTPUT_STRIP_TRAILING_WHITESPACE)
  27. string(REPLACE "&${variable};" "${value}" input "${input}")
  28. endforeach()
  29. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT} "${input}")
  30. execute_process(COMMAND chmod ${AVF_MODE} ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT})
  31. endfunction()
  32. # Add symbolic links to a file
  33. function(add_slaves destination master)
  34. set(slaves "")
  35. foreach(slave ${ARGN})
  36. add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${slave}
  37. COMMAND ${CMAKE_COMMAND} -E create_symlink ${master} ${CMAKE_CURRENT_BINARY_DIR}/${slave})
  38. list(APPEND slaves ${CMAKE_CURRENT_BINARY_DIR}/${slave})
  39. endforeach()
  40. STRING(REPLACE "/" "-" master "${master}")
  41. add_custom_target(${master}-slaves ALL DEPENDS ${slaves})
  42. install(FILES ${slaves} DESTINATION ${destination})
  43. endfunction()
  44. # Generates a simple version script versioning everything with current SOVERSION
  45. function(add_version_script target)
  46. get_target_property(soversion ${target} SOVERSION)
  47. set(script "${CMAKE_CURRENT_BINARY_DIR}/${target}.versionscript")
  48. string(REPLACE "-" "" name "${target}_${soversion}")
  49. string(TOUPPER "${name}" name)
  50. add_custom_command(OUTPUT "${script}"
  51. COMMAND echo "${name} {global: *; };" > "${script}"
  52. VERBATIM )
  53. add_custom_target(${target}-versionscript DEPENDS "${script}")
  54. target_link_libraries(${target} PRIVATE -Wl,-version-script="${script}")
  55. add_dependencies(${target} ${target}-versionscript)
  56. endfunction()