[GTK] Clean up feature detection and make it hard to accidentally build without optio...
authormcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Apr 2015 20:39:23 +0000 (20:39 +0000)
committermcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Apr 2015 20:39:23 +0000 (20:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143546

Reviewed by Martin Robinson.

Add USE_GSTREAMER_MPEGTS option and turn it off by default. Turn off ENABLE_SUBTLE_CRYPTO
by default. Turn on ENABLE_GEOLOCATION by default. Add USE_LIBNOTIFY and turn it on by
default. Fail the build with an informative error message if an optional dependency required
for an enabled feature is not present. Perform find_package commands only when necessary.
Make ENABLE_API_TESTS private. Alphabetize the feature checks (yes, this is actually
possible now!).

* Source/cmake/OptionsGTK.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183505 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
Source/cmake/OptionsGTK.cmake

index ac8ba0f..5585d4f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>
 
+        [GTK] Clean up feature detection and make it hard to accidentally build without optional features
+        https://bugs.webkit.org/show_bug.cgi?id=143546
+
+        Reviewed by Martin Robinson.
+
+        Add USE_GSTREAMER_MPEGTS option and turn it off by default. Turn off ENABLE_SUBTLE_CRYPTO
+        by default. Turn on ENABLE_GEOLOCATION by default. Add USE_LIBNOTIFY and turn it on by
+        default. Fail the build with an informative error message if an optional dependency required
+        for an enabled feature is not present. Perform find_package commands only when necessary.
+        Make ENABLE_API_TESTS private. Alphabetize the feature checks (yes, this is actually
+        possible now!).
+
+        * Source/cmake/OptionsGTK.cmake:
+
+2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>
+
         [GTK] Make all options actually options
         https://bugs.webkit.org/show_bug.cgi?id=144106
 
index a83eb60..af5b7bf 100644 (file)
@@ -41,16 +41,8 @@ find_package(ATK REQUIRED)
 find_package(WebP REQUIRED)
 find_package(ATSPI 2.5.3)
 find_package(EGL)
-find_package(GObjectIntrospection)
-find_package(GeoClue2 2.1.5)
-find_package(GnuTLS 3.0.0)
-find_package(LibNotify)
 find_package(OpenGL)
 
-if (NOT GEOCLUE2_FOUND)
-    find_package(GeoClue)
-endif ()
-
 WEBKIT_OPTION_BEGIN()
 
 WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC OFF)
@@ -60,8 +52,10 @@ WEBKIT_OPTION_DEFINE(ENABLE_OPENGL "Whether to use OpenGL." PUBLIC ON)
 WEBKIT_OPTION_DEFINE(ENABLE_PLUGIN_PROCESS_GTK2 "Whether to build WebKitPluginProcess2 to load GTK2 based plugins." PUBLIC ON)
 WEBKIT_OPTION_DEFINE(ENABLE_X11_TARGET "Whether to enable support for the X11 windowing target." PUBLIC ON)
 WEBKIT_OPTION_DEFINE(ENABLE_WAYLAND_TARGET "Whether to enable support for the Wayland windowing target." PUBLIC OFF)
+WEBKIT_OPTION_DEFINE(USE_LIBNOTIFY "Whether to enable the default web notification implementation." PUBLIC ON)
 
 WEBKIT_OPTION_DEFINE(USE_GSTREAMER_GL "Whether to enable support for GStreamer GL" PRIVATE OFF)
+WEBKIT_OPTION_DEFINE(USE_GSTREAMER_MPEGTS "Whether to enable support for MPEG-TS" PRIVATE OFF)
 WEBKIT_OPTION_DEFINE(USE_REDIRECTED_XCOMPOSITE_WINDOW "Whether to use a Redirected XComposite Window for accelerated compositing in X11." PRIVATE ON)
 
 # FIXME: Can we use cairo-glesv2 to avoid this conflict?
@@ -79,31 +73,16 @@ WEBKIT_OPTION_DEPEND(USE_REDIRECTED_XCOMPOSITE_WINDOW ENABLE_OPENGL)
 WEBKIT_OPTION_DEPEND(USE_REDIRECTED_XCOMPOSITE_WINDOW ENABLE_X11_TARGET)
 WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_OPENGL)
 WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_VIDEO)
-
-if (GNUTLS_FOUND)
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SUBTLE_CRYPTO PUBLIC ON)
-else ()
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SUBTLE_CRYPTO PUBLIC OFF)
-endif ()
-
-if (ENABLE_SUBTLE_CRYPTO AND NOT(GNUTLS_FOUND))
-    message(FATAL_ERROR "Subtle crypto support needs GnuTLS 3.0.0")
-endif ()
-
-if (GEOCLUE2_FOUND OR GEOCLUE_FOUND)
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON)
-else ()
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC OFF)
-endif ()
+WEBKIT_OPTION_DEPEND(USE_GSTREAMER_MPEGTS ENABLE_VIDEO)
 
 # FIXME: There is no reason these should be different.
 SET_AND_EXPOSE_TO_BUILD(DEVELOPMENT_BUILD ${DEVELOPER_MODE})
 if (DEVELOPER_MODE)
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC ON)
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PUBLIC ON)
+    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE ON)
 else ()
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC OFF)
-    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PUBLIC OFF)
+    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE OFF)
     set(WebKit2_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/gtksymbols.filter")
 endif ()
 
@@ -144,6 +123,7 @@ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCELERATED_2D_CANVAS PUBLIC ${CAIRO_GL_
 
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CREDENTIAL_STORAGE PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ICONDATABASE PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPELLCHECK PUBLIC ON)
@@ -191,6 +171,7 @@ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOLUTION_MEDIA_QUERY PRIVATE OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_REQUEST_ANIMATION_FRAME PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SECCOMP_FILTERS PRIVATE OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SMOOTH_SCROLLING PRIVATE ON)
+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SUBTLE_CRYPTO PRIVATE OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEMPLATE_ELEMENT PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USERSELECT_ALL PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_MESSAGE_HANDLERS PRIVATE ON)
@@ -207,12 +188,6 @@ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_THREADED_COMPOSITOR PRIVATE OFF)
 # this point, and do not attempt to change any option after this point.
 WEBKIT_OPTION_END()
 
-if (ENABLE_PLUGIN_PROCESS_GTK2)
-    find_package(GTK2 2.24.10 REQUIRED)
-    find_package(GDK2 2.24.10 REQUIRED)
-endif ()
-
-SET_AND_EXPOSE_TO_BUILD(WTF_USE_LIBNOTIFY ${LIBNOTIFY_FOUND})
 SET_AND_EXPOSE_TO_BUILD(WTF_PLATFORM_X11 ${ENABLE_X11_TARGET})
 SET_AND_EXPOSE_TO_BUILD(MOZ_X11 ${ENABLE_X11_TARGET})
 SET_AND_EXPOSE_TO_BUILD(XP_UNIX ${WTF_OS_UNIX})
@@ -246,12 +221,77 @@ add_definitions(-DUSER_AGENT_GTK_MAJOR_VERSION=601)
 add_definitions(-DUSER_AGENT_GTK_MINOR_VERSION=1)
 add_definitions(-DWEBKITGTK_API_VERSION_STRING="${WEBKITGTK_API_VERSION}")
 
-if (ENABLE_X11_TARGET)
-    find_package(X11 REQUIRED)
+if (ENABLE_WAYLAND_TARGET)
+    set(GTK3_REQUIRED_VERSION 3.12.0)
+else ()
+    set(GTK3_REQUIRED_VERSION 3.6.0)
 endif ()
 
-if (ENABLE_WAYLAND_TARGET)
-    find_package(Wayland REQUIRED)
+find_package(GTK3 ${GTK3_REQUIRED_VERSION} REQUIRED)
+find_package(GDK3 ${GTK3_REQUIRED_VERSION} REQUIRED)
+find_package(GTKUnixPrint)
+
+set(GTK_LIBRARIES ${GTK3_LIBRARIES})
+set(GTK_INCLUDE_DIRS ${GTK3_INCLUDE_DIRS})
+set(GDK_LIBRARIES ${GDK3_LIBRARIES})
+set(GDK_INCLUDE_DIRS ${GDK3_INCLUDE_DIRS})
+
+SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_UNIX_PRINTING ${GTK_UNIX_PRINT_FOUND})
+SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_GESTURES ${GTK_SUPPORTS_GESTURES})
+
+set(glib_components gio gobject gthread gmodule)
+if (ENABLE_GAMEPAD_DEPRECATED OR ENABLE_GEOLOCATION)
+    list(APPEND glib_components gio-unix)
+endif ()
+find_package(GLIB 2.33.2 REQUIRED COMPONENTS ${glib_components})
+
+if (ENABLE_CREDENTIAL_STORAGE)
+    find_package(Libsecret)
+    if (NOT LIBSECRET_FOUND)
+        message(FATAL_ERROR "libsecretr is needed for ENABLE_CREDENTIAL_STORAGE")
+    endif ()
+endif ()
+
+if (ENABLE_FTL_JIT)
+    find_package(LLVM)
+    if (NOT LLVM_FOUND)
+        message(FATAL_ERROR "LLVM is needed for ENABLE_FTL_JIT")
+    endif ()
+    SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
+endif ()
+
+if (ENABLE_GAMEPAD_DEPRECATED)
+    find_package(GUdev)
+    if (NOT GUDEV_FOUND)
+        message(FATAL_ERROR "GUdev is needed for ENABLE_GAMEPAD_DEPRECATED")
+    endif ()
+endif ()
+
+if (ENABLE_GEOLOCATION)
+    find_package(GeoClue2 2.1.5)
+    if (GEOCLUE2_FOUND)
+        SET_AND_EXPOSE_TO_BUILD(WTF_USE_GEOCLUE2 ${GEOCLUE2_FOUND})
+    else ()
+        find_package(GeoClue)
+        if (NOT GEOCLUE_FOUND)
+            message(FATAL_ERROR "Geoclue is needed for ENABLE_GEOLOCATION.")
+        endif ()
+    endif ()
+endif ()
+
+if (ENABLE_INTROSPECTION)
+    find_package(GObjectIntrospection)
+    if (NOT INTROSPECTION_FOUND)
+        message(FATAL_ERROR "GObjectIntrospection is needed for ENABLE_INTROSPECTION.")
+    endif ()
+endif ()
+
+if (ENABLE_MEDIA_STREAM)
+    find_package(OpenWebRTC)
+    if (NOT OPENWEBRTC_FOUND)
+        message(FATAL_ERROR "OpenWebRTC is needed for ENABLE_MEDIA_STREAM.")
+    endif ()
+    SET_AND_EXPOSE_TO_BUILD(WTF_USE_OPENWEBRTC TRUE)
 endif ()
 
 if (ENABLE_OPENGL)
@@ -291,6 +331,25 @@ if (ENABLE_OPENGL)
     SET_AND_EXPOSE_TO_BUILD(WTF_USE_COORDINATED_GRAPHICS_THREADED ${ENABLE_THREADED_COMPOSITOR})
 endif ()
 
+if (ENABLE_PLUGIN_PROCESS_GTK2)
+    find_package(GTK2 2.24.10 REQUIRED)
+    find_package(GDK2 2.24.10 REQUIRED)
+endif ()
+
+if (ENABLE_SPELLCHECK)
+    find_package(Enchant)
+    if (NOT PC_ENCHANT_FOUND)
+        message(FATAL_ERROR "Enchant is needed for ENABLE_SPELLCHECK")
+    endif ()
+endif ()
+
+if (ENABLE_SUBTLE_CRYPTO)
+    find_package(GnuTLS 3.0.0)
+    if (NOT GNUTLS_FOUND)
+        message(FATAL_ERROR "GnuTLS is needed for ENABLE_SUBTLE_CRYPTO")
+    endif ()
+endif ()
+
 if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
     set(GSTREAMER_COMPONENTS app pbutils)
     SET_AND_EXPOSE_TO_BUILD(WTF_USE_GSTREAMER TRUE)
@@ -305,7 +364,10 @@ if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
 
     find_package(GStreamer 1.0.3 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
 
-    if (PC_GSTREAMER_MPEGTS_FOUND)
+    if (USE_GSTREAMER_MPEGTS)
+        if (NOT PC_GSTREAMER_MPEGTS_FOUND)
+            message(FATAL_ERROR "GStreamer MPEG-TS is needed for USE_GSTREAMER_MPEGTS.")
+        endif ()
         SET_AND_EXPOSE_TO_BUILD(WTF_USE_GSTREAMER_MPEGTS TRUE)
     endif ()
 
@@ -317,54 +379,20 @@ if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
     endif ()
 endif ()
 
-if (ENABLE_WAYLAND_TARGET)
-    set(GTK3_REQUIRED_VERSION 3.12.0)
-else ()
-    set(GTK3_REQUIRED_VERSION 3.6.0)
-endif ()
-
-find_package(GTK3 ${GTK3_REQUIRED_VERSION} REQUIRED)
-find_package(GDK3 ${GTK3_REQUIRED_VERSION} REQUIRED)
-set(GTK_LIBRARIES ${GTK3_LIBRARIES})
-set(GTK_INCLUDE_DIRS ${GTK3_INCLUDE_DIRS})
-set(GDK_LIBRARIES ${GDK3_LIBRARIES})
-set(GDK_INCLUDE_DIRS ${GDK3_INCLUDE_DIRS})
-
-set(glib_components gio gobject gthread gmodule)
-if (ENABLE_GAMEPAD_DEPRECATED OR ENABLE_GEOLOCATION)
-    list(APPEND glib_components gio-unix)
-endif ()
-find_package(GLIB 2.33.2 REQUIRED COMPONENTS ${glib_components})
-
-if (ENABLE_GEOLOCATION)
-    SET_AND_EXPOSE_TO_BUILD(WTF_USE_GEOCLUE2 ${GEOCLUE2_FOUND})
-endif ()
-
-if (ENABLE_MEDIA_STREAM)
-    find_package(OpenWebRTC)
-    SET_AND_EXPOSE_TO_BUILD(WTF_USE_OPENWEBRTC ${OPENWEBRTC_FOUND})
-endif ()
-
-find_package(GTKUnixPrint)
-SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_UNIX_PRINTING ${GTK_UNIX_PRINT_FOUND})
-
-if (ENABLE_CREDENTIAL_STORAGE)
-    find_package(Libsecret REQUIRED)
-endif ()
-
-SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_GESTURES ${GTK_SUPPORTS_GESTURES})
-
-if (ENABLE_SPELLCHECK)
-    find_package(Enchant REQUIRED)
+if (ENABLE_X11_TARGET)
+    find_package(X11 REQUIRED)
 endif ()
 
-if (ENABLE_GAMEPAD_DEPRECATED)
-    find_package(GUdev)
+if (ENABLE_WAYLAND_TARGET)
+    find_package(Wayland REQUIRED)
 endif ()
 
-if (ENABLE_FTL_JIT)
-    find_package(LLVM REQUIRED)
-    SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
+if (USE_LIBNOTIFY)
+    find_package(LibNotify)
+    if (NOT LIBNOTIFY_FOUND)
+       message(FATAL_ERROR "libnotify is needed for USE_LIBNOTIFY.")
+    endif ()
+    SET_AND_EXPOSE_TO_BUILD(WTF_USE_LIBNOTIFY TRUE)
 endif ()
 
 set(CPACK_SOURCE_GENERATOR TBZ2)