Subject: Re: bug#28882: [bug-gnu-emacs] emacs-26.0.90 build feedback

From: Noam Postavsky <[email-masked]>
Date: Tue, 17 Oct 2017 23:41:07 -0400

"Nelson H. F. Beebe" <[email-masked]> writes:

> Unfortunately, a further 77 automated builds were broken by this
> obnoxious failure:
>
>>> ...
>>>     configure: error: The following required libraries were not found:
>>> 	 gnutls
>>>     Maybe some development libraries/packages are missing?
>>>     If you don't want to link with them give
>>> 	 --with-gnutls=no
>>>     as options to configure
>>> ...
>
> My suspicion is that the gnutls package is needed only for editing
> files across a network, which few users ever do.  Thus, my strong view
> is that, while it is fine for configure to test for the availability
> of gnutls, it should NOT be a show-stopper that requires a manual
> override and a fresh build attempt with that extra option.

It's also used for downloading packages from repositories.  It is
optional there, but in recent times not using https for this is
considered unacceptable (e.g. [1]).  You might call this mass hysteria,
or you might call it sanity being restored, but either way, I don't
think it's accurate that few users will want gnutls.

[1]: https://glyph.twistedmatrix.com/2015/11/editor-malware.html

> I've expressed the view before on this list that the same should apply
> for the various options for libraries that allow emacs to view
> bitmap-graphics files, again a feature that few people are ever likely
> to use.

Yes, in Bug#25317 [2].  I was going to to add an option to make that
possible, but I didn't get around to finishing it at the time.

[2]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25317#13

> I strongly recommend that configure.ac be revised so that all
> --with-XXX=[no|yes] options allow configuration and building to
> proceed, regardless of their settings.  It is just too painful to have
> to spend several unnecessary hours restarting builds to work around
> the current undesirable behavior.

Here's a patch now, which should give the behaviour you want when
passing --with-all=maybe to ./configure.  Unfortunately, it's probably
too late to get this in for Emacs 26, but hopefully we can smooth things
out for version 27.

>From facc909306885f013843ae48b78d916626c6b55f Mon Sep 17 00:00:00 2001
From: Noam Postavsky <[email-masked]>
Date: Tue, 17 Oct 2017 21:17:53 -0400
Subject: [PATCH v1] Support ./configure --with-all=maybe

* configure.ac: Change all --with-foo options to accept 'maybe' as a
synonym for 'yes' (except that there's no error if the option can't be
used).
---
 configure.ac | 67 ++++++++++++++++++++++++++++++------------------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/configure.ac b/configure.ac
index 63324c2c7c..0ef9ca5147 100644
--- a/configure.ac
+++ b/configure.ac
@@ -243,7 +243,7 @@ AC_DEFUN
       installed])],
   [],
   [with_mailutils=$with_features
-   if test "$with_mailutils" = yes; then
+   if test "$with_mailutils" != no; then
      (movemail --version) >/dev/null 2>&1 || with_mailutils=no
    fi])
 if test "$with_mailutils" = no; then
@@ -302,9 +302,9 @@ AC_DEFUN
   [compile with sound support (VALUE one of: yes, alsa, oss, bsd-ossaudio, no;
 default yes).  Only for GNU/Linux, FreeBSD, NetBSD, MinGW, Cygwin.])],
   [ case "${withval}" in
-      yes|no|alsa|oss|bsd-ossaudio) val=$withval ;;
+      yes|no|maybe|alsa|oss|bsd-ossaudio) val=$withval ;;
       *) AC_MSG_ERROR(['--with-sound=$withval' is invalid;
-this option's value should be 'yes', 'no', 'alsa', 'oss', or 'bsd-ossaudio'.])
+this option's value should be 'yes', 'no', 'maybe', 'alsa', 'oss', or 'bsd-ossaudio'.])
       ;;
     esac
     with_sound=$val
@@ -316,10 +316,11 @@ AC_DEFUN
 dnl added later on when we find the file name of X, and it's best to
 dnl keep them together visually.
 AC_ARG_WITH([x-toolkit],[AS_HELP_STRING([--with-x-toolkit=KIT],
- [use an X toolkit (KIT one of: yes or gtk, gtk2, gtk3, lucid or athena, motif, no)])],
+ [use an X toolkit (KIT one of: yes or gtk, gtk2, gtk3, lucid or athena, motif, maybe, no)])],
 [	  case "${withval}" in
 	    y | ye | yes )	val=gtk ;;
 	    n | no )		val=no  ;;
+            maybe )             val=maybe ;;
 	    l | lu | luc | luci | lucid )	val=lucid ;;
 	    a | at | ath | athe | athen | athena )	val=athena ;;
 	    m | mo | mot | moti | motif )	val=motif ;;
@@ -328,7 +329,7 @@ AC_DEFUN
 	    gtk3  )	val=gtk3 ;;
 	    * )
 AC_MSG_ERROR(['--with-x-toolkit=$withval' is invalid;
-this option's value should be 'yes', 'no', 'lucid', 'athena', 'motif', 'gtk',
+this option's value should be 'yes', 'no', 'maybe', 'lucid', 'athena', 'motif', 'gtk',
 'gtk2' or 'gtk3'.  'yes' and 'gtk' are synonyms.
 'athena' and 'lucid' are synonyms.])
 	    ;;
@@ -337,7 +338,7 @@ AC_DEFUN
 ])
 
 OPTION_DEFAULT_OFF([wide-int], [prefer wide Emacs integers (typically 62-bit); allows buffer and string size up to 2GB on 32-bit hosts, at the cost of 10% to 30% slowdown of Lisp interpreter and larger memory footprint])
-if test "$with_wide_int" = yes; then
+if test "$with_wide_int" != no; then
   AC_DEFINE([WIDE_EMACS_INT], 1, [Use long long for EMACS_INT if available.])
 fi
 
@@ -384,13 +385,14 @@ AC_DEFUN
  [ case "${withval}" in
     y | ye | yes )	val=yes ;;
     n | no )		val=no  ;;
+    maybe )             val=maybe ;;
     i | in | ino | inot | inoti | inotif | inotify )	val=inotify ;;
     k | kq | kqu | kque | kqueu | kqueue )	val=kqueue ;;
     g | gf | gfi | gfil | gfile )	val=gfile ;;
     w | w3 | w32 )	val=w32 ;;
     * ) AC_MSG_ERROR(['--with-file-notification=$withval' is invalid;
-this option's value should be 'yes', 'no', 'inotify', 'kqueue', 'gfile' or 'w32'.
-'yes' is a synonym for 'w32' on MS-Windows, for 'no' on Nextstep,
+this option's value should be 'yes', 'no', 'maybe', 'inotify', 'kqueue', 'gfile' or 'w32'.
+'yes' and 'maybe' are a synonyms for 'w32' on MS-Windows, for 'no' on Nextstep,
 otherwise for the first of 'inotify', 'kqueue' or 'gfile' that is usable.])
     ;;
    esac
@@ -423,7 +425,7 @@ AC_DEFUN
 gamegroup=
 case ${with_gameuser} in
   '' | no) ;;
-  yes) gamegroup=games ;;
+  yes | maybe) gamegroup=games ;;
   :*) gamegroup=${with_gameuser#:} ;;
   *) gameuser=${with_gameuser} ;;
 esac
@@ -1622,7 +1624,7 @@ AC_DEFUN
   fi
   AC_SUBST(LIBSOUND)
 
-  if test "${with_sound}" = "alsa" || test "${with_sound}" = "yes"; then
+  if test "${with_sound}" = "alsa" || test "${with_sound}" = "yes" || test "${with_sound}" = "maybe" ; then
     ALSA_REQUIRED=1.0.0
     ALSA_MODULES="alsa >= $ALSA_REQUIRED"
     EMACS_CHECK_MODULES([ALSA], [$ALSA_MODULES])
@@ -2357,7 +2359,7 @@ AC_DEFUN
 
 AC_MSG_CHECKING([for thread support])
 threads_enabled=no
-if test "$with_threads" = yes; then
+if test "$with_threads" != no; then
    if test "$emacs_cv_pthread_lib" != no; then
       AC_DEFINE(THREADS_ENABLED, 1,
                 [Define to 1 if you want elisp thread support.])
@@ -2729,7 +2731,7 @@ AC_DEFUN
 dnl other platforms.
 HAVE_DBUS=no
 DBUS_OBJ=
-if test "${with_dbus}" = "yes"; then
+if test "${with_dbus}" != "no"; then
    EMACS_CHECK_MODULES([DBUS], [dbus-1 >= 1.0])
    if test "$HAVE_DBUS" = yes; then
      AC_DEFINE(HAVE_DBUS, 1, [Define to 1 if using D-Bus.])
@@ -2754,7 +2756,7 @@ AC_DEFUN
 
 dnl GSettings has been tested under GNU/Linux only.
 HAVE_GSETTINGS=no
-if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" = "yes"; then
+if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" != "no"; then
    EMACS_CHECK_MODULES([GSETTINGS], [gio-2.0 >= 2.26])
    if test "$HAVE_GSETTINGS" = "yes"; then
       old_CFLAGS=$CFLAGS
@@ -2818,7 +2820,7 @@ AC_DEFUN
 dnl SELinux is available for GNU/Linux only.
 HAVE_LIBSELINUX=no
 LIBSELINUX_LIBS=
-if test "${with_selinux}" = "yes"; then
+if test "${with_selinux}" != "no"; then
    AC_CHECK_LIB([selinux], [lgetfilecon], HAVE_LIBSELINUX=yes, HAVE_LIBSELINUX=no)
    if test "$HAVE_LIBSELINUX" = yes; then
       AC_DEFINE(HAVE_LIBSELINUX, 1, [Define to 1 if using SELinux.])
@@ -2828,7 +2830,7 @@ AC_DEFUN
 AC_SUBST(LIBSELINUX_LIBS)
 
 HAVE_GNUTLS=no
-if test "${with_gnutls}" = "yes" ; then
+if test "${with_gnutls}" != "no" ; then
   EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.12.2],
     [HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
   if test "${HAVE_GNUTLS}" = "yes"; then
@@ -2845,7 +2847,7 @@ AC_DEFUN
 AC_SUBST(LIBGNUTLS_CFLAGS)
 
 HAVE_LIBSYSTEMD=no
-if test "${with_libsystemd}" = "yes" ; then
+if test "${with_libsystemd}" != "no" ; then
   dnl This code has been tested with libsystemd 222 and later.
   dnl FIXME: Find the earliest version number for which Emacs should work,
   dnl and change '222' to that number.
@@ -2869,7 +2871,7 @@ AC_DEFUN
     this is only supported on MS-Windows native and MinGW32 builds.
     Consider using gfile instead.])
     ;;
-  w32,* | yes,mingw32)
+  w32,* | yes,mingw32 | maybe,mingw32)
     AC_CHECK_HEADER(windows.h)
     if test "$ac_cv_header_windows_h" = yes ; then
        AC_DEFINE(HAVE_W32NOTIFY, 1, [Define to 1 to use w32notify.])
@@ -2880,7 +2882,7 @@ AC_DEFUN
 
 dnl inotify is available only on GNU/Linux.
 case $with_file_notification,$NOTIFY_OBJ in
-  inotify, | yes,)
+  inotify, | yes, | maybe,)
     AC_CHECK_HEADER(sys/inotify.h)
     if test "$ac_cv_header_sys_inotify_h" = yes ; then
 	AC_CHECK_FUNC(inotify_init1)
@@ -2894,7 +2896,7 @@ AC_DEFUN
 
 dnl kqueue is available on BSD-like systems.
 case $with_file_notification,$NOTIFY_OBJ in
-  kqueue,* | yes,)
+  kqueue,* | yes, | maybe,)
     EMACS_CHECK_MODULES([KQUEUE], [libkqueue])
     if test "$HAVE_KQUEUE" = "yes"; then
        AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
@@ -2917,7 +2919,7 @@ AC_DEFUN
 dnl has been added in glib 2.24.  It has been tested under
 dnl GNU/Linux only.
 case $with_file_notification,$NOTIFY_OBJ in
-  gfile,* | yes,)
+  gfile,* | yes, |maybe,)
     if test "${HAVE_NS}" = yes; then
        AC_MSG_ERROR(['--with-file-notification=gfile' is not supported in NextStep builds.
 Consider kqueue instead.])
@@ -2934,7 +2936,7 @@ AC_DEFUN
 esac
 
 case $with_file_notification,$NOTIFY_OBJ in
-  yes,* | no,* | *,?*) ;;
+  yes,* | no,* | maybe,* | *,?*) ;;
   *) AC_MSG_ERROR([File notification '$with_file_notification' requested but requirements not found.]) ;;
 esac
 
@@ -3298,14 +3300,13 @@ AC_DEFUN
     EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
     if test $HAVE_CAIRO = yes; then
       AC_DEFINE(USE_CAIRO, 1, [Define to 1 if using cairo.])
-    else
+      CFLAGS="$CFLAGS $CAIRO_CFLAGS"
+      LIBS="$LIBS $CAIRO_LIBS"
+      AC_SUBST(CAIRO_CFLAGS)
+      AC_SUBST(CAIRO_LIBS)
+    elif test "${with_cairo}" = "yes" ; then
       AC_MSG_ERROR([cairo requested but not found.])
     fi
-
-    CFLAGS="$CFLAGS $CAIRO_CFLAGS"
-    LIBS="$LIBS $CAIRO_LIBS"
-    AC_SUBST(CAIRO_CFLAGS)
-    AC_SUBST(CAIRO_LIBS)
   fi
 fi
 
@@ -3672,18 +3673,18 @@ AC_DEFUN
 MISSING=
 WITH_NO=
 if test "${HAVE_X11}" = "yes"; then
-  test "${with_xpm}" != "no" && test "${HAVE_XPM}" != "yes" &&
+  test "${with_xpm}" = "yes" && test "${HAVE_XPM}" != "yes" &&
     MISSING="libXpm" && WITH_NO="--with-xpm=no"
-  test "${with_jpeg}" != "no" && test "${HAVE_JPEG}" != "yes" &&
+  test "${with_jpeg}" = "yes" && test "${HAVE_JPEG}" != "yes" &&
     MISSING="$MISSING libjpeg" && WITH_NO="$WITH_NO --with-jpeg=no"
-  test "${with_png}" != "no" && test "${HAVE_PNG}" != "yes" &&
+  test "${with_png}" = "yes" && test "${HAVE_PNG}" != "yes" &&
     MISSING="$MISSING libpng" && WITH_NO="$WITH_NO --with-png=no"
-  test "${with_gif}" != "no" && test "${HAVE_GIF}" != "yes" &&
+  test "${with_gif}" = "yes" && test "${HAVE_GIF}" != "yes" &&
     MISSING="$MISSING libgif/libungif" && WITH_NO="$WITH_NO --with-gif=no"
-  test "${with_tiff}" != "no" && test "${HAVE_TIFF}" != "yes" &&
+  test "${with_tiff}" = "yes" && test "${HAVE_TIFF}" != "yes" &&
     MISSING="$MISSING libtiff" && WITH_NO="$WITH_NO --with-tiff=no"
 fi
-test "${with_gnutls}" != "no" && test "${HAVE_GNUTLS}" != "yes" &&
+test "${with_gnutls}" = "yes" && test "${HAVE_GNUTLS}" != "yes" &&
   MISSING="$MISSING gnutls" && WITH_NO="$WITH_NO --with-gnutls=no"
 if test "X${MISSING}" != X; then
   AC_MSG_ERROR([The following required libraries were not found:
-- 
2.11.0

And here is the equivalent for configure, in case you don't have
autoconf handy:

--- configure	2017-10-17 22:10:41.684538677 -0400
+++ configure.with-maybe	2017-10-17 22:10:20.768469411 -0400
@@ -2370,7 +2370,7 @@
                           oss, bsd-ossaudio, no; default yes). Only for
                           GNU/Linux, FreeBSD, NetBSD, MinGW, Cygwin.
   --with-x-toolkit=KIT    use an X toolkit (KIT one of: yes or gtk, gtk2,
-                          gtk3, lucid or athena, motif, no)
+                          gtk3, lucid or athena, motif, maybe, no)
   --with-wide-int         prefer wide Emacs integers (typically 62-bit);
                           allows buffer and string size up to 2GB on 32-bit
                           hosts, at the cost of 10% to 30% slowdown of Lisp
@@ -4168,7 +4168,7 @@
   withval=$with_mailutils;
 else
   with_mailutils=$with_features
-   if test "$with_mailutils" = yes; then
+   if test "$with_mailutils" != no; then
      (movemail --version) >/dev/null 2>&1 || with_mailutils=no
    fi
 fi
@@ -4269,9 +4269,9 @@
 # Check whether --with-sound was given.
 if test "${with_sound+set}" = set; then :
   withval=$with_sound;  case "${withval}" in
-      yes|no|alsa|oss|bsd-ossaudio) val=$withval ;;
+      yes|no|maybe|alsa|oss|bsd-ossaudio) val=$withval ;;
       *) as_fn_error $? "'--with-sound=$withval' is invalid;
-this option's value should be 'yes', 'no', 'alsa', 'oss', or 'bsd-ossaudio'." "$LINENO" 5
+this option's value should be 'yes', 'no', 'maybe', 'alsa', 'oss', or 'bsd-ossaudio'." "$LINENO" 5
       ;;
     esac
     with_sound=$val
@@ -4287,6 +4287,7 @@
   withval=$with_x_toolkit; 	  case "${withval}" in
 	    y | ye | yes )	val=gtk ;;
 	    n | no )		val=no  ;;
+            maybe )             val=maybe ;;
 	    l | lu | luc | luci | lucid )	val=lucid ;;
 	    a | at | ath | athe | athen | athena )	val=athena ;;
 	    m | mo | mot | moti | motif )	val=motif ;;
@@ -4295,7 +4296,7 @@
 	    gtk3  )	val=gtk3 ;;
 	    * )
 as_fn_error $? "'--with-x-toolkit=$withval' is invalid;
-this option's value should be 'yes', 'no', 'lucid', 'athena', 'motif', 'gtk',
+this option's value should be 'yes', 'no', 'maybe', 'lucid', 'athena', 'motif', 'gtk',
 'gtk2' or 'gtk3'.  'yes' and 'gtk' are synonyms.
 'athena' and 'lucid' are synonyms." "$LINENO" 5
 	    ;;
@@ -4313,7 +4314,7 @@
       with_wide_int=no
 fi
 
-if test "$with_wide_int" = yes; then
+if test "$with_wide_int" != no; then
 
 $as_echo "#define WIDE_EMACS_INT 1" >>confdefs.h
 
@@ -4554,13 +4555,14 @@
   withval=$with_file_notification;  case "${withval}" in
     y | ye | yes )	val=yes ;;
     n | no )		val=no  ;;
+    maybe )             val=maybe ;;
     i | in | ino | inot | inoti | inotif | inotify )	val=inotify ;;
     k | kq | kqu | kque | kqueu | kqueue )	val=kqueue ;;
     g | gf | gfi | gfil | gfile )	val=gfile ;;
     w | w3 | w32 )	val=w32 ;;
     * ) as_fn_error $? "'--with-file-notification=$withval' is invalid;
-this option's value should be 'yes', 'no', 'inotify', 'kqueue', 'gfile' or 'w32'.
-'yes' is a synonym for 'w32' on MS-Windows, for 'no' on Nextstep,
+this option's value should be 'yes', 'no', 'maybe', 'inotify', 'kqueue', 'gfile' or 'w32'.
+'yes' and 'maybe' are a synonyms for 'w32' on MS-Windows, for 'no' on Nextstep,
 otherwise for the first of 'inotify', 'kqueue' or 'gfile' that is usable." "$LINENO" 5
     ;;
    esac
@@ -4615,7 +4617,7 @@
 gamegroup=
 case ${with_gameuser} in
   '' | no) ;;
-  yes) gamegroup=games ;;
+  yes | maybe) gamegroup=games ;;
   :*) gamegroup=${with_gameuser#:} ;;
   *) gameuser=${with_gameuser} ;;
 esac
@@ -9635,7 +9637,7 @@
           fi

-  if test "${with_sound}" = "alsa" || test "${with_sound}" = "yes"; then
+  if test "${with_sound}" = "alsa" || test "${with_sound}" = "yes" || test "${with_sound}" = "maybe" ; then
     ALSA_REQUIRED=1.0.0
     ALSA_MODULES="alsa >= $ALSA_REQUIRED"
 
@@ -11735,7 +11737,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread support" >&5
 $as_echo_n "checking for thread support... " >&6; }
 threads_enabled=no
-if test "$with_threads" = yes; then
+if test "$with_threads" != no; then
    if test "$emacs_cv_pthread_lib" != no; then
 
 $as_echo "#define THREADS_ENABLED 1" >>confdefs.h
@@ -12715,7 +12717,7 @@
 
 HAVE_DBUS=no
 DBUS_OBJ=
-if test "${with_dbus}" = "yes"; then
+if test "${with_dbus}" != "no"; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
@@ -12820,7 +12822,7 @@

 HAVE_GSETTINGS=no
-if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" = "yes"; then
+if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" != "no"; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSETTINGS" >&5
@@ -13117,7 +13119,7 @@
 
 HAVE_LIBSELINUX=no
 LIBSELINUX_LIBS=
-if test "${with_selinux}" = "yes"; then
+if test "${with_selinux}" != "no"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lgetfilecon in -lselinux" >&5
 $as_echo_n "checking for lgetfilecon in -lselinux... " >&6; }
 if ${ac_cv_lib_selinux_lgetfilecon+:} false; then :
@@ -13170,7 +13172,7 @@

 HAVE_GNUTLS=no
-if test "${with_gnutls}" = "yes" ; then
+if test "${with_gnutls}" != "no" ; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGNUTLS" >&5
@@ -13259,7 +13261,7 @@

 HAVE_LIBSYSTEMD=no
-if test "${with_libsystemd}" = "yes" ; then
+if test "${with_libsystemd}" != "no" ; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSYSTEMD" >&5
@@ -13351,7 +13353,7 @@
     this is only supported on MS-Windows native and MinGW32 builds.
     Consider using gfile instead." "$LINENO" 5
     ;;
-  w32,* | yes,mingw32)
+  w32,* | yes,mingw32 | maybe,mingw32)
     ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
 if test "x$ac_cv_header_windows_h" = xyes; then :
 
@@ -13368,7 +13370,7 @@
 esac
 
 case $with_file_notification,$NOTIFY_OBJ in
-  inotify, | yes,)
+  inotify, | yes, | maybe,)
     ac_fn_c_check_header_mongrel "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default"
 if test "x$ac_cv_header_sys_inotify_h" = xyes; then :
 
@@ -13392,7 +13394,7 @@
 esac
 
 case $with_file_notification,$NOTIFY_OBJ in
-  kqueue,* | yes,)
+  kqueue,* | yes, | maybe,)
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for KQUEUE" >&5
@@ -13542,7 +13544,7 @@
 esac
 
 case $with_file_notification,$NOTIFY_OBJ in
-  gfile,* | yes,)
+  gfile,* | yes, |maybe,)
     if test "${HAVE_NS}" = yes; then
        as_fn_error $? "'--with-file-notification=gfile' is not supported in NextStep builds.
 Consider kqueue instead." "$LINENO" 5
@@ -13632,7 +13634,7 @@
 esac
 
 case $with_file_notification,$NOTIFY_OBJ in
-  yes,* | no,* | *,?*) ;;
+  yes,* | no,* | maybe,* | *,?*) ;;
   *) as_fn_error $? "File notification '$with_file_notification' requested but requirements not found." "$LINENO" 5 ;;
 esac
 
@@ -14817,14 +14819,13 @@
 
 $as_echo "#define USE_CAIRO 1" >>confdefs.h
 
-    else
-      as_fn_error $? "cairo requested but not found." "$LINENO" 5
-    fi
-
-    CFLAGS="$CFLAGS $CAIRO_CFLAGS"
-    LIBS="$LIBS $CAIRO_LIBS"
+      CFLAGS="$CFLAGS $CAIRO_CFLAGS"
+      LIBS="$LIBS $CAIRO_LIBS"

+    elif test "${with_cairo}" = "yes" ; then
+      as_fn_error $? "cairo requested but not found." "$LINENO" 5
+    fi
   fi
 fi
 
@@ -15768,18 +15769,18 @@
 MISSING=
 WITH_NO=
 if test "${HAVE_X11}" = "yes"; then
-  test "${with_xpm}" != "no" && test "${HAVE_XPM}" != "yes" &&
+  test "${with_xpm}" = "yes" && test "${HAVE_XPM}" != "yes" &&
     MISSING="libXpm" && WITH_NO="--with-xpm=no"
-  test "${with_jpeg}" != "no" && test "${HAVE_JPEG}" != "yes" &&
+  test "${with_jpeg}" = "yes" && test "${HAVE_JPEG}" != "yes" &&
     MISSING="$MISSING libjpeg" && WITH_NO="$WITH_NO --with-jpeg=no"
-  test "${with_png}" != "no" && test "${HAVE_PNG}" != "yes" &&
+  test "${with_png}" = "yes" && test "${HAVE_PNG}" != "yes" &&
     MISSING="$MISSING libpng" && WITH_NO="$WITH_NO --with-png=no"
-  test "${with_gif}" != "no" && test "${HAVE_GIF}" != "yes" &&
+  test "${with_gif}" = "yes" && test "${HAVE_GIF}" != "yes" &&
     MISSING="$MISSING libgif/libungif" && WITH_NO="$WITH_NO --with-gif=no"
-  test "${with_tiff}" != "no" && test "${HAVE_TIFF}" != "yes" &&
+  test "${with_tiff}" = "yes" && test "${HAVE_TIFF}" != "yes" &&
     MISSING="$MISSING libtiff" && WITH_NO="$WITH_NO --with-tiff=no"
 fi
-test "${with_gnutls}" != "no" && test "${HAVE_GNUTLS}" != "yes" &&
+test "${with_gnutls}" = "yes" && test "${HAVE_GNUTLS}" != "yes" &&
   MISSING="$MISSING gnutls" && WITH_NO="$WITH_NO --with-gnutls=no"
 if test "X${MISSING}" != X; then
   as_fn_error $? "The following required libraries were not found:

> On our old CentOS 5 systems (packages frozen by Red Hat), I got a
> surprise message that has never appeared with any earlier version of
> emacs (I have almost 6000 logs for emacs builds going back as far as
> 20-Aug-1998):
>
>>> ...
>>> loading /local/build/cc/emacs-26.0.90/lisp/leim/leim-list.el (source)...
>>> Finding pointers to doc strings...
>>> Finding pointers to doc strings...done
>>> Dumping under the name emacs
>>> **************************************************
>>> Warning: Your system has a gap between BSS and the
>>> heap (258966655 bytes).  This usually means that exec-shield
>>> or something similar is in effect.  The dump may
>>> fail because of this.  See the section about
>>> exec-shield in etc/PROBLEMS for more information.
>>> **************************************************
>>> make[1]: *** [bootstrap-emacs] Segmentation fault (core dumped)
>>> ...
>
> I'm doubtful that CentOS 5 had any protection against stack/heap/bss
> collision, because such discussions have only shown up on security
> lists in the last several months.  Thus, it may be that the emacs test
> for the unexpected gap is faulty.

Hmm, a quick web search does seem to indicate that exec-shield only is
only set by default in CentOS 6 and up.  On the other hand, since you
got a segfault, the test for the gap is probably not faulty (just that
the warning text is imprecise: "exec-shield or something").

> The one class of operating systems for which emacs is known not to
> work out-of-the-box from standard GNU distribution channels is Alpine
> Linux. I have 5 VMs running various versions of that O/S.  Alpine uses
> muscl instead of glibc, and has a different memory model that breaks
> emacs, and also the tcsh shell.  Some Alpine versions have a patched
> emacs in the package system, but the latest ones do not.  Thus,
> emacs-26.0.90 will not build at all on Alpine Linux.

I was under the impression that Emacs 26 should be able to work with
muscl now, see Bug#22086[3] (which specifically mentions "Alpine
Linux").

[3]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22086

> One final point: as far as I recall, in emacs-25 and earlier, the
> Makefiles were carefully written to be usable by traditional Unix
> make.  Sadly, that is no longer the case, and I think the changes that
> now mandate GNU make for building emacs should be rescinded.

I think this is unlikely to happen:

    The whole thing is a bit of a mess, and the mess is largely caused by
    Emacs using Automake, and Automake is needed only because of Gnulib
    (because Gnulib assumes Automake for portability to older systems
    lacking GNU Make). I'll look into fixing this so that Gnulib no longer
    assumes Automake, so that Emacs can stop relying on Automake. Since
    Emacs assumes GNU Make, it doesn't need Automake (except for the Gnulib
    code, which I think I can fix).

http://lists.gnu.org/archive/html/emacs-devel/2017-01/msg00097.html