ARCHIVER_expansion.cmake 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. enable_language(C)
  2. set(cfg_dir)
  3. get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
  4. if(_isMultiConfig)
  5. set(cfg_dir /Debug)
  6. endif()
  7. set(DUMP_EXE "${CMAKE_CURRENT_BINARY_DIR}${cfg_dir}/dump${CMAKE_EXECUTABLE_SUFFIX}")
  8. add_executable(dump dump.c)
  9. # Overwrite archive rule to enable command line dump
  10. set(CMAKE_C_CREATE_STATIC_LIBRARY "\"${DUMP_EXE}\" create_archive <LINK_FLAGS>")
  11. function(add_test_library target_name options)
  12. add_library(${target_name} STATIC lib.c)
  13. set_property(TARGET ${target_name} PROPERTY STATIC_LIBRARY_OPTIONS "${options}")
  14. add_dependencies(${target_name} dump)
  15. endfunction()
  16. # Use ARCHIVER alone
  17. add_test_library(archiver "ARCHIVER:-foo,bar")
  18. # Use ARCHIVER with SHELL
  19. add_test_library(archiver_shell "ARCHIVER:SHELL:-foo bar")
  20. # Nested ARCHIVER: prefixes should be preserved as written, only the outermost ARCHIVER: prefix removed
  21. add_test_library(archiver_nested "ARCHIVER:ARCHIVER:-foo,bar")
  22. # Same with ARCHIVER:SHELL:
  23. add_test_library(archiver_nested_shell "ARCHIVER:SHELL:ARCHIVER:-foo bar")
  24. # generate reference for ARCHIVER flag
  25. if (CMAKE_C_ARCHIVER_WRAPPER_FLAG)
  26. set(archiver_flag ${CMAKE_C_ARCHIVER_WRAPPER_FLAG})
  27. list(GET archiver_flag -1 archiver_space)
  28. if (archiver_space STREQUAL " ")
  29. list(REMOVE_AT archiver_flag -1)
  30. else()
  31. set(archiver_space)
  32. endif()
  33. list (JOIN archiver_flag " " archiver_flag)
  34. if (CMAKE_C_ARCHIVER_WRAPPER_FLAG_SEP)
  35. set(archiver_sep "${CMAKE_C_ARCHIVER_WRAPPER_FLAG_SEP}")
  36. set(archiver_flag_nested "${archiver_flag}${archiver_space}ARCHIVER:-foo${archiver_sep}bar")
  37. set(archiver_flag_nested_shell "${archiver_flag}${archiver_space}ARCHIVER:-foo${archiver_sep}bar")
  38. string (APPEND archiver_flag "${archiver_space}" "-foo${archiver_sep}bar")
  39. else()
  40. set(archiver_prefix "${archiver_flag}${archiver_space}")
  41. set(archiver_flag_nested "${archiver_prefix}ARCHIVER:-foo ${archiver_prefix}bar")
  42. set(archiver_flag_nested_shell "${archiver_prefix}ARCHIVER:-foo ${archiver_prefix}bar")
  43. set (archiver_flag "${archiver_prefix}-foo ${archiver_prefix}bar")
  44. endif()
  45. else()
  46. set(archiver_flag_nested "ARCHIVER:-foo bar")
  47. set(archiver_flag_nested_shell "ARCHIVER:-foo bar")
  48. set(archiver_flag "-foo bar")
  49. endif()
  50. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER.txt" "${archiver_flag}")
  51. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER_NESTED.txt" "${archiver_flag_nested}")
  52. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER_NESTED_SHELL.txt" "${archiver_flag_nested_shell}")