diff -Nur a/configure.ac b/configure.ac
--- a/configure.ac	2020-01-10 22:14:17.734373050 +0100
+++ b/configure.ac	2020-01-10 22:19:31.357831793 +0100
@@ -143,8 +143,6 @@
 PKG_CHECK_MODULES(DATETIME_PANEL, $COMMON_MODULES timezonemap geonames
                   polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION)
 PKG_CHECK_MODULES(DISPLAY_PANEL, $COMMON_MODULES libunity-settings-daemon x11)
-PKG_CHECK_MODULES(INFO_PANEL, $COMMON_MODULES libgtop-2.0 gl x11
-		  polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION webkit2gtk-4.0)
 PKG_CHECK_MODULES(KEYBOARD_PANEL, $COMMON_MODULES
                   gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION
                   x11)
@@ -160,7 +158,6 @@
                   polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION)
 PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1
                   unity-settings-daemon)
-PKG_CHECK_MODULES(COLOR_PANEL, $COMMON_MODULES colord >= 0.1.8)
 PKG_CHECK_MODULES(PRINTERS_PANEL, $COMMON_MODULES
                   polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION)
 PKG_CHECK_MODULES(REGION_PANEL, $COMMON_MODULES
@@ -183,13 +180,83 @@
                   gdk-pixbuf-2.0 >= $GDKPIXBUF_REQUIRED_VERSION
                   pwquality
                   accountsservice >= $ACCOUNTSSERVICE_REQUIRED_VERSION)
-PKG_CHECK_MODULES(BLUETOOTH_PANEL, $COMMON_MODULES)
 
 AM_PROG_VALAC([0.20.0])
 
 GDESKTOP_PREFIX=`$PKG_CONFIG --variable prefix gsettings-desktop-schemas`
 AC_SUBST(GDESKTOP_PREFIX)
 
+# Check for webkit2gtk
+INFO_BASE_MODULES="libgtop-2.0
+ gl
+ x11
+ polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION"
+
+AC_ARG_ENABLE([webkit], [
+    AS_HELP_STRING([--disable-webkit], [disable webkit support])
+])
+AS_IF([test "x$enable_webkit" != "xno"], [
+    PKG_CHECK_MODULES([INFO_PANEL], [
+        $COMMON_MODULES
+        $INFO_BASE_MODULES
+        webkit2gtk-4.0
+    ], [
+        AC_DEFINE([BUILD_WEBKIT], [1], [
+            Show Legal Notice in info panel])
+    ])
+], [
+    PKG_CHECK_MODULES([INFO_PANEL], [
+        $COMMON_MODULES
+        $INFO_BASE_MODULES
+    ])
+])
+
+# Check for colord
+build_color=no
+AC_ARG_ENABLE([color],
+              AS_HELP_STRING([--disable-color],
+                             [disable color management panel]),
+              [],
+              [enable_color=auto])
+
+AS_IF([test "x$enable_color" != "xno"],
+      [PKG_CHECK_MODULES([COLOR_PANEL],
+                         [
+                           $COMMON_MODULES
+                           colord >= 0.1.8
+                         ], [
+                           AC_DEFINE(BUILD_COLOR, 1, [Define to 1 to build the Color panel])
+                           build_color=yes
+                         ], [
+                           AS_IF([test "x$enable_color" = "xyes"],
+                                 [AC_MSG_ERROR([colord support requested but not found])])
+                         ])
+      ])
+AM_CONDITIONAL(BUILD_COLOR, test "x$build_color" = "xyes")
+
+# Check for gnome-bluetooth
+have_bluetooth=no
+AC_ARG_ENABLE([bluetooth],
+              AS_HELP_STRING([--disable-bluetooth],
+                             [disable bluetooth management panel]),
+              [],
+              [enable_bluetooth=auto])
+
+AS_IF([test "x$enable_bluetooth" = "xyes"],
+      [PKG_CHECK_MODULES([BLUETOOTH_PANEL],
+                         [$COMMON_MODULES gnome-bluetooth-1.0 >= 3.18.2],
+                         [
+                           AC_DEFINE(BUILD_BLUETOOTH, 1, [Define to 1 to build the Bluetooth panel])
+                           have_bluetooth=yes
+                         ],
+                         [
+                           have_bluetooth=no
+                           AS_IF([test "x$enable_bluetooth" = "xyes"],
+                                 [AC_MSG_ERROR([bluetooth support requested but not found])])
+                         ])
+      ])
+AM_CONDITIONAL(BUILD_BLUETOOTH, [test "x$have_bluetooth" = "xyes"])
+
 # Check for NetworkManager ~1.2
 PKG_CHECK_MODULES(NETWORK_MANAGER,
                   libnm >= $NETWORK_MANAGER_REQUIRED_VERSION
@@ -255,25 +322,40 @@
 fi
 AM_CONDITIONAL(BUILD_CHEESE, test x${have_cheese} = xyes)
 
+# Check for wacom
 # wacom is disabled for s390/s390x and non Linux platforms (needs udev)
-case $host_os in
-  linux*)
-    if test "$host_cpu" = s390 -o "$host_cpu" = s390x; then
-      have_wacom=no
-    else
-      PKG_CHECK_MODULES(WACOM_PANEL, $COMMON_MODULES
-                        unity-settings-daemon
-                        xi >= 1.2 x11 libwacom >= $LIBWACOM_REQUIRED_VERSION
-                        libunity-settings-daemon)
-      AC_DEFINE(BUILD_WACOM, 1, [Define to 1 to build the Wacom panel])
-      have_wacom=yes
-    fi
-    ;;
-  *)
-    have_wacom=no
-    ;;
-esac
-AM_CONDITIONAL(BUILD_WACOM, [test x"$have_wacom" = x"yes"])
+have_wacom=no
+AS_CASE([$host_os],
+        [linux*],
+        [AS_IF([test "$host_cpu" = "s390" -o "$host_cpu" = "s390x"],
+               [have_wacom=no],
+               [
+                 AC_ARG_ENABLE([wacom],
+                               AS_HELP_STRING([--disable-wacom],
+                                              [disable wacom management panel]),
+                               [],
+                               [enable_wacom=yes])
+                 AS_IF([test "x$enable_wacom" = "xyes"],
+                       [PKG_CHECK_MODULES([WACOM_PANEL],
+                                          [
+                                            $COMMON_MODULES
+                                            unity-settings-daemon
+                                            xi >= 1.2 x11 libwacom >= $LIBWACOM_REQUIRED_VERSION
+                                            libunity-settings-daemon
+                                          ], [
+                                            have_wacom=yes
+                                            AC_DEFINE(BUILD_WACOM, 1, [Define to 1 to build the Wacom panel])
+                                            AC_DEFINE(HAVE_WACOM, 1, [Define to 1 if Wacom is supported])
+                                          ], [
+                                            have_wacom=no
+                                            AS_IF([test "x$enable_wacom" = "xyes"],
+                                                  [AC_MSG_ERROR([wacom support requested but not found])])
+                                          ])
+                       ])
+               ])
+        ],
+        [have_wacom=no])
+AM_CONDITIONAL(BUILD_WACOM, [test "x$have_wacom" = "xyes"])
 
 # Online accounts
 AC_ARG_ENABLE(onlineaccounts, AC_HELP_STRING([--disable-onlineaccounts], [disable online-accounts panel]),
@@ -310,15 +392,25 @@
 ISO_CODES=iso-codes
 
 # Kerberos kerberos support
-AC_PATH_PROG(KRB5_CONFIG, krb5-config, no)
-if test "$KRB5_CONFIG" = "no"; then
-  AC_MSG_ERROR([krb5-config executable not found in your path - should be installed with the kerberos libraries])
-fi
-
-AC_MSG_CHECKING(for krb5 libraries and flags)
-KRB5_CFLAGS="`$KRB5_CONFIG --cflags`"
-KRB5_LIBS="`$KRB5_CONFIG --libs`"
-AC_MSG_RESULT($KRB5_CFLAGS $KRB5_LIBS)
+AC_ARG_ENABLE([kerberos],
+              AS_HELP_STRING([--disable-kerberos],
+                             [disable kerberos support (default: enabled)]),
+              [],
+              [enable_kerberos=yes])
+
+AS_IF([test "x$enable_kerberos" != "xno"],
+      [
+        AC_PATH_PROG(KRB5_CONFIG, krb5-config, no)
+
+        AS_IF([test "x$KRB5_CONFIG" = "xno"],
+              AC_MSG_ERROR([krb5-config executable not found in your path - should be installed with the kerberos libraries]))
+
+        AC_MSG_CHECKING([for krb5 libraries and flags])
+        KRB5_CFLAGS="`$KRB5_CONFIG --cflags`"
+        KRB5_LIBS="`$KRB5_CONFIG --libs`"
+        AC_MSG_RESULT($KRB5_CFLAGS $KRB5_LIBS)
+        AC_DEFINE(HAVE_KERBEROS, 1, [defined if krb5 is available])
+      ])
 
 AC_SUBST(KRB5_CFLAGS)
 AC_SUBST(KRB5_LIBS)
@@ -567,6 +659,19 @@
 else
 	AC_MSG_NOTICE([   Printers panel disabled])
 fi
+
+if test "x$build_color" = "xyes"; then
+	AC_MSG_NOTICE([** colord (Color panel)])
+else
+	AC_MSG_NOTICE([   Color panel disabled])
+fi
+
+if test "x$have_bluetooth" = "xyes"; then
+	AC_MSG_NOTICE([** gnome-bluetooth (Bluetooth panel)])
+else
+	AC_MSG_NOTICE([   Bluetooth panel disabled])
+fi
+
 if test "x$have_cheese" = "xyes"; then
 	AC_MSG_NOTICE([** Cheese (Users panel webcam support)])
 else
diff -Nur a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c
--- a/panels/info/cc-info-panel.c	2019-10-16 21:43:56.000000000 +0200
+++ b/panels/info/cc-info-panel.c	2020-01-10 22:15:15.938993462 +0100
@@ -40,7 +40,9 @@
 #include <GL/gl.h>
 #include <GL/glx.h>
 
+#ifdef BUILD_WEBKIT
 #include <webkit2/webkit2.h>
+#endif /* BUILD_WEBKIT */
 
 #include "hostname-helper.h"
 #include "gsd-disk-space-helper.h"
@@ -757,6 +759,7 @@
   gtk_tree_path_free (path);
 }
 
+#ifdef BUILD_WEBKIT
 static gboolean
 on_decide_policy (WebKitWebView             *web_view,
                   WebKitPolicyDecision      *decision,
@@ -803,6 +806,7 @@
   gtk_notebook_append_page (GTK_NOTEBOOK (WID ("notebook")), GTK_WIDGET (webView), NULL);
   gtk_widget_show_all (GTK_WIDGET (webView));
 }
+#endif /* BUILD_WEBKIT */
 
 static void
 default_app_changed (GtkAppChooserButton *button,
@@ -1439,10 +1443,12 @@
                       _("Removable Media"),
                       -1);
 
+#ifdef BUILD_WEBKIT
   gtk_list_store_append (model, &iter);
   gtk_list_store_set (model, &iter, section_name_column,
                       _("Legal Notice"),
                       -1);
+#endif /* BUILD_WEBKIT */
 
   g_signal_connect (selection, "changed",
                     G_CALLBACK (on_section_changed), self);
@@ -1968,7 +1974,9 @@
   info_panel_setup_overview (self);
   info_panel_setup_default_apps (self);
   info_panel_setup_media (self);
+#ifdef BUILD_WEBKIT
   info_panel_setup_notice (self);
+#endif /* BUILD_WEBKIT */
 }
 
 void
diff -Nur a/panels/Makefile.am b/panels/Makefile.am
--- a/panels/Makefile.am	2020-01-10 22:14:17.734373050 +0100
+++ b/panels/Makefile.am	2020-01-10 22:15:15.938993462 +0100
@@ -4,7 +4,6 @@
 	datetime \
 	screen \
 	power \
-	color \
 	display \
 	mouse \
 	region \
@@ -14,8 +13,15 @@
 	sharing \
 	keyboard \
 	universal-access \
-	user-accounts \
-	bluetooth
+	user-accounts
+
+if BUILD_COLOR
+SUBDIRS += color
+endif
+
+if BUILD_BLUETOOTH
+SUBDIRS += bluetooth
+endif
 
 if BUILD_WACOM
 SUBDIRS += wacom
diff -Nur a/panels/user-accounts/um-realm-manager.c b/panels/user-accounts/um-realm-manager.c
--- a/panels/user-accounts/um-realm-manager.c	2019-10-16 21:43:56.000000000 +0200
+++ b/panels/user-accounts/um-realm-manager.c	2020-01-10 22:15:15.938993462 +0100
@@ -23,7 +23,9 @@
 
 #include "um-realm-manager.h"
 
+#ifdef HAVE_KERBEROS
 #include <krb5/krb5.h>
+#endif
 
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -691,6 +693,7 @@
         g_slice_free (LoginClosure, login);
 }
 
+#ifdef HAVE_KERBEROS
 static krb5_error_code
 login_perform_kinit (krb5_context k5,
                      const gchar *realm,
@@ -754,12 +757,14 @@
 
         return code;
 }
+#endif /* HAVE_KERBEROS */
 
 static void
 kinit_thread_func (GSimpleAsyncResult *async,
                    GObject *object,
                    GCancellable *cancellable)
 {
+#ifdef HAVE_KERBEROS
         LoginClosure *login = g_simple_async_result_get_op_res_gpointer (async);
         krb5_context k5 = NULL;
         krb5_error_code code;
@@ -837,6 +842,10 @@
 
         if (k5)
                 krb5_free_context (k5);
+#else /* HAVE_KERBEROS */
+        g_simple_async_result_set_error (async, UM_REALM_ERROR, UM_REALM_ERROR_GENERIC,
+                                         _("gnome-control-center was built without kerberos support"));
+#endif
 }
 
 void
