LibraryWithVersions.cmake 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. enable_language(C)
  2. add_library(foo SHARED foo.c)
  3. set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE)
  4. set_property (TARGET foo PROPERTY VERSION 2.5.0)
  5. set_property (TARGET foo PROPERTY SOVERSION 2.0.0)
  6. add_executable(main main.c)
  7. target_link_libraries(main PRIVATE foo)
  8. install(TARGETS foo DESTINATION "${CMAKE_BINARY_DIR}/INSTALL" COMPONENT default)
  9. install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev1" NAMELINK_SKIP COMPONENT default)
  10. install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev2" NAMELINK_ONLY COMPONENT default)
  11. install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL3"
  12. COMPONENT lib3 NAMELINK_COMPONENT dev3)
  13. install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL4"
  14. COMPONENT lib4 NAMELINK_COMPONENT dev4)
  15. set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\")
  16. set (APPLE_TEXT_STUBS_SUPPORTED TRUE)
  17. endif()\n\n")
  18. string (APPEND GENERATE_CONTENT [[
  19. macro (CHECK_FILE test_msg path)
  20. if (NOT EXISTS "${path}")
  21. string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not found\n")
  22. endif()
  23. endmacro()
  24. macro (CHECK_SYMLINK test_msg path)
  25. if (NOT IS_SYMLINK "${path}")
  26. string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" is not a symbolic link\n")
  27. elseif (NOT EXISTS "${path}")
  28. string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not a valid symlink\n")
  29. endif()
  30. endmacro()
  31. macro (CHECK_NOFILE test_msg path)
  32. if (EXISTS "${path}")
  33. string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" was found\n")
  34. endif()
  35. endmacro()
  36. macro (CHECK_INSTALLED test_msg dir file)
  37. file(GLOB installed_files LIST_DIRECTORIES FALSE RELATIVE "${dir}" "${dir}/*")
  38. if (NOT "${file}" IN_LIST installed_files)
  39. string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${dir}/${file}\" not found\n")
  40. endif()
  41. endmacro()
  42. check_file("DYLIB file" "$<TARGET_FILE:foo>")
  43. check_symlink("Linkable DYLIB file" "$<TARGET_LINKER_LIBRARY_FILE:foo>")
  44. check_symlink("SONAME DYLIB file" "$<TARGET_SONAME_FILE:foo>")
  45. check_file("executable file" "$<TARGET_FILE:main>")
  46. check_file("Installed DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_FILE_NAME:foo>")
  47. check_symlink("Installed Linkable DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_LINKER_LIBRARY_FILE_NAME:foo>")
  48. check_symlink("Installed SONAME DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_SONAME_FILE_NAME:foo>")
  49. if (APPLE_TEXT_STUBS_SUPPORTED)
  50. check_file("TBD file" "$<TARGET_IMPORT_FILE:foo>")
  51. check_symlink("Linkable TBD file" "$<TARGET_LINKER_IMPORT_FILE:foo>")
  52. check_symlink("SONAME TBD file" "$<TARGET_SONAME_IMPORT_FILE:foo>")
  53. check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_IMPORT_FILE_NAME:foo>")
  54. check_symlink("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>")
  55. check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>")
  56. check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_IMPORT_FILE_NAME:foo>")
  57. check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>")
  58. check_nofile("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>")
  59. check_installed("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2" "$<TARGET_LINKER_IMPORT_FILE_NAME:foo>")
  60. check_nofile("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2/$<TARGET_IMPORT_FILE_NAME:foo>")
  61. check_nofile("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>")
  62. check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_IMPORT_FILE_NAME:foo>")
  63. check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>")
  64. check_nofile("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>")
  65. check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_IMPORT_FILE_NAME:foo>")
  66. check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>")
  67. check_symlink("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>")
  68. endif()
  69. ]])
  70. file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/LibraryWithVersions-$<CONFIG>-generated.cmake"
  71. CONTENT "${GENERATE_CONTENT}")