blob: 855615c378a1c402408956a5f28a12f9413c761c [file] [log] [blame]
# Copyright (C) 2012 Google Inc. All rights reserved.
# Copyright (C) 2023 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# A module to contain all the enable/disable feature option code.
#
# For CMake ports, this module only affects development builds. The
# settings in this file have ZERO EFFECT for end users. Use
# WebKitFeatures.cmake to change settings for users. Guidelines:
#
# * A feature enabled here but not WebKitFeatures.cmake is EXPERIMENTAL.
# * A feature enabled in WebKitFeatures.cmake but not here is a BUG.
package webkitperl::FeatureList;
use strict;
use warnings;
use FindBin;
use lib $FindBin::Bin;
BEGIN {
use Exporter ();
our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(&getFeatureOptionList);
%EXPORT_TAGS = ( );
@EXPORT_OK = ();
}
my (
$accessibilityIsolatedTreeSupport,
$applePaySupport,
$applicationManifestSupport,
$asyncScrollingSupport,
$attachmentElementSupport,
$autocapitalizeSupport,
$avfCaptionsSupport,
$avifSupport,
$bubblewrapSandboxSupport,
$cachePartitioningSupport,
$cloopSupport,
$contentExtensionsSupport,
$contentFilteringSupport,
$contextMenusSupport,
$cssDeviceAdaptationSupport,
$cssImageResolutionSupport,
$cssScrollSnapSupport,
$cssTrailingWordSupport,
$cursorVisibilitySupport,
$darkModeCSSSupport,
$datacueValueSupport,
$deviceOrientationSupport,
$dfgJITSupport,
$dragSupportSupport,
$encryptedMediaSupport,
$fatalWarnings,
$ftlJITSupport,
$ftpDirSupport,
$fullscreenAPISupport,
$gamepadSupport,
$geolocationSupport,
$gpuProcessSupport,
$gstreamerGLSupport,
$inspectorAlternateDispatchersSupport,
$inspectorTelemetrySupport,
$iosGestureEventsSupport,
$iosTouchEventsSupport,
$jitSupport,
$jpegXLSupport,
$llvmProfileGenerationSupport,
$legacyCustomProtocolManagerSupport,
$legacyEncryptedMediaSupport,
$macGestureEventsSupport,
$mathmlSupport,
$mediaCaptureSupport,
$mediaSourceSupport,
$mediaStatisticsSupport,
$mediaStreamSupport,
$memorySamplerSupport,
$meterElementSupport,
$mhtmlSupport,
$lcmsSupport,
$mouseCursorScaleSupport,
$navigatorStandaloneSupport,
$notificationsSupport,
$offscreenCanvasSupport,
$offscreenCanvasInWorkersSupport,
$thunderSupport,
$orientationEventsSupport,
$overflowScrollingTouchSupport,
$paymentRequestSupport,
$pdfJS,
$pdfkitPluginSupport,
$pictureInPictureAPISupport,
$pointerLockSupport,
$quotaSupport,
$remoteInspectorSupport,
$resourceUsageSupport,
$samplingProfilerSupport,
$sandboxExtensionsSupport,
$serverPreconnectSupport,
$serviceControlsSupport,
$shareableResourceSupport,
$skiaSupport,
$smoothScrollingSupport,
$speechSynthesisSupport,
$spellcheckSupport,
$svgFontsSupport,
$isoMallocSupport,
$systemMallocSupport,
$telephoneNumberDetectionSupport,
$textAutosizingSupport,
$touchEventsSupport,
$unifiedBuildsSupport,
$userMessageHandlersSupport,
$userselectAllSupport,
$variationFontsSupport,
$videoPresentationModeSupport,
$videoSupport,
$videoTrackSupport,
$videoUsesElementFullscreenSupport,
$webAPIStatisticsSupport,
$webAssemblySupport,
$webAudioSupport,
$webAuthNSupport,
$webCodecsSupport,
$wkWebExtensionsSupport,
$webRTCSupport,
$webdriverKeyboardInteractionsSupport,
$webdriverMouseInteractionsSupport,
$webdriverSupport,
$webdriverTouchInteractionsSupport,
$webdriverWheelInteractionsSupport,
$webglSupport,
$webGpuSwift,
$webXRSupport,
$wirelessPlaybackTargetSupport,
$woff2Support,
$xsltSupport,
);
my @features = (
{ option => "fatal-warnings", desc => "Toggle warnings as errors (CMake only)",
define => "DEVELOPER_MODE_FATAL_WARNINGS", value => \$fatalWarnings },
{ option => "accessibility-isolated-tree", desc => "Toggle accessibility isolated tree support",
define => "ENABLE_ACCESSIBILITY_ISOLATED_TREE", value => \$accessibilityIsolatedTreeSupport },
{ option => "apple-pay", desc => "Toggle Apply Pay support",
define => "ENABLE_APPLE_PAY", value => \$applePaySupport },
{ option => "application-manifest", desc => "Toggle Application Manifest support",
define => "ENABLE_APPLICATION_MANIFEST", value => \$applicationManifestSupport },
{ option => "async-scrolling", desc => "Enable asynchronous scrolling",
define => "ENABLE_ASYNC_SCROLLING", value => \$asyncScrollingSupport },
{ option => "attachment-element", desc => "Toggle Attachment Element support",
define => "ENABLE_ATTACHMENT_ELEMENT", value => \$attachmentElementSupport },
{ option => "autocapitalize", desc => "Toggle autocapitalize support",
define => "ENABLE_AUTOCAPITALIZE", value => \$autocapitalizeSupport },
{ option => "avf-captions", desc => "Toggle AVFoundation caption support",
define => "ENABLE_AVF_CAPTIONS", value => \$avfCaptionsSupport },
{ option => "bubblewrap-sandbox", desc => "Toggle Bubblewrap sandboxing support",
define => "ENABLE_BUBBLEWRAP_SANDBOX", value => \$bubblewrapSandboxSupport },
{ option => "cache-partitioning", desc => "Toggle cache partitioning support",
define => "ENABLE_CACHE_PARTITIONING", value => \$cachePartitioningSupport },
{ option => "content-extensions", desc => "Toggle Content Extensions support",
define => "ENABLE_CONTENT_EXTENSIONS", value => \$contentExtensionsSupport },
{ option => "content-filtering", desc => "Toggle content filtering support",
define => "ENABLE_CONTENT_FILTERING", value => \$contentFilteringSupport },
{ option => "context-menus", desc => "Toggle Context Menu support",
define => "ENABLE_CONTEXT_MENUS", value => \$contextMenusSupport },
{ option => "cursor-visibility", desc => "Toggle cursor visibility support",
define => "ENABLE_CURSOR_VISIBILITY", value => \$cursorVisibilitySupport },
{ option => "cloop", desc => "Enable CLoop interpreter",
define => "ENABLE_C_LOOP", value => \$cloopSupport },
{ option => "dark-mode-css", desc => "Toggle Dark Mode CSS support",
define => "ENABLE_DARK_MODE_CSS", value => \$darkModeCSSSupport },
{ option => "datacue-value", desc => "Toggle datacue value support",
define => "ENABLE_DATACUE_VALUE", value => \$datacueValueSupport },
{ option => "device-orientation", desc => "Toggle Device Orientation support",
define => "ENABLE_DEVICE_ORIENTATION", value => \$deviceOrientationSupport },
{ option => "dfg-jit", desc => "Toggle data flow graph JIT tier",
define => "ENABLE_DFG_JIT", value => \$dfgJITSupport },
{ option => "drag-support", desc => "Toggle support of drag actions (including selection of text with mouse)",
define => "ENABLE_DRAG_SUPPORT", value => \$dragSupportSupport },
{ option => "encrypted-media", desc => "Toggle EME V3 support",
define => "ENABLE_ENCRYPTED_MEDIA", value => \$encryptedMediaSupport },
{ option => "ftl-jit", desc => "Toggle FTL JIT support",
define => "ENABLE_FTL_JIT", value => \$ftlJITSupport },
{ option => "ftpdir", desc => "Toggle FTP Directory support",
define => "ENABLE_FTPDIR", value => \$ftpDirSupport },
{ option => "fullscreen-api", desc => "Toggle Fullscreen API support",
define => "ENABLE_FULLSCREEN_API", value => \$fullscreenAPISupport },
{ option => "gamepad", desc => "Toggle Gamepad support",
define => "ENABLE_GAMEPAD", value => \$gamepadSupport },
{ option => "geolocation", desc => "Toggle Geolocation support",
define => "ENABLE_GEOLOCATION", value => \$geolocationSupport },
{ option => "gpu-process", desc => "Toggle GPU Process support",
define => "ENABLE_GPU_PROCESS", value => \$gpuProcessSupport },
{ option => "inspector-alternate-dispatchers", desc => "Toggle inspector alternate dispatchers support",
define => "ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS", value => \$inspectorAlternateDispatchersSupport },
{ option => "inspector-telemetry", desc => "Toggle inspector telemetry support",
define => "ENABLE_INSPECTOR_TELEMETRY", value => \$inspectorTelemetrySupport },
{ option => "ios-gesture-events", desc => "Toggle iOS gesture events support",
define => "ENABLE_IOS_GESTURE_EVENTS", value => \$iosGestureEventsSupport },
{ option => "ios-touch-events", desc => "Toggle iOS touch events support",
define => "ENABLE_IOS_TOUCH_EVENTS", value => \$iosTouchEventsSupport },
{ option => "jit", desc => "Toggle JustInTime JavaScript support",
define => "ENABLE_JIT", value => \$jitSupport },
{ option => "llvm-profile-generation", desc => "Include LLVM's instrumentation to generate profiles for PGO",
define => "ENABLE_LLVM_PROFILE_GENERATION", value => \$llvmProfileGenerationSupport },
{ option => "legacy-custom-protocol-manager", desc => "Toggle legacy protocol manager support",
define => "ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER", value => \$legacyCustomProtocolManagerSupport },
{ option => "legacy-encrypted-media", desc => "Toggle Legacy EME V2 support",
define => "ENABLE_LEGACY_ENCRYPTED_MEDIA", value => \$legacyEncryptedMediaSupport },
{ option => "mac-gesture-events", desc => "Toggle Mac gesture events support",
define => "ENABLE_MAC_GESTURE_EVENTS", value => \$macGestureEventsSupport },
{ option => "mathml", desc => "Toggle MathML support",
define => "ENABLE_MATHML", value => \$mathmlSupport },
{ option => "media-capture", desc => "Toggle Media Capture support",
define => "ENABLE_MEDIA_CAPTURE", value => \$mediaCaptureSupport },
{ option => "media-source", desc => "Toggle Media Source support",
define => "ENABLE_MEDIA_SOURCE", value => \$mediaSourceSupport },
{ option => "media-statistics", desc => "Toggle Media Statistics support",
define => "ENABLE_MEDIA_STATISTICS", value => \$mediaStatisticsSupport },
{ option => "media-stream", desc => "Toggle Media Stream support",
define => "ENABLE_MEDIA_STREAM", value => \$mediaStreamSupport },
{ option => "memory-sampler", desc => "Toggle Memory Sampler support",
define => "ENABLE_MEMORY_SAMPLER", value => \$memorySamplerSupport },
{ option => "mhtml", desc => "Toggle MHTML support",
define => "ENABLE_MHTML", value => \$mhtmlSupport },
{ option => "mouse-cursor-scale", desc => "Toggle Scaled mouse cursor support",
define => "ENABLE_MOUSE_CURSOR_SCALE", value => \$mouseCursorScaleSupport },
{ option => "navigator-standalone", desc => "Toogle standalone navigator support",
define => "ENABLE_NAVIGATOR_STANDALONE", value => \$navigatorStandaloneSupport },
{ option => "notifications", desc => "Toggle Notifications support",
define => "ENABLE_NOTIFICATIONS", value => \$notificationsSupport },
{ option => "offscreen-canvas", desc => "Toggle OffscreenCanvas support",
define => "ENABLE_OFFSCREEN_CANVAS", value => \$offscreenCanvasSupport },
{ option => "offscreen-canvas-in-workers", desc => "Toggle OffscreenCanvas in Workers support",
define => "ENABLE_OFFSCREEN_CANVAS_IN_WORKERS", value => \$offscreenCanvasInWorkersSupport },
{ option => "thunder", desc => "Toggle Thunder CDM support",
define => "ENABLE_THUNDER", value => \$thunderSupport },
{ option => "orientation-events", desc => "Toggle Orientation Events support",
define => "ENABLE_ORIENTATION_EVENTS", value => \$orientationEventsSupport },
{ option => "overflow-scrolling-touch", desc => "Toggle accelerated scrolling support",
define => "ENABLE_WEBKIT_OVERFLOW_SCROLLING_CSS_PROPERTY", value => \$overflowScrollingTouchSupport },
{ option => "payment-request", desc => "Toggle Payment Request support",
define => "ENABLE_PAYMENT_REQUEST", value => \$paymentRequestSupport },
{ option => "pdfjs", desc => "Toggle PDF.js integration",
define => "ENABLE_PDFJS", value => \$pdfJS },
{ option => "pdfkit-plugin", desc => "Toggle PDFKit plugin support",
define => "ENABLE_PDFKIT_PLUGIN", value => \$pdfkitPluginSupport },
{ option => "picture-in-picture-api", desc => "Toggle Picture-in-Picture API support",
define => "ENABLE_PICTURE_IN_PICTURE_API", value => \$pictureInPictureAPISupport },
{ option => "pointer-lock", desc => "Toggle pointer lock support",
define => "ENABLE_POINTER_LOCK", value => \$pointerLockSupport },
{ option => "remote-inspector", desc => "Toggle remote inspector support",
define => "ENABLE_REMOTE_INSPECTOR", value => \$remoteInspectorSupport },
{ option => "resource-usage", desc => "Toggle resource usage support",
define => "ENABLE_RESOURCE_USAGE", value => \$resourceUsageSupport },
{ option => "sampling-profiler", desc => "Toggle sampling profiler support",
define => "ENABLE_SAMPLING_PROFILER", value => \$samplingProfilerSupport },
{ option => "sandbox-extensions", desc => "Toggle sandbox extensions support",
define => "ENABLE_SANDBOX_EXTENSIONS", value => \$sandboxExtensionsSupport },
{ option => "server-preconnect", desc => "Toggle server preconnect support",
define => "ENABLE_SERVER_PRECONNECT", value => \$serverPreconnectSupport },
{ option => "service-controls", desc => "Toggle service controls support",
define => "ENABLE_SERVICE_CONTROLS", value => \$serviceControlsSupport },
{ option => "shareable-resource", desc => "Toggle network shareable resources support",
define => "ENABLE_SHAREABLE_RESOURCE", value => \$shareableResourceSupport },
{ option => "smooth-scrolling", desc => "Toggle smooth scrolling",
define => "ENABLE_SMOOTH_SCROLLING", value => \$smoothScrollingSupport },
{ option => "speech-synthesis", desc => "Toggle Speech Synthesis API support",
define => "ENABLE_SPEECH_SYNTHESIS", value => \$speechSynthesisSupport },
{ option => "spellcheck", desc => "Toggle Spellchecking support (requires Enchant)",
define => "ENABLE_SPELLCHECK", value => \$spellcheckSupport },
{ option => "telephone-number-detection", desc => "Toggle telephone number detection support",
define => "ENABLE_TELEPHONE_NUMBER_DETECTION", value => \$telephoneNumberDetectionSupport },
{ option => "text-autosizing", desc => "Toggle automatic text size adjustment support",
define => "ENABLE_TEXT_AUTOSIZING", value => \$textAutosizingSupport },
{ option => "touch-events", desc => "Toggle Touch Events support",
define => "ENABLE_TOUCH_EVENTS", value => \$touchEventsSupport },
{ option => "unified-builds", desc => "Toggle unified builds",
define => "ENABLE_UNIFIED_BUILDS", value => \$unifiedBuildsSupport },
{ option => "user-message-handlers", desc => "Toggle user script message handler support",
define => "ENABLE_USER_MESSAGE_HANDLERS", value => \$userMessageHandlersSupport },
{ option => "variation-fonts", desc => "Toggle variation fonts support",
define => "ENABLE_VARIATION_FONTS", value => \$variationFontsSupport },
{ option => "video", desc => "Toggle Video support",
define => "ENABLE_VIDEO", value => \$videoSupport },
{ option => "video-presentation-mode", desc => "Toggle Video presentation mode support",
define => "ENABLE_VIDEO_PRESENTATION_MODE", value => \$videoPresentationModeSupport },
{ option => "video-uses-element-fullscreen", desc => "Toggle video element fullscreen support",
define => "ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN", value => \$videoUsesElementFullscreenSupport },
{ option => "webassembly", desc => "Toggle WebAssembly support",
define => "ENABLE_WEBASSEMBLY", value => \$webAssemblySupport },
{ option => "webdriver", desc => "Toggle WebDriver service process",
define => "ENABLE_WEBDRIVER", value => \$webdriverSupport },
{ option => "webdriver-keyboard-interactions", desc => "Toggle WebDriver keyboard interactions",
define => "ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS", value => \$webdriverKeyboardInteractionsSupport },
{ option => "webdriver-mouse-interactions", desc => "Toggle WebDriver mouse interactions",
define => "ENABLE_WEBDRIVER_MOUSE_INTERACTIONS", value => \$webdriverMouseInteractionsSupport },
{ option => "webdriver-touch-interactions", desc => "Toggle WebDriver touch interactions",
define => "ENABLE_WEBDRIVER_TOUCH_INTERACTIONS", value => \$webdriverTouchInteractionsSupport },
{ option => "webdriver-wheel-interactions", desc => "Toggle WebDriver wheel interactions",
define => "ENABLE_WEBDRIVER_WHEEL_INTERACTIONS", value => \$webdriverWheelInteractionsSupport },
{ option => "webgl", desc => "Toggle WebGL support",
define => "ENABLE_WEBGL", value => \$webglSupport },
{ option => "webgpu-swift", desc => "Toggle WebGPU Swift Implementation",
define => "ENABLE_WEBGPU_SWIFT", value => \$webGpuSwift },
{ option => "webGpuSwift", desc => "Old spelling of \"Toggle WebGPU Swift Implementation\"",
hidden => 1, define => "ENABLE_WEBGPU_SWIFT", value => \$webGpuSwift },
{ option => "webxr", desc => "Toggle WebXR support",
define => "ENABLE_WEBXR", value => \$webXRSupport },
{ option => "web-api-statistics", desc => "Toggle Web API statistics support",
define => "ENABLE_WEB_API_STATISTICS", value => \$webAPIStatisticsSupport },
{ option => "web-audio", desc => "Toggle Web Audio support",
define => "ENABLE_WEB_AUDIO", value => \$webAudioSupport },
{ option => "web-authn", desc => "Toggle Web AuthN support",
define => "ENABLE_WEB_AUTHN", value => \$webAuthNSupport },
{ option => "web-codecs", desc => "Toggle WebCodecs support",
define => "ENABLE_WEB_CODECS", value => \$webCodecsSupport },
{ option => "web-rtc", desc => "Toggle WebRTC support",
define => "ENABLE_WEB_RTC", value => \$webRTCSupport },
{ option => "wireless-playback-target", desc => "Toggle wireless playback target support",
define => "ENABLE_WIRELESS_PLAYBACK_TARGET", value => \$wirelessPlaybackTargetSupport },
{ option => "wk-web-extensions", desc => "Toggle WebExtensions support",
define => "ENABLE_WK_WEB_EXTENSIONS", value => \$wkWebExtensionsSupport },
{ option => "xslt", desc => "Toggle XSLT support",
define => "ENABLE_XSLT", value => \$xsltSupport },
{ option => "avif", desc => "Toggle support for AVIF images",
define => "USE_AVIF", value => \$avifSupport },
{ option => "gstreamer-gl", desc => "Toggle GStreamer GL support",
define => "USE_GSTREAMER_GL", value => \$gstreamerGLSupport },
{ option => "iso-malloc", desc => "Toggle IsoMalloc support",
define => "USE_ISO_MALLOC", value => \$isoMallocSupport },
{ option => "jpegxl", desc => "Toggle support for JPEG XL images",
define => "USE_JPEGXL", value => \$jpegXLSupport },
{ option => "lcms", desc => "Toggle support for image color management using libcms2",
define => "USE_LCMS", value => \$lcmsSupport },
{ option => "skia", desc => "Toggle Skia instead of Cairo for rasterization",
define => "USE_SKIA", value => \$skiaSupport },
{ option => "system-malloc", desc => "Toggle system allocator instead of bmalloc",
define => "USE_SYSTEM_MALLOC", value => \$systemMallocSupport },
{ option => "woff2", desc => "Toggle support for WOFF2 Web Fonts through libwoff2",
define => "USE_WOFF2", value => \$woff2Support },
);
sub getFeatureOptionList()
{
webkitdirs::prohibitUnknownPort();
return @features;
}
1;