diff options
Diffstat (limited to 'Tests/RunCMake/AppleTextStubs')
17 files changed, 466 insertions, 0 deletions
diff --git a/Tests/RunCMake/AppleTextStubs/CMakeLists.txt b/Tests/RunCMake/AppleTextStubs/CMakeLists.txt new file mode 100644 index 0000000..93ee9df --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.5) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/AppleTextStubs/Framework-export.cmake b/Tests/RunCMake/AppleTextStubs/Framework-export.cmake new file mode 100644 index 0000000..f75c6d1 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Framework-export.cmake @@ -0,0 +1,12 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY FRAMEWORK TRUE) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) +set_property(TARGET foo PROPERTY LIBRARY_OUTPUT_DIRECTORY $<CONFIG>) + +install(TARGETS foo EXPORT foo FRAMEWORK DESTINATION DESTINATION "${CMAKE_BINARY_DIR}/$<CONFIG>") +install(EXPORT foo DESTINATION lib/foo NAMESPACE foo-install::) +install(FILES foo-config.cmake.in RENAME foo-config.cmake DESTINATION lib/foo) + +export(TARGETS foo NAMESPACE foo-build:: FILE Release/foo.cmake) diff --git a/Tests/RunCMake/AppleTextStubs/Framework-import.cmake b/Tests/RunCMake/AppleTextStubs/Framework-import.cmake new file mode 100644 index 0000000..e0001d0 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Framework-import.cmake @@ -0,0 +1,62 @@ +enable_language(C) + +find_package(foo REQUIRED CONFIG NO_DEFAULT_PATH) + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo-install::foo) + +get_property(is_framework TARGET foo-install::foo PROPERTY FRAMEWORK) +if (NOT is_framework) + message(SEND_ERROR "foo-build::foo: FRAMEWORK not set.") +endif() +get_property(enable_exports TARGET foo-install::foo PROPERTY ENABLE_EXPORTS) +if (CAMKE_TAPI AND NOT enable_exports) + message(SEND_ERROR "foo-install::foo: ENABLE_EXPORTS not set.") +endif() + +get_property(implib TARGET foo-install::foo PROPERTY IMPORTED_IMPLIB_RELEASE) +if (CAMKE_TAPI AND NOT implib) + message(SEND_ERROR "foo-install::foo: IMPORTED_IMPLIB_RELEASE not set.") +endif() +if (CAMKE_TAPI AND NOT implib MATCHES "foo.framework/Versions/A/foo.tbd$") + message(SEND_ERROR "foo-install::foo: ${implib}: wrong value for IMPORTED_IMPLIB_RELEASE.") +endif() + +get_property(location TARGET foo-install::foo PROPERTY IMPORTED_LOCATION_RELEASE) +if (NOT location) + message(SEND_ERROR "foo-install::foo: IMPORTED_LOCATION_RELEASE not set.") +endif() +if (NOT location MATCHES "foo.framework/Versions/A/foo$") + message(SEND_ERROR "foo-install::foo: ${location}: wrong value for IMPORTED_LOCATION_RELEASE.") +endif() + + +include(${foo_BUILD}/foo.cmake) + +add_executable(main2 main.c) +target_link_libraries(main2 PRIVATE foo-build::foo) + +get_property(is_framework TARGET foo-build::foo PROPERTY FRAMEWORK) +if (NOT is_framework) + message(SEND_ERROR "foo-build::foo: FRAMEWORK not set.") +endif() +get_property(enable_exports TARGET foo-build::foo PROPERTY ENABLE_EXPORTS) +if (CAMKE_TAPI AND NOT enable_exports) + message(SEND_ERROR "foo-build::foo: ENABLE_EXPORTS not set.") +endif() + +get_property(implib TARGET foo-build::foo PROPERTY IMPORTED_IMPLIB_RELEASE) +if (CAMKE_TAPI AND NOT implib) + message(SEND_ERROR "foo-build::foo: IMPORTED_IMPLIB_RELEASE not set.") +endif() +if (CAMKE_TAPI AND NOT implib STREQUAL "${foo_BUILD}/foo.framework/Versions/A/foo.tbd") + message(SEND_ERROR "foo-build::foo: ${implib}: wrong value for IMPORTED_IMPLIB_RELEASE.") +endif() + +get_property(location TARGET foo-build::foo PROPERTY IMPORTED_LOCATION_RELEASE) +if (NOT location) + message(SEND_ERROR "foo-build::foo: IMPORTED_LOCATION_RELEASE not set.") +endif() +if (NOT location STREQUAL "${foo_BUILD}/foo.framework/Versions/A/foo") + message(SEND_ERROR "foo-build::foo: ${location}: wrong value for IMPORTED_LOCATION_RELEASE.") +endif() diff --git a/Tests/RunCMake/AppleTextStubs/Framework-install-check.cmake b/Tests/RunCMake/AppleTextStubs/Framework-install-check.cmake new file mode 100644 index 0000000..e8a5557 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Framework-install-check.cmake @@ -0,0 +1 @@ +include ("${RunCMake_TEST_BINARY_DIR}/Framework-Release-generated.cmake") diff --git a/Tests/RunCMake/AppleTextStubs/Framework.cmake b/Tests/RunCMake/AppleTextStubs/Framework.cmake new file mode 100644 index 0000000..f99eb5e --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Framework.cmake @@ -0,0 +1,59 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) +set_property(TARGET foo PROPERTY FRAMEWORK TRUE) + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo) + + +install(TARGETS foo FRAMEWORK DESTINATION "${CMAKE_BINARY_DIR}/INSTALL") + +# LIBRARY and ARCHIVE should be ignored +install(TARGETS foo FRAMEWORK DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2" + LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/lib" + ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev") + + +set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\") + set (APPLE_TEXT_STUBS_SUPPORTED TRUE) +endif()\n\n") + +string (APPEND GENERATE_CONTENT [[ +macro (CHECK_FILE test_msg path) + if (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not found\n") + endif() +endmacro() + +macro (CHECK_SYMLINK test_msg path) + if(NOT IS_SYMLINK "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" is not a symbolic link\n") + elseif (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" is not a valid symlink\n") + endif() +endmacro() + +check_file("DYLIB file" "$<TARGET_FILE:foo>") +check_symlink("Public DYLIB file" "$<TARGET_LINKER_LIBRARY_FILE:foo>") +check_file("executable file" "$<TARGET_FILE:main>") + +check_file("Installed DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/foo.framework/Versions/A/$<TARGET_FILE_NAME:foo>") +check_symlink("Installed Public DULIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/foo.framework/$<TARGET_FILE_NAME:foo>") +check_file("Installed DULIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/foo.framework/Versions/A/$<TARGET_FILE_NAME:foo>") +check_symlink("Installed Public DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/foo.framework/$<TARGET_FILE_NAME:foo>") + +if (APPLE_TEXT_STUBS_SUPPORTED) + check_file("TBD file" "$<TARGET_IMPORT_FILE:foo>") + check_symlink("Public TBD file" "$<TARGET_LINKER_IMPORT_FILE:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/foo.framework/Versions/A/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed Public TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/foo.framework/$<TARGET_IMPORT_FILE_NAME:foo>") + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/foo.framework/Versions/A/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed Public TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/foo.framework/$<TARGET_IMPORT_FILE_NAME:foo>") +endif() +]]) + +file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Framework-$<CONFIG>-generated.cmake" + CONTENT "${GENERATE_CONTENT}") diff --git a/Tests/RunCMake/AppleTextStubs/Library-export.cmake b/Tests/RunCMake/AppleTextStubs/Library-export.cmake new file mode 100644 index 0000000..d2e09ea --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Library-export.cmake @@ -0,0 +1,12 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) +set_property(TARGET foo PROPERTY LIBRARY_OUTPUT_DIRECTORY $<CONFIG>) +set_property(TARGET foo PROPERTY ARCHIVE_OUTPUT_DIRECTORY $<CONFIG>) + +install(TARGETS foo EXPORT foo DESTINATION "${CMAKE_BINARY_DIR}/$<CONFIG>") +install(EXPORT foo DESTINATION lib/foo NAMESPACE foo-install::) +install(FILES foo-config.cmake.in RENAME foo-config.cmake DESTINATION lib/foo) + +export(TARGETS foo NAMESPACE foo-build:: FILE Release/foo.cmake) diff --git a/Tests/RunCMake/AppleTextStubs/Library-import.cmake b/Tests/RunCMake/AppleTextStubs/Library-import.cmake new file mode 100644 index 0000000..9406aac --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Library-import.cmake @@ -0,0 +1,54 @@ +enable_language(C) + +find_package(foo REQUIRED CONFIG NO_DEFAULT_PATH) + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo-install::foo) + +get_property(enable_exports TARGET foo-install::foo PROPERTY ENABLE_EXPORTS) +if (CMAKE_TAPI AND NOT enable_exports) + message(SEND_ERROR "foo-install::foo: ENABLE_EXPORTS not set.") +endif() + +get_property(implib TARGET foo-install::foo PROPERTY IMPORTED_IMPLIB_RELEASE) +if (CMAKE_TAPI AND NOT implib) + message(SEND_ERROR "foo-install::foo: IMPORTED_IMPLIB_RELEASE not set.") +endif() +if (CMAKE_TAPI AND NOT implib MATCHES "Release/libfoo.tbd$") + message(SEND_ERROR "foo-install::foo: ${implib}: wrong value for IMPORTED_IMPLIB_RELEASE.") +endif() + +get_property(location TARGET foo-install::foo PROPERTY IMPORTED_LOCATION_RELEASE) +if (NOT location) + message(SEND_ERROR "foo-install::foo: IMPORTED_LOCATION_RELEASE not set.") +endif() +if (NOT location MATCHES "Release/libfoo.dylib$") + message(SEND_ERROR "foo-install::foo: ${location}: wrong value for IMPORTED_LOCATION_RELEASE.") +endif() + + +include(${foo_BUILD}/foo.cmake) + +add_executable(main2 main.c) +target_link_libraries(main2 PRIVATE foo-build::foo) + +get_property(enable_exports TARGET foo-build::foo PROPERTY ENABLE_EXPORTS) +if (CMAKE_TAPI AND NOT enable_exports) + message(SEND_ERROR "foo-build::foo: ENABLE_EXPORTS not set.") +endif() + +get_property(implib TARGET foo-build::foo PROPERTY IMPORTED_IMPLIB_RELEASE) +if (CMAKE_TAPI AND NOT implib) + message(SEND_ERROR "foo-build::foo: IMPORTED_IMPLIB_RELEASE not set.") +endif() +if (CMAKE_TAPI AND NOT implib STREQUAL "${foo_BUILD}/libfoo.tbd") + message(SEND_ERROR "foo-build::foo: ${implib}: wrong value for IMPORTED_IMPLIB_RELEASE.") +endif() + +get_property(location TARGET foo-build::foo PROPERTY IMPORTED_LOCATION_RELEASE) +if (NOT location) + message(SEND_ERROR "foo-build::foo: IMPORTED_LOCATION_RELEASE not set.") +endif() +if (NOT location STREQUAL "${foo_BUILD}/libfoo.dylib") + message(SEND_ERROR "foo-build::foo: ${location}: wrong value for IMPORTED_LOCATION_RELEASE.") +endif() diff --git a/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs-install-check.cmake b/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs-install-check.cmake new file mode 100644 index 0000000..40ec0a6 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs-install-check.cmake @@ -0,0 +1 @@ +include ("${RunCMake_TEST_BINARY_DIR}/LibraryWithOutputs-Release-generated.cmake") diff --git a/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs.cmake b/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs.cmake new file mode 100644 index 0000000..f61c8f2 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/LibraryWithOutputs.cmake @@ -0,0 +1,52 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) +set_property(TARGET foo PROPERTY ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/TBD/$<CONFIG>") +set_property(TARGET foo PROPERTY ARCHIVE_OUTPUT_NAME "tbd") + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo) + + +set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\") + set (APPLE_TEXT_STUBS_SUPPORTED TRUE) +endif()\n\n") + +string (APPEND GENERATE_CONTENT [[ +macro (CHECK_FILE test_msg path) + if (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not found\n") + endif() +endmacro() + +check_file("DYLIB file" "$<TARGET_FILE:foo>") +check_file("executable file" "$<TARGET_FILE:main>") + +if (APPLE_TEXT_STUBS_SUPPORTED) + check_file("TBD file" "$<TARGET_IMPORT_FILE:foo>") +]]) + +if (CMAKE_GENERATOR STREQUAL "Xcode") + # ARCHIVE outputs are ignored by this generator + string (APPEND GENERATE_CONTENT + "\n if (NOT \"$<TARGET_IMPORT_FILE_DIR:foo>\" STREQUAL \"${CMAKE_BINARY_DIR}/$<CONFIG>\") + string (APPEND RunCMake_TEST_FAILED \"Wrong directory for TBD file: \\\"$<TARGET_IMPORT_FILE_DIR:foo>\\\"\n\") + endif() + if (NOT \"$<TARGET_IMPORT_FILE_BASE_NAME:foo>\" STREQUAL \"foo\") + string (APPEND RunCMake_TEST_FAILED \"Wrong base name for TBD file: \\\"$<TARGET_IMPORT_FILE_BASE_NAME:foo>\\\"\n\") + endif()\n") +else() + string (APPEND GENERATE_CONTENT + "\n if (NOT \"$<TARGET_IMPORT_FILE_DIR:foo>\" STREQUAL \"${CMAKE_BINARY_DIR}/TBD/$<CONFIG>\") + string (APPEND RunCMake_TEST_FAILED \"Wrong directory for TBD file: \\\"$<TARGET_IMPORT_FILE_DIR:foo>\\\"\n\") + endif() + if (NOT \"$<TARGET_IMPORT_FILE_BASE_NAME:foo>\" STREQUAL \"tbd\") + string (APPEND RunCMake_TEST_FAILED \"Wrong base name for TBD file: \\\"$<TARGET_IMPORT_FILE_BASE_NAME:foo>\\\"\n\") + endif()\n") +endif() +string (APPEND GENERATE_CONTENT "endif()\n") + + +file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/LibraryWithOutputs-$<CONFIG>-generated.cmake" + CONTENT "${GENERATE_CONTENT}") diff --git a/Tests/RunCMake/AppleTextStubs/LibraryWithVersions-install-check.cmake b/Tests/RunCMake/AppleTextStubs/LibraryWithVersions-install-check.cmake new file mode 100644 index 0000000..af73286 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/LibraryWithVersions-install-check.cmake @@ -0,0 +1 @@ +include ("${RunCMake_TEST_BINARY_DIR}/LibraryWithVersions-Release-generated.cmake") diff --git a/Tests/RunCMake/AppleTextStubs/LibraryWithVersions.cmake b/Tests/RunCMake/AppleTextStubs/LibraryWithVersions.cmake new file mode 100644 index 0000000..28c175d --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/LibraryWithVersions.cmake @@ -0,0 +1,96 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) +set_property (TARGET foo PROPERTY VERSION 2.5.0) +set_property (TARGET foo PROPERTY SOVERSION 2.0.0) + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo) + + +install(TARGETS foo DESTINATION "${CMAKE_BINARY_DIR}/INSTALL" COMPONENT default) + +install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev1" NAMELINK_SKIP COMPONENT default) +install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev2" NAMELINK_ONLY COMPONENT default) + +install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL3" + COMPONENT lib3 NAMELINK_COMPONENT dev3) +install(TARGETS foo ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL4" + COMPONENT lib4 NAMELINK_COMPONENT dev4) + + +set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\") + set (APPLE_TEXT_STUBS_SUPPORTED TRUE) +endif()\n\n") + +string (APPEND GENERATE_CONTENT [[ +cmake_policy (SET CMP0011 NEW) +cmake_policy (SET CMP0057 NEW) + +macro (CHECK_FILE test_msg path) + if (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not found\n") + endif() +endmacro() + +macro (CHECK_SYMLINK test_msg path) + if (NOT IS_SYMLINK "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" is not a symbolic link\n") + elseif (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not a valid symlink\n") + endif() +endmacro() + +macro (CHECK_NOFILE test_msg path) + if (EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" was found\n") + endif() +endmacro() + +macro (CHECK_INSTALLED test_msg dir file) + file(GLOB installed_files LIST_DIRECTORIES FALSE RELATIVE "${dir}" "${dir}/*") + if (NOT "${file}" IN_LIST installed_files) + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${dir}/${file}\" not found\n") + endif() +endmacro() + + +check_file("DYLIB file" "$<TARGET_FILE:foo>") +check_symlink("Linkable DYLIB file" "$<TARGET_LINKER_LIBRARY_FILE:foo>") +check_symlink("SONAME DYLIB file" "$<TARGET_SONAME_FILE:foo>") +check_file("executable file" "$<TARGET_FILE:main>") + +check_file("Installed DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_FILE_NAME:foo>") +check_symlink("Installed Linkable DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_LINKER_LIBRARY_FILE_NAME:foo>") +check_symlink("Installed SONAME DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_SONAME_FILE_NAME:foo>") + +if (APPLE_TEXT_STUBS_SUPPORTED) + check_file("TBD file" "$<TARGET_IMPORT_FILE:foo>") + check_symlink("Linkable TBD file" "$<TARGET_LINKER_IMPORT_FILE:foo>") + check_symlink("SONAME TBD file" "$<TARGET_SONAME_IMPORT_FILE:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>") + check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>") + check_nofile("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev1/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>") + + check_installed("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2" "$<TARGET_LINKER_IMPORT_FILE_NAME:foo>") + check_nofile("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2/$<TARGET_IMPORT_FILE_NAME:foo>") + check_nofile("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev2/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>") + check_nofile("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL3/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_IMPORT_FILE_NAME:foo>") + check_symlink("Installed SONAME TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_SONAME_IMPORT_FILE_NAME:foo>") + check_symlink("Installed Linkable TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL4/$<TARGET_LINKER_IMPORT_FILE_NAME:foo>") +endif() +]]) + +file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/LibraryWithVersions-$<CONFIG>-generated.cmake" + CONTENT "${GENERATE_CONTENT}") diff --git a/Tests/RunCMake/AppleTextStubs/RunCMakeTest.cmake b/Tests/RunCMake/AppleTextStubs/RunCMakeTest.cmake new file mode 100644 index 0000000..9ccd685 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/RunCMakeTest.cmake @@ -0,0 +1,58 @@ +include(RunCMake) + +function(build_project test) + if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release) + endif() + run_cmake(${test}) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + + run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . --config Release) + if ("${ARGC}" GREATER "1") + # custom install step + cmake_language(CALL ${ARGV1}) + else() + run_cmake_command(${test}-install ${CMAKE_COMMAND} --install . --config Release) + endif() +endfunction() + +build_project(Simple) +build_project(Framework) +build_project(LibraryWithOutputs) + + +function(LibraryWithVersions-install) + run_cmake_command(LibraryWithVersions-install-component-lib3 ${CMAKE_COMMAND} --install . --config Release --component lib3) + run_cmake_command(LibraryWithVersions-install-component-lib4 ${CMAKE_COMMAND} --install . --config Release --component lib4) + run_cmake_command(LibraryWithVersions-install-components-dev4 ${CMAKE_COMMAND} --install . --config Release --component dev4) + run_cmake_command(LibraryWithVersions-install ${CMAKE_COMMAND} --install . --config Release --component default) +endfunction() + +build_project(LibraryWithVersions LibraryWithVersions-install) + + +function(build_ExportImport_project test) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-export-build) + set(CMAKE_INSTALL_PREFIX ${RunCMake_TEST_BINARY_DIR}/root) + if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release) + endif() + run_cmake(${test}-export) + unset(RunCMake_TEST_OPTIONS) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test}-export-build ${CMAKE_COMMAND} --build . --config Release) + run_cmake_command(${test}-export-install ${CMAKE_COMMAND} --install . --prefix ${CMAKE_INSTALL_PREFIX} --config Release) + + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-import-build) + set (foo_BUILD "${RunCMake_BINARY_DIR}/${test}-export-build") + if (RunCMake_GENERATOR_IS_MULTI_CONFIG) + string (APPEND foo_BUILD "/Release") + endif() + run_cmake_with_options(${test}-import -Dfoo_DIR=${CMAKE_INSTALL_PREFIX}/lib/foo + -Dfoo_BUILD=${RunCMake_BINARY_DIR}/${test}-export-build/Release) + run_cmake_command(${test}-import-build ${CMAKE_COMMAND} --build . --config Release) +endfunction() + +build_ExportImport_project(Library) +build_ExportImport_project(Framework) diff --git a/Tests/RunCMake/AppleTextStubs/Simple-install-check.cmake b/Tests/RunCMake/AppleTextStubs/Simple-install-check.cmake new file mode 100644 index 0000000..94054fa --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Simple-install-check.cmake @@ -0,0 +1 @@ +include ("${RunCMake_TEST_BINARY_DIR}/Simple-Release-generated.cmake") diff --git a/Tests/RunCMake/AppleTextStubs/Simple.cmake b/Tests/RunCMake/AppleTextStubs/Simple.cmake new file mode 100644 index 0000000..9f6318c --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/Simple.cmake @@ -0,0 +1,41 @@ +enable_language(C) + +add_library(foo SHARED foo.c) +set_property(TARGET foo PROPERTY ENABLE_EXPORTS TRUE) + +add_executable(main main.c) +target_link_libraries(main PRIVATE foo) + + +install(TARGETS foo DESTINATION "${CMAKE_BINARY_DIR}/INSTALL") + +install(TARGETS foo LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/lib" + ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/INSTALL2/dev") + + +set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\") + set (APPLE_TEXT_STUBS_SUPPORTED TRUE) +endif()\n\n") + +string (APPEND GENERATE_CONTENT [[ +macro (CHECK_FILE test_msg path) + if (NOT EXISTS "${path}") + string (APPEND RunCMake_TEST_FAILED "${test_msg}: \"${path}\" not found\n") + endif() +endmacro() + +check_file("DYLIB file" "$<TARGET_FILE:foo>") +check_file("executable file" "$<TARGET_FILE:main>") + +check_file("Installed DYLIB file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/lib/$<TARGET_FILE_NAME:foo>") + +if (APPLE_TEXT_STUBS_SUPPORTED) + check_file("TBD file" "$<TARGET_IMPORT_FILE:foo>") + + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL/$<TARGET_IMPORT_FILE_NAME:foo>") + check_file("Installed TBD file" "${RunCMake_TEST_BINARY_DIR}/INSTALL2/dev/$<TARGET_IMPORT_FILE_NAME:foo>") +endif() +]]) + +file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Simple-$<CONFIG>-generated.cmake" + CONTENT "${GENERATE_CONTENT}") diff --git a/Tests/RunCMake/AppleTextStubs/foo-config.cmake.in b/Tests/RunCMake/AppleTextStubs/foo-config.cmake.in new file mode 100644 index 0000000..b038138 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/foo-config.cmake.in @@ -0,0 +1 @@ +include(${CMAKE_CURRENT_LIST_DIR}/foo.cmake) diff --git a/Tests/RunCMake/AppleTextStubs/foo.c b/Tests/RunCMake/AppleTextStubs/foo.c new file mode 100644 index 0000000..7f39d71 --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/foo.c @@ -0,0 +1,5 @@ + +int foo() +{ + return 0; +} diff --git a/Tests/RunCMake/AppleTextStubs/main.c b/Tests/RunCMake/AppleTextStubs/main.c new file mode 100644 index 0000000..dc5ce3d --- /dev/null +++ b/Tests/RunCMake/AppleTextStubs/main.c @@ -0,0 +1,7 @@ + +extern int foo(void); + +int main() +{ + return foo(); +} |