blob: 0b264223f88f57890c52d3e145793995bbf9e2ae [file]
if (WEBKIT_SDK_IS_MACOS)
find_library(CARBON_LIBRARY Carbon)
find_library(QUARTZCORE_LIBRARY QuartzCore)
execute_process(
COMMAND xcrun --sdk macosx --show-sdk-platform-path
OUTPUT_VARIABLE _platform_dir
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Mirror Xcode's "Embed Testing.framework" phase
set(_testing_staged)
foreach (_fw Testing _Testing_AppKit _Testing_CoreGraphics _Testing_CoreImage
_Testing_CoreTransferable _Testing_Foundation _Testing_UIKit)
set(_src "${_platform_dir}/Developer/Library/Frameworks/${_fw}.framework")
set(_dst "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${_fw}.framework")
if (EXISTS "${_src}")
add_custom_command(OUTPUT "${_dst}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ditto "${_src}" "${_dst}"
COMMENT "Staging ${_fw}.framework"
VERBATIM
)
list(APPEND _testing_staged "${_dst}")
endif ()
endforeach ()
if (EXISTS "${_platform_dir}/Developer/usr/lib/lib_TestingInterop.dylib")
add_custom_command(OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib_TestingInterop.dylib"
COMMAND ditto "${_platform_dir}/Developer/usr/lib/lib_TestingInterop.dylib"
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib_TestingInterop.dylib"
VERBATIM
)
list(APPEND _testing_staged "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib_TestingInterop.dylib")
endif ()
add_custom_target(TestWebKitAPIStageTesting DEPENDS ${_testing_staged})
# WTF feature defines
set(_test_swift_resp "${CMAKE_BINARY_DIR}/DerivedSources/TestWebKitAPI/platform-swift-args.resp")
_webkit_generate_platform_swift_args(TestWebKitAPI "${_test_swift_resp}" "") # FIXME: Is it correct to have an empty last argument here?
add_custom_target(TestWebKitAPISwiftArgs DEPENDS "${_test_swift_resp}")
# Swift flags for all Test* targets
_WEBKIT_COMPUTE_SWIFT_SHARED_CLANG_FLAGS(_test_swift_cc_flags)
set(_testwebkitapi_swiftmodule_dir "${CMAKE_BINARY_DIR}/TestWebKitAPI/SwiftModules")
set(TESTWEBKITAPI_SWIFT_FLAGS
"$<$<COMPILE_LANGUAGE:Swift>:-cxx-interoperability-mode=default>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -std=c++2b>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-swift-version 6>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-module-cache-path ${CMAKE_BINARY_DIR}/SwiftModuleCache>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:@${_test_swift_resp}>"
"$<$<COMPILE_LANGUAGE:Swift>:-F${CMAKE_LIBRARY_OUTPUT_DIRECTORY}>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -I${CMAKE_BINARY_DIR}>"
)
if (CMAKE_Swift_COMPILER_TARGET)
list(APPEND TESTWEBKITAPI_SWIFT_FLAGS
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-clang-target ${CMAKE_Swift_COMPILER_TARGET}>")
endif ()
foreach (_f IN LISTS _test_swift_cc_flags)
list(APPEND TESTWEBKITAPI_SWIFT_FLAGS "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc ${_f}>")
endforeach ()
macro(WEBKIT_TEST_ENABLE_SWIFT _target)
target_sources(${_target} PRIVATE
${TESTWEBKITAPI_DIR}/Runner/TestWebKitAPI.swift
${TESTWEBKITAPI_DIR}/Runner/TestRunner.swift
${TESTWEBKITAPI_DIR}/Runner/GoogleTestsController.swift
${TESTWEBKITAPI_DIR}/Runner/SwiftTestsController.swift
${TESTWEBKITAPI_DIR}/Runner/SwiftTestingABI.swift
${TESTWEBKITAPI_DIR}/Runner/TestWebKitAPISupport.mm
)
set_target_properties(${_target} PROPERTIES Swift_MODULE_NAME ${_target})
target_compile_options(${_target} PRIVATE ${TESTWEBKITAPI_SWIFT_FLAGS}
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-import-objc-header ${TESTWEBKITAPI_DIR}/Runner/TestWebKitAPI-Bridging-Header.h>"
)
add_dependencies(${_target} TestWebKitAPIStageTesting TestWebKitAPISwiftArgs)
target_link_libraries(${_target} PRIVATE "-F${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" "-framework Testing")
# CMake's Swift executable link ignores CMAKE_EXE_LINKER_FLAGS, so
# -fsanitize=address never reaches the link line. C++ object files get
# instrumented but the ASan runtime isn't linked so it doesn't work.
foreach (_sanitizer IN LISTS ENABLE_SANITIZERS)
target_compile_options(${_target} PRIVATE "$<$<COMPILE_LANGUAGE:Swift>:-sanitize=${_sanitizer}>")
target_link_options(${_target} PRIVATE "-sanitize=${_sanitizer}")
if (_sanitizer STREQUAL "address")
target_compile_options(${_target} PRIVATE "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -D__SANITIZE_ADDRESS__>")
elseif (_sanitizer STREQUAL "thread")
target_compile_options(${_target} PRIVATE "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -D__SANITIZE_THREAD__>")
endif ()
endforeach ()
endmacro()
set(TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
# TestWTF
list(APPEND TestWTF_SOURCES
Helpers/cocoa/UtilitiesCocoa.mm
Tests/WTF/cf/RetainPtr.cpp
Tests/WTF/cf/RetainPtrHashing.cpp
Tests/WTF/cf/RetainRef.cpp
Tests/WTF/cf/StringCF.cpp
Tests/WTF/cf/VectorCF.cpp
Tests/WTF/cocoa/BlockPtr.mm
Tests/WTF/cocoa/ContextualizedNSString.mm
Tests/WTF/cocoa/LoggerCocoa.mm
Tests/WTF/cocoa/RetainPtr.mm
Tests/WTF/cocoa/RetainPtrARC.mm
Tests/WTF/cocoa/RetainPtrHashingCocoa.mm
Tests/WTF/cocoa/RetainPtrHashingCocoaARC.mm
Tests/WTF/cocoa/RetainRef.mm
Tests/WTF/cocoa/RetainRefARC.mm
Tests/WTF/cocoa/TextStreamCocoa.cpp
Tests/WTF/cocoa/TextStreamCocoa.mm
Tests/WTF/cocoa/TypeCastsCocoa.mm
Tests/WTF/cocoa/TypeCastsCocoaARC.mm
Tests/WTF/cocoa/UUIDCocoa.mm
Tests/WTF/cocoa/VectorCocoa.mm
Tests/WTF/darwin/MachSendRight.cpp
Tests/WTF/darwin/OSObjectPtr.cpp
Tests/WTF/darwin/OSObjectPtrCocoa.mm
Tests/WTF/darwin/OSObjectPtrCocoaARC.mm
Tests/WTF/darwin/TypeCastsOSObjectCF.cpp
Tests/WTF/darwin/TypeCastsOSObjectCocoa.mm
Tests/WTF/darwin/TypeCastsOSObjectCocoaARC.mm
)
# The shared prefix header is precompiled without ARC, so these can't reuse it.
set_source_files_properties(
Tests/WTF/cocoa/RetainPtrARC.mm
Tests/WTF/cocoa/RetainPtrHashingCocoaARC.mm
Tests/WTF/cocoa/RetainRefARC.mm
Tests/WTF/cocoa/TypeCastsCocoaARC.mm
Tests/WTF/darwin/OSObjectPtrCocoaARC.mm
Tests/WTF/darwin/TypeCastsOSObjectCocoaARC.mm
PROPERTIES
COMPILE_FLAGS "-fobjc-arc -include ${CMAKE_CURRENT_SOURCE_DIR}/Helpers/TestWebKitAPIPrefix.h"
SKIP_PRECOMPILE_HEADERS ON)
list(APPEND TestWTF_LIBRARIES
${CARBON_LIBRARY}
"-framework Cocoa"
"-framework CoreFoundation"
)
# Tests/WTF/{cf,cocoa,darwin} include headers from Tests/WTF by name.
list(APPEND TestWTF_PRIVATE_INCLUDE_DIRECTORIES
${TESTWEBKITAPI_DIR}/Tests/WTF
)
# TestJavaScriptCore
list(APPEND TestJavaScriptCore_SOURCES
Tests/JavaScriptCore/JSRunLoopTimer.mm
)
# TestWebCore
list(APPEND TestWebCore_SOURCES
Helpers/cocoa/TestNSBundleExtras.m
Helpers/cocoa/UtilitiesCocoa.mm
Tests/WebCore/ContentExtensions.cpp
Tests/WebCore/HysteresisActivityTests.cpp
Tests/WebCore/ISOBox.cpp
Tests/WebCore/Logging.cpp
Tests/WebCore/PlatformCAAnimationKeyPath.cpp
Tests/WebCore/StringUtilities.mm
Tests/WebCore/TextBoundaries.cpp
Tests/WebCore/UserAgentStringParser.cpp
Tests/WebCore/YouTubePluginReplacement.cpp
Tests/WebCore/cocoa/AttributedStringFontCache.mm
Tests/WebCore/cocoa/AudioStreamDescriptionCocoa.mm
Tests/WebCore/cocoa/AudioVideoRendererAVFObjCTests.mm
Tests/WebCore/cocoa/BifurcatedGraphicsContextTestsCG.cpp
Tests/WebCore/cocoa/CaptionPreferencesTests.mm
Tests/WebCore/cocoa/CoreMediaUtilities.mm
Tests/WebCore/cocoa/GraphicsContextCGTests.mm
Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm
Tests/WebCore/cocoa/IOSurfaceTests.mm
Tests/WebCore/cocoa/ImageRotationSessionVT.cpp
Tests/WebCore/cocoa/MediaPlayerPrivateAVFoundationObjCTests.mm
Tests/WebCore/cocoa/MediaRecorderPrivateWriterTests.cpp
Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm
Tests/WebCore/cocoa/ResourceMonitor.mm
Tests/WebCore/cocoa/ScrollbarWidthCrash.mm
Tests/WebCore/cocoa/SerializedCryptoKeyWrap.mm
Tests/WebCore/cocoa/ShareableSpatialImageTests.mm
Tests/WebCore/cocoa/SharedBuffer.mm
Tests/WebCore/cocoa/SharedVideoFrame.mm
Tests/WebCore/cocoa/TestGraphicsContextGLCocoa.mm
Tests/WebCore/cocoa/TestUTIRegistry.cpp
Tests/WebCore/cocoa/TestUTIUtilities.cpp
Tests/WebCore/cocoa/WebCoreDecompressionSessionTests.mm
Tests/WebCore/cocoa/WebCoreNSURLSession.mm
Tests/WebCore/cocoa/XMLParsing.mm
)
list(APPEND TestWebCore_LIBRARIES
${QUARTZCORE_LIBRARY}
)
# TestWebKitLegacy
list(APPEND TestWebKitLegacy_SOURCES
Helpers/cocoa/TestNSBundleExtras.m
Tests/WebKitLegacy/cocoa/WebPreferencesTest.mm
Tests/WebKitLegacy/mac/AccessingPastedImage.mm
Tests/WebKitLegacy/mac/ClosingWebView.mm
Tests/WebKitLegacy/mac/CustomProtocolsInvalidScheme.mm
Tests/WebKitLegacy/mac/CustomProtocolsTest.mm
Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm
Tests/WebKitLegacy/mac/DownloadThread.mm
Tests/WebKitLegacy/mac/EarlyKVOCrash.mm
Tests/WebKitLegacy/mac/EmbeddedPrintPagination.mm
Tests/WebKitLegacy/mac/PDFEmbeddedPrintScript.mm
Tests/WebKitLegacy/mac/PreventImageLoadWithAutoResizing.mm
Tests/WebKitLegacy/mac/URLExtras.mm
Tests/WebKitLegacy/mac/UserContentTest.mm
Tests/WebKitLegacy/mac/WKBrowsingContextLoadDelegateTest.mm
)
list(APPEND TestWebKitLegacy_LIBRARIES
WebKit
${CARBON_LIBRARY}
)
# TestWebKit
set(TestWebKit_DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources/TestWebKit")
list(APPEND TestWebKit_UNIFIED_SOURCE_LIST_FILES
"SourcesCocoa.txt"
"SourcesMac.txt"
)
# Test files that reference ObjC classes from Swift-only helpers or private
# frameworks unavailable in the CMake build
set(TestWebKit_UNIFIED_SOURCE_EXCLUDES
"DrawingToPDF\\.mm"
"PDFSnapshot\\.mm"
"SOAuthorizationTests\\.mm"
"UnifiedPDFTests\\.mm"
"WKWebViewPrintFormatter\\.mm"
"WritingTools\\.mm"
)
# Files compiled outside unified sources (Xcode membershipExceptions).
list(APPEND TestWebKit_SOURCES
${TOOLS_DIR}/TestRunnerShared/mac/SyntheticNSEvent.mm
Helpers/Counters.cpp
Helpers/DeprecatedGlobalValues.cpp
Helpers/GraphicsTestUtilities.cpp
Helpers/TestNotificationProvider.cpp
Helpers/WebCoreTestUtilities.cpp
Helpers/cocoa/HTTPServer.mm
Helpers/cocoa/TestCocoaImageAndCocoaColor.mm
Helpers/cocoa/TestElementFullscreenDelegate.mm
Helpers/cocoa/TestNSBundleExtras.m
Helpers/cocoa/UtilitiesCocoa.mm
Helpers/cocoa/WebExtensionUtilities.mm
Helpers/cocoa/WebTransportServer.mm
Helpers/mac/DragAndDropSimulatorMac.mm
Helpers/mac/JavaScriptTestMac.mm
Helpers/mac/NSFontPanelTesting.mm
Helpers/mac/OffscreenWindow.mm
Helpers/mac/PlatformUtilitiesMac.mm
Helpers/mac/PlatformWebViewMac.mm
Helpers/mac/SyntheticBackingScaleFactorWindow.m
Helpers/mac/TestBrowsingContextLoadDelegate.mm
Helpers/mac/TestDraggingInfo.mm
Helpers/mac/TestFilePromiseReceiver.mm
Helpers/mac/TestFontOptions.mm
Helpers/mac/TestInspectorBar.mm
Helpers/mac/VirtualGamepad.mm
Helpers/mac/WKWebViewForTestingImmediateActions.mm
Helpers/mac/WebKitAgnosticTest.mm
Helpers/mac/GamepadMappings/GoogleStadia.mm
Helpers/mac/GamepadMappings/LogitechF310.mm
Helpers/mac/GamepadMappings/LogitechF710.mm
Helpers/mac/GamepadMappings/MicrosoftXboxOne.mm
Helpers/mac/GamepadMappings/ShenzhenLongshengweiTechnologyGamepad.mm
Helpers/mac/GamepadMappings/SonyDualShock3.mm
Helpers/mac/GamepadMappings/SonyDualShock4.mm
Helpers/mac/GamepadMappings/SteelSeriesNimbus.mm
Helpers/mac/GamepadMappings/SunLightApplicationGenericNES.mm
Tests/TestWebKitAPIAdditionsHook.mm
Tests/Misc/TestRunnerTests.cpp
Tests/WebCore/ASN1Utilities.cpp
Tests/WebCore/CachedMatchFinder.cpp
Tests/WebCore/TestPlatformStrategies.cpp
Tests/WebCore/cocoa/ISOBMFFTrackInfoParserTests.cpp
Tests/WebCore/cocoa/PlatformScreenTests.mm
Tests/WebKit/DeviceIdHashSaltStorage.cpp
Tests/WebKit/WKPage/DidRemoveFrameFromHiearchyInPageCache.cpp
Tests/WebKit/WKPage/EnvironmentUtilitiesTest.cpp
Tests/WebKit/WKPage/MenuTypesForMouseEvents.cpp
Tests/WebKit/WKPage/ModalAlertsSPI.cpp
Tests/WebKit/WKPage/NavigationClientDefaultCrypto.cpp
Tests/WebKit/WKPage/RestoreSessionState.cpp
Tests/WebKit/WKPage/ShouldKeepCurrentBackForwardListItemInList.cpp
Tests/WebKit/WKPage/WKImageCreateCGImageCrash.cpp
Tests/WebKit/WKPage/WKPageIsPlayingAudio.cpp
Tests/WebKit/WKPage/WebArchive.cpp
Tests/WebKit/WKPage/cocoa/AccessibilityIncreaseContrast.mm
Tests/WebKit/WKPage/cocoa/AccessibilityReduceMotion.mm
Tests/WebKit/WKPage/cocoa/AccessibilityRemoteUIApp.mm
Tests/WebKit/WKPage/cocoa/AttributedSubstringForProposedRangeCAPI.mm
Tests/WebKit/WKPage/cocoa/Battery.mm
Tests/WebKit/WKPage/cocoa/ContextMenuDownload.mm
Tests/WebKit/WKPage/cocoa/ContextMenuImgWithVideo.mm
Tests/WebKit/WKPage/cocoa/CustomBundleObject.mm
Tests/WebKit/WKPage/cocoa/CustomBundleParameter.mm
Tests/WebKit/WKPage/cocoa/EditorCommands.mm
Tests/WebKit/WKPage/cocoa/EnableAccessibility.mm
Tests/WebKit/WKPage/cocoa/FetchLocalFile.mm
Tests/WebKit/WKPage/cocoa/FindMatches.mm
Tests/WebKit/WKPage/cocoa/FontRegistrySandboxCheck.mm
Tests/WebKit/WKPage/cocoa/ForceLightAppearanceInBundle.mm
Tests/WebKit/WKPage/cocoa/GetBackingScaleFactor.mm
Tests/WebKit/WKPage/cocoa/GetPIDAfterAbortedProcessLaunch.cpp
Tests/WebKit/WKPage/cocoa/InjectedBundleAppleEvent.cpp
Tests/WebKit/WKPage/cocoa/LogForwarding.mm
Tests/WebKit/WKPage/cocoa/MediaSessionCoordinatorTest.mm
Tests/WebKit/WKPage/cocoa/MobileAssetSandboxCheck.mm
Tests/WebKit/WKPage/cocoa/NetworkProcessCrashWithPendingConnection.mm
Tests/WebKit/WKPage/cocoa/OverrideAppleLanguagesPreference.mm
Tests/WebKit/WKPage/cocoa/PasteboardNotifications.mm
Tests/WebKit/WKPage/cocoa/PictureInPictureSupport.mm
Tests/WebKit/WKPage/cocoa/PreferenceChanges.mm
Tests/WebKit/WKPage/cocoa/ResponsivenessTimerCrash.mm
Tests/WebKit/WKPage/cocoa/RestoreStateAfterTermination.mm
Tests/WebKit/WKPage/cocoa/ScrollPinningBehaviors.mm
Tests/WebKit/WKPage/cocoa/SleepDisabler.mm
Tests/WebKit/WKPage/cocoa/SyscallUnixSandboxCheck.mm
Tests/WebKit/WKPage/cocoa/SystemBeep.mm
Tests/WebKit/WKPage/cocoa/WeakObjCPtr.mm
Tests/WebKit/WKPage/cocoa/XPCEndpoint.mm
Tests/WebKit/WKPage/mac/CustomProtocolsSyncXHRTest.mm
Tests/WebKit/WKPage/mac/DeferredViewInWindowStateChange.mm
Tests/WebKit/WKPage/mac/WKThumbnailView.mm
Tests/WebKit/WKWebView/AnimationControl.mm
Tests/WebKit/WKWebView/FullscreenLifecycle.mm
Tests/WebKit/WKWebView/GetUserMediaNavigation.mm
Tests/WebKit/WKWebView/InjectedBundleHitTest.mm
Tests/WebKit/WKWebView/InstanceMethodSwizzler.mm
Tests/WebKit/WKWebView/MSEIsTypeSupportedCaching.mm
Tests/WebKit/WKWebView/MediaStreamTrackDetached.mm
Tests/WebKit/WKWebView/MediaStreamingActivitySuspended.mm
Tests/WebKit/WKWebView/NoHistoryItemScrollToFragment.mm
Tests/WebKit/WKWebView/NowPlayingMetadataObserver.mm
Tests/WebKit/WKWebView/OrthogonalFlowAvailableSize.mm
Tests/WebKit/WKWebView/ParentalControlsContentFilteringTests.mm
Tests/WebKit/WKWebView/SmartLists.mm
Tests/WebKit/WKWebView/SpatialAudioExperience.mm
Tests/WebKit/WKWebView/WKBackForwardListTests.mm
Tests/WebKit/WKWebView/WKWebExtensionAPILocalization.mm
Tests/WebKit/WKWebView/WKWebViewLogging.mm
Tests/WebKit/WKWebView/WKWebViewSpatialTrackingLabels.mm
Tests/WebKit/WKWebView/WebRTC.mm
Tests/WebKit/WKWebView/mac/AttributedSubstringForProposedRange.mm
Tests/WebKit/WKWebView/mac/GrammarMarkerPrecedence.mm
Tests/WebKit/WKWebView/mac/NSRefreshControllerTests.mm
Tests/WebKit/WKWebView/mac/RunningBoardManagement.mm
Tests/WebKit/WKWebView/mac/WordBoundaryTypingAttributes.mm
)
list(APPEND TestWebKit_PRIVATE_INCLUDE_DIRECTORIES
${ICU_INCLUDE_DIRS}
${WTF_FRAMEWORK_HEADERS_DIR}
${bmalloc_FRAMEWORK_HEADERS_DIR}
${WebKit_FRAMEWORK_HEADERS_DIR}
${WebKitLegacy_FRAMEWORK_HEADERS_DIR}
${TOOLS_DIR}/TestRunnerShared/cocoa
${TOOLS_DIR}/TestRunnerShared/mac
${TOOLS_DIR}/TestRunnerShared/spi
${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}/WebCoreTestSupport
${TESTWEBKITAPI_DIR}/Helpers
${TESTWEBKITAPI_DIR}/Helpers/cocoa
${TESTWEBKITAPI_DIR}/Helpers/mac
${TESTWEBKITAPI_DIR}/Tests/WebCore
${TESTWEBKITAPI_DIR}/Tests/WebCore/cocoa
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ios
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/mac
${CMAKE_SOURCE_DIR}/Source/ThirdParty/libwebrtc/Source
${CMAKE_SOURCE_DIR}/Source/ThirdParty/libwebrtc/Source/webrtc
${CMAKE_SOURCE_DIR}/Source/ThirdParty/libwebrtc/Source/third_party/abseil-cpp
${WEBKIT_DIR}/Platform/spi/Cocoa
${WEBKIT_DIR}/Platform/IPC
${WEBKIT_DIR}/Platform/IPC/cocoa
${WEBKIT_DIR}/Shared
${WEBKIT_DIR}/Shared/Cocoa
${WEBKIT_DIR}/UIProcess
${WebKit_DERIVED_SOURCES_DIR}
${WebKit_DERIVED_SOURCES_DIR}/IPC
${WEBKIT_DIR}/Platform/cocoa
)
list(APPEND TestWebKit_LIBRARIES
"-framework AuthenticationServices"
"-framework HID"
"-framework LocalAuthentication"
"-framework Network"
"-framework QuartzCore"
"-framework Reveal"
"-framework UniformTypeIdentifiers"
JavaScriptCore
WebCoreTestSupport
WebKitLegacy
${CARBON_LIBRARY}
)
set_source_files_properties(
Helpers/cocoa/WebExtensionUtilities.mm
Tests/WebKit/WKWebView/WKWebExtensionAPILocalization.mm
PROPERTIES
COMPILE_FLAGS "-fobjc-arc -include ${CMAKE_CURRENT_SOURCE_DIR}/Helpers/TestWebKitAPIPrefix.h"
SKIP_PRECOMPILE_HEADERS ON)
set_source_files_properties(
Helpers/cocoa/TestNSBundleExtras.m
Helpers/mac/SyntheticBackingScaleFactorWindow.m
PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
# NSWindow.autodisplay is deprecated since 10.14 but still used in OffscreenWindow.mm.
WEBKIT_ADD_TARGET_CXX_FLAGS(TestWebKit -Wno-deprecated-declarations)
# run-api-tests expects the binary to be named TestWebKitAPI.
set_target_properties(TestWebKit PROPERTIES OUTPUT_NAME TestWebKitAPI)
# Embed the Info.plist in the __TEXT,__info_plist section. PRODUCT_NAME and
# PRODUCT_BUNDLE_IDENTIFIER only exist for the configure_file substitution.
set(PRODUCT_NAME TestWebKitAPI)
set(PRODUCT_BUNDLE_IDENTIFIER com.apple.WebKit.TestWebKitAPI)
configure_file("${TESTWEBKITAPI_DIR}/Info.plist"
"${CMAKE_CURRENT_BINARY_DIR}/TestWebKitAPI-Info.plist")
unset(PRODUCT_NAME)
unset(PRODUCT_BUNDLE_IDENTIFIER)
target_link_options(TestWebKit PRIVATE
"LINKER:-sectcreate,__TEXT,__info_plist,${CMAKE_CURRENT_BINARY_DIR}/TestWebKitAPI-Info.plist")
set_property(TARGET TestWebKit APPEND PROPERTY LINK_DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/TestWebKitAPI-Info.plist")
webkit_generate_entitlements(TestWebKit
USING ${TESTWEBKITAPI_DIR}/Scripts/process-entitlements.sh
BUNDLE_IDENTIFIER com.apple.WebKit.TestWebKitAPI)
# TestIPC
file(GLOB _ipc_core_sources
"${WEBKIT_DIR}/Platform/IPC/ArgumentCoders.cpp"
"${WEBKIT_DIR}/Platform/IPC/Connection.cpp"
"${WEBKIT_DIR}/Platform/IPC/Decoder.cpp"
"${WEBKIT_DIR}/Platform/IPC/Encoder.cpp"
"${WEBKIT_DIR}/Platform/IPC/IPCUtilities.cpp"
"${WEBKIT_DIR}/Platform/IPC/MessageLog.cpp"
"${WEBKIT_DIR}/Platform/IPC/MessageReceiveQueueMap.cpp"
"${WEBKIT_DIR}/Platform/IPC/MessageReceiverMap.cpp"
"${WEBKIT_DIR}/Platform/IPC/MessageSender.cpp"
"${WEBKIT_DIR}/Platform/IPC/SharedBufferReference.cpp"
"${WEBKIT_DIR}/Platform/IPC/SharedFileHandle.cpp"
"${WEBKIT_DIR}/Platform/IPC/StreamClientConnection.cpp"
"${WEBKIT_DIR}/Platform/IPC/StreamConnectionBuffer.cpp"
"${WEBKIT_DIR}/Platform/IPC/StreamConnectionWorkQueue.cpp"
"${WEBKIT_DIR}/Platform/IPC/StreamServerConnection.cpp"
"${WEBKIT_DIR}/Platform/IPC/TransferString.cpp"
"${WEBKIT_DIR}/Platform/IPC/cocoa/ConnectionCocoa.mm"
"${WEBKIT_DIR}/Platform/IPC/cocoa/MachMessage.cpp"
"${WEBKIT_DIR}/Platform/IPC/cocoa/SharedFileHandleCocoa.cpp"
"${WEBKIT_DIR}/Platform/IPC/cocoa/TransferStringCocoa.mm"
"${WEBKIT_DIR}/Platform/IPC/darwin/IPCEventDarwin.cpp"
"${WEBKIT_DIR}/Platform/IPC/darwin/IPCSemaphoreDarwin.cpp"
"${WEBKIT_DIR}/Platform/IPC/darwin/MachPort.mm"
)
list(APPEND TestIPC_SOURCES
Helpers/cocoa/UtilitiesCocoa.mm
Tests/IPC/IPCSerialization.mm
Tests/IPC/TransferStringObjCTests.mm
${_ipc_core_sources}
${WEBKIT_DIR}/Platform/EditingRangeClamping.cpp
${WEBKIT_DIR}/Platform/Logging.cpp
${WEBKIT_DIR}/Platform/mac/MachUtilities.cpp
${WEBKIT_DIR}/Shared/WebFoundTextRange.cpp
${WebKit_DERIVED_SOURCES_DIR}/MessageNames.cpp
)
unset(_ipc_core_sources)
list(APPEND TestIPC_PRIVATE_INCLUDE_DIRECTORIES
${ICU_INCLUDE_DIRS}
${WTF_FRAMEWORK_HEADERS_DIR}
${bmalloc_FRAMEWORK_HEADERS_DIR}
${WEBKIT_DIR}/Platform/cocoa
${WEBKIT_DIR}/Platform/IPC/darwin
${WEBKIT_DIR}/Platform/IPC/cocoa
${WEBKIT_DIR}/Shared/Cocoa
${WEBKIT_DIR}/Shared/cf
${WEBKIT_DIR}
${WEBKIT_DIR}/Platform
${WEBKIT_DIR}/Platform/IPC
${WEBKIT_DIR}/Platform/mac
${WEBKIT_DIR}/Shared
${WebKit_DERIVED_SOURCES_DIR}
${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
)
list(APPEND TestIPC_LIBRARIES
${CARBON_LIBRARY}
"-framework CoreServices"
"-framework CoreVideo"
"-framework IOSurface"
"-framework Security"
"-framework UniformTypeIdentifiers"
JavaScriptCore
)
WEBKIT_ADD_TARGET_CXX_FLAGS(TestIPC -Wno-deprecated-declarations)
# TestWGSL
if (ENABLE_WEBGPU)
list(APPEND TestWGSL_SOURCES
Tests/WGSL/MetalCompilationTests.mm
Tests/WGSL/TypeCheckingTests.mm
)
list(APPEND TestWGSL_PRIVATE_INCLUDE_DIRECTORIES
${WTF_FRAMEWORK_HEADERS_DIR}
${bmalloc_FRAMEWORK_HEADERS_DIR}
)
list(APPEND TestWGSL_LIBRARIES
${CARBON_LIBRARY}
"-framework Metal"
)
endif ()
# Common framework header directories needed by config.h (<wtf/Platform.h>, <WebKit/WebKit2_C.h>, etc.)
set(_testapi_framework_headers
${WTF_FRAMEWORK_HEADERS_DIR}
${bmalloc_FRAMEWORK_HEADERS_DIR}
${PAL_FRAMEWORK_HEADERS_DIR}
)
if (NOT USE_FRAMEWORK_BUNDLES)
list(APPEND _testapi_framework_headers
${JavaScriptCore_FRAMEWORK_HEADERS_DIR}
${JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
${WebKit_FRAMEWORK_HEADERS_DIR}
${WebKitLegacy_FRAMEWORK_HEADERS_DIR}
)
endif ()
foreach (_dir IN LISTS _testapi_framework_headers)
list(APPEND TESTWEBKITAPI_SWIFT_FLAGS "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -I${_dir}>")
endforeach ()
# TestWebKitAPIBase needs framework headers for config.h includes.
target_include_directories(TestWebKitAPIBase PRIVATE ${_testapi_framework_headers})
# TestWebKitAPIInjectedBundle -- .bundle for NSBundle loading on Mac.
target_sources(TestWebKitAPIInjectedBundle PRIVATE
${TESTWEBKITAPI_DIR}/Helpers/cocoa/TestNSBundleExtras.m
${TESTWEBKITAPI_DIR}/Helpers/cocoa/UtilitiesCocoa.mm
${TESTWEBKITAPI_DIR}/InjectedBundle/mac/InjectedBundleControllerMac.mm
${TESTWEBKITAPI_DIR}/Helpers/mac/PlatformUtilitiesMac.mm
# CustomBundleObject.mm is also in TestWebKit; both targets compile it.
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/cocoa/CustomBundleObject.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/cocoa/CustomBundleParameter_Bundle.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/cocoa/ForceLightAppearanceInBundle_Bundle.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/cocoa/GetBackingScaleFactor_Bundle.mm
${TESTWEBKITAPI_DIR}/Tests/InjectInternals_Bundle.cpp
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/PasteboardNotifications_Bundle.cpp
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKPage/cocoa/InjectedBundleAppleEvent_Bundle.cpp
${TESTWEBKITAPI_DIR}/Tests/WebKitLegacy/mac/CustomProtocolsInvalidScheme_Bundle.cpp
${TESTWEBKITAPI_DIR}/Tests/WebKitLegacy/mac/PreventImageLoadWithAutoResizing_Bundle.cpp
)
target_include_directories(TestWebKitAPIInjectedBundle PRIVATE
${_testapi_framework_headers}
${TESTWEBKITAPI_DIR}/InjectedBundle
)
# InjectedBundleTestWebKitAPI should use its Info.plist rather than the CMake default.
# EXECUTABLE_NAME and PRODUCT_BUNDLE_IDENTIFIER only exist for the configure_file substitution.
set(EXECUTABLE_NAME InjectedBundleTestWebKitAPI)
set(PRODUCT_BUNDLE_IDENTIFIER com.apple.InjectedBundleTestWebKitAPI)
configure_file("${TESTWEBKITAPI_DIR}/InjectedBundle/InjectedBundle-Info.plist"
"${CMAKE_CURRENT_BINARY_DIR}/InjectedBundle-Info.plist")
unset(EXECUTABLE_NAME)
unset(PRODUCT_BUNDLE_IDENTIFIER)
set_target_properties(TestWebKitAPIInjectedBundle PROPERTIES
BUNDLE TRUE
BUNDLE_EXTENSION bundle
OUTPUT_NAME InjectedBundleTestWebKitAPI
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/InjectedBundle-Info.plist"
)
# The InjectedBundle is loaded into a WebKit process that already has WTF.
# WebCoreTestSupport (static) references WTF symbols that the bundle's own
# .o files don't use directly, so the linker can't resolve them at link time.
# Use -undefined dynamic_lookup since the hosting process provides them.
target_link_options(TestWebKitAPIInjectedBundle PRIVATE "LINKER:-undefined,dynamic_lookup")
target_link_libraries(TestWebKitAPIInjectedBundle PRIVATE
JavaScriptCore
WebCoreTestSupport
WebKit
"-framework Cocoa"
"-framework Foundation"
)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
# TestWebKitAPIPlugIn.wkbundle -- modern Cocoa WKWebProcessPlugIn bundle loaded via
# [_WKProcessPoolConfiguration setInjectedBundleURL:] in Util::testPlugInBundleURL().
# This is a separate product from InjectedBundleTestWebKitAPI.bundle above,
# which implements the legacy C-API injected bundle.
add_library(TestWebKitAPIWebProcessPlugIn MODULE
# Matches the Xcode WebProcessPlugIn target's Helpers membership. Without
# PlatformUtilitiesCocoa.mm's Util::TestPlugInClassNameParameter the bundle
# still links, but fails to dlopen outside the TestWebKitAPI binary. It is in
# SourcesCocoa.txt, hence the #include shim below.
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-PlatformUtilitiesCocoa.mm
${TESTWEBKITAPI_DIR}/Helpers/cocoa/UtilitiesCocoa.mm
${TESTWEBKITAPI_DIR}/InjectedBundle/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm
${TESTWEBKITAPI_DIR}/InjectedBundle/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/AccessibilityTestPlugin.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/AdditionalReadAccessAllowedURLsPlugin.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/AppPrivacyReportPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BasicProposedCredentialPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleCSSStyleDeclarationHandlePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleEditingDelegatePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleFormDelegatePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleParametersPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleRangeHandlePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/BundleRetainPagePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/CancelFontSubresourcePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ClearWrappersNavigatePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ContentFilteringPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ContentWorldPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/DisableSpellcheckPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/GetComputedStyleAfterIframeRemovalPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/InjectedBundleHitTestPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/PageOverlayPlugin.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ParserYieldTokenPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/RemoteObjectRegistryPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/RenderedImageWithOptionsPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/RenderingProgressPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/SchemeChangingPlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/ServiceWorkerPagePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/SkipDecidePolicyForResponsePlugIn.mm
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/UserContentWorldPlugIn.mm
# Also in TestWebKit via SourcesCocoa.txt; WEBKIT_COMPUTE_SOURCES marks the
# originals HEADER_FILE_ONLY, so build them here via #include shims.
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-AutoFillAvailable.mm
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-ClickAutoFillButton.mm
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-InjectedBundleNodeHandleIsSelectElement.mm
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-InjectedBundleNodeHandleIsTextField.mm
${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-TestAwakener.mm
)
foreach (_dual_src
AutoFillAvailable
ClickAutoFillButton
InjectedBundleNodeHandleIsSelectElement
InjectedBundleNodeHandleIsTextField
TestAwakener
)
file(CONFIGURE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-${_dual_src}.mm"
CONTENT "#include \"${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView/${_dual_src}.mm\"\n"
@ONLY)
endforeach ()
file(CONFIGURE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-PlatformUtilitiesCocoa.mm"
CONTENT "#include \"${TESTWEBKITAPI_DIR}/Helpers/cocoa/PlatformUtilitiesCocoa.mm\"\n"
@ONLY)
target_include_directories(TestWebKitAPIWebProcessPlugIn PRIVATE
${CMAKE_BINARY_DIR}
${_testapi_framework_headers}
${TESTWEBKITAPI_DIR}
${TESTWEBKITAPI_DIR}/InjectedBundle/cocoa/WebProcessPlugIn
${TESTWEBKITAPI_DIR}/Tests/WebKit/WKWebView
${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
)
# Some pulgins still call -[WKWebProcessPlugInBrowserContextController mainFrame];
target_compile_options(TestWebKitAPIWebProcessPlugIn PRIVATE -Wno-deprecated-declarations)
# PlatformUtilitiesCocoa.mm uses the WebKit C API, which config.h only pulls in
# under BUILDING_TestWebKit, as the sibling test targets also define.
target_compile_definitions(TestWebKitAPIWebProcessPlugIn PRIVATE BUILDING_TestWebKit)
# configure_file substitutes ${EXECUTABLE_NAME}/${PRODUCT_NAME}/
# ${PRODUCT_BUNDLE_IDENTIFIER} in the Info.plist shared with the Xcode build.
set(EXECUTABLE_NAME TestWebKitAPIPlugIn)
set(PRODUCT_NAME TestWebKitAPIPlugIn)
set(PRODUCT_BUNDLE_IDENTIFIER com.apple.TestWebKitAPIPlugIn)
configure_file(
"${TESTWEBKITAPI_DIR}/InjectedBundle/cocoa/WebProcessPlugIn/Info.plist"
"${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-Info.plist"
)
unset(EXECUTABLE_NAME)
unset(PRODUCT_NAME)
unset(PRODUCT_BUNDLE_IDENTIFIER)
set_target_properties(TestWebKitAPIWebProcessPlugIn PROPERTIES
BUNDLE TRUE
BUNDLE_EXTENSION wkbundle
OUTPUT_NAME TestWebKitAPIPlugIn
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/WebProcessPlugIn-Info.plist"
)
# Same rationale as TestWebKitAPIInjectedBundle: WebCoreTestSupport references
# WTF symbols that the hosting WebContent process provides.
target_link_options(TestWebKitAPIWebProcessPlugIn PRIVATE "LINKER:-undefined,dynamic_lookup")
target_link_libraries(TestWebKitAPIWebProcessPlugIn PRIVATE
JavaScriptCore
WebCoreTestSupport
WebKit
WebKit::gtest
"-framework Cocoa"
"-framework Foundation"
)
# TestWebKit loads this bundle via NSBundle lookup at runtime, so it must be
# built and staged next to the TestWebKitAPI executable.
add_dependencies(TestWebKit TestWebKitAPIWebProcessPlugIn)
# TestWebKitAPIResources.bundle -- test resource files loaded via
# [NSBundle.test_resourcesBundle URLForResource:withExtension:].
# For a non-.app executable, NSBundle.mainBundle is the directory containing
# the binary, so the .bundle must sit next to the test executables.
# Directory structure under Resources/cocoa/ is preserved -- some tests
# (e.g. WKWebExtension.mm) load entire subdirectories as nested bundles via
# URLForResource:withExtension:@"", which requires web-extension/, *.appex/,
# and *.mlmodelc/ to retain their layout.
set(_resources_bundle_dir "${TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY}/TestWebKitAPIResources.bundle")
set(_resources_dst_files)
function(_testwebkitapi_stage_resources source_root skip_pattern)
file(GLOB_RECURSE _entries RELATIVE "${source_root}" "${source_root}/*")
foreach (_rel IN LISTS _entries)
if (skip_pattern AND _rel MATCHES "${skip_pattern}")
continue ()
endif ()
set(_src "${source_root}/${_rel}")
set(_dst "${_resources_bundle_dir}/${_rel}")
set(_walk "${_dst}")
while (NOT _walk STREQUAL "${_resources_bundle_dir}" AND NOT _walk STREQUAL "/")
get_filename_component(_walk "${_walk}" DIRECTORY)
if (IS_SYMLINK "${_walk}")
file(REMOVE "${_walk}")
endif ()
endwhile ()
get_filename_component(_dst_dir "${_dst}" DIRECTORY)
file(MAKE_DIRECTORY "${_dst_dir}")
add_custom_command(OUTPUT "${_dst}"
COMMAND ${CMAKE_COMMAND} -E copy "${_src}" "${_dst}"
MAIN_DEPENDENCY "${_src}"
VERBATIM
)
list(APPEND _resources_dst_files "${_dst}")
endforeach ()
set(_resources_dst_files "${_resources_dst_files}" PARENT_SCOPE)
endfunction()
# Top-level Resources/ files go to the bundle root. Skip platform subdirs
# handled separately (cocoa/) or only built for other ports (glib/).
_testwebkitapi_stage_resources("${TESTWEBKITAPI_DIR}/Resources" "^(cocoa|glib)/")
# cocoa/ files (and nested subdirs like web-extension/, *.appex/, *.mlmodelc/)
# are staged with the cocoa/ prefix stripped so paths match what tests pass to
# URLForResource:.
_testwebkitapi_stage_resources("${TESTWEBKITAPI_DIR}/Resources/cocoa" "")
add_custom_target(TestWebKitAPIResources ALL DEPENDS ${_resources_dst_files})
# Ensure all test targets depend on the resources bundle.
foreach (_test_target TestWTF TestJavaScriptCore TestWebCore TestWebKitLegacy TestWebKit TestIPC TestWGSL)
if (TARGET ${_test_target})
add_dependencies(${_test_target} TestWebKitAPIResources)
endif ()
endforeach ()
elseif (WEBKIT_SDK_IS_IOS_FAMILY)
set(TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(_test_main_SOURCES generic/main.cpp)
# TestWTF
list(APPEND TestWTF_SOURCES
${_test_main_SOURCES}
Helpers/cocoa/UtilitiesCocoa.mm
)
list(APPEND TestWTF_PRIVATE_COMPILE_OPTIONS -Wno-error)
# TestJavaScriptCore
list(APPEND TestJavaScriptCore_SOURCES
${_test_main_SOURCES}
)
# TestWebCore
list(APPEND TestWebCore_SOURCES
${_test_main_SOURCES}
Helpers/cocoa/UtilitiesCocoa.mm
)
# TestWebKitLegacy
list(APPEND TestWebKitLegacy_SOURCES
${_test_main_SOURCES}
)
# TestWebKit
# generic/main.cpp is also in the lists above; the merge deduplicates.
list(APPEND TestWebKit_SOURCES
${_test_main_SOURCES}
Helpers/cocoa/UtilitiesCocoa.mm
)
target_link_options(TestWebKit PRIVATE "LINKER:-undefined,dynamic_lookup")
list(APPEND TestWebKit_LIBRARIES
"-framework QuartzCore"
"-framework UniformTypeIdentifiers"
JavaScriptCore
WebCoreTestSupport
WebKitLegacy
)
# TestIPC
list(APPEND TestIPC_SOURCES
${_test_main_SOURCES}
Helpers/cocoa/UtilitiesCocoa.mm
)
list(APPEND TestIPC_PRIVATE_INCLUDE_DIRECTORIES
${WTF_FRAMEWORK_HEADERS_DIR}
${bmalloc_FRAMEWORK_HEADERS_DIR}
${WEBKIT_DIR}/Platform/cocoa
${WEBKIT_DIR}/Platform/IPC/darwin
${WEBKIT_DIR}/Platform/IPC/cocoa
${WEBKIT_DIR}/Shared/Cocoa
${WEBKIT_DIR}/Shared/cf
)
list(APPEND TestIPC_LIBRARIES
"-framework CoreVideo"
"-framework Foundation"
"-framework IOSurface"
"-framework UniformTypeIdentifiers"
JavaScriptCore
)
WEBKIT_ADD_TARGET_CXX_FLAGS(TestIPC -Wno-deprecated-declarations)
target_link_options(TestIPC PRIVATE "LINKER:-undefined,dynamic_lookup" "LINKER:-not_for_dyld_shared_cache")
# InjectedBundle configuration.
set_target_properties(TestWebKitAPIInjectedBundle PROPERTIES
BUNDLE TRUE
BUNDLE_EXTENSION bundle
OUTPUT_NAME InjectedBundleTestWebKitAPI
)
target_include_directories(TestWebKitAPIInjectedBundle PRIVATE
${WebKit_PRIVATE_FRAMEWORK_HEADERS_DIR}
${TESTWEBKITAPI_DIR}/InjectedBundle
)
target_link_options(TestWebKitAPIInjectedBundle PRIVATE "LINKER:-undefined,dynamic_lookup" "LINKER:-not_for_dyld_shared_cache")
target_link_libraries(TestWebKitAPIInjectedBundle PRIVATE
JavaScriptCore
WebCoreTestSupport
WebKit
"-framework Foundation"
)
# Bundle ID required for extension scoping.
set_target_properties(TestWebKit PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_GUI_IDENTIFIER "org.webkit.TestWebKitAPI"
MACOSX_BUNDLE_BUNDLE_NAME "TestWebKitAPI"
)
set(_twkapi_bundle_id "org.webkit.TestWebKitAPI")
if (WEBKIT_SDK_TARGET_OS STREQUAL "ios")
add_dependencies(TestWebKit WebContentExtension NetworkingExtension)
if (ENABLE_GPU_PROCESS)
add_dependencies(TestWebKit GPUExtension)
endif ()
WEBKIT_EMBED_EXTENSION(TestWebKit WebContentExtension ${_twkapi_bundle_id}
CHANGE_EXTENSION_POINT ADD_ATS)
WEBKIT_EMBED_EXTENSION(TestWebKit NetworkingExtension ${_twkapi_bundle_id}
ADD_ATS)
if (ENABLE_GPU_PROCESS)
WEBKIT_EMBED_EXTENSION(TestWebKit GPUExtension ${_twkapi_bundle_id})
endif ()
endif ()
set_target_properties(TestWebKit PROPERTIES LINKER_LANGUAGE CXX)
set_target_properties(TestWTF PROPERTIES LINKER_LANGUAGE CXX)
set_target_properties(TestWebKitAPIInjectedBundle PROPERTIES LINKER_LANGUAGE CXX)
endif ()