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