Subject: bug#32446: Configure-time requirement for gnutls is too old

From: Gavin Smith <[email-masked]>
Date: Wed, 15 Aug 2018 12:12:10 +0100

I downloaded and tried to build Emacs 26.1. I ran "./configure" and
"make", but after a while there is an error. With "make V=1":

gcc -std=gnu11 -Demacs  -I. -I. -I../lib -I../lib   -pthread
-I/usr/local/include -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0
-I/usr/include/at-spi2-atk/2.0 -I/usr/include/pango-1.0
-I/usr/include/gio-unix-2.0/ -I/usr/include/cairo
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz
-I/usr/include/freetype2 -I/usr/include/pixman-1
-I/usr/include/libpng14 -I/usr/include/libdrm
-I/usr/include/freetype2    -I/usr/include/alsa   -pthread
-I/usr/local/include -I/usr/include/librsvg-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/cairo
-I/usr/include/libpng14 -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libdrm
-DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16
-I/usr/include/ImageMagick-6   -I/usr/include/libpng14
-I/usr/include/libxml2   -I/usr/include/dbus-1.0
-I/usr/lib/dbus-1.0/include        -pthread -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include   -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include   -I/usr/include/freetype2      -MMD -MF
deps/.d -MP  -I/usr/include/p11-kit-1       -g3 -O2  -Wl,-znocombreloc
  \
  -o temacs  vm-limit.o dispnew.o frame.o scroll.o xdisp.o menu.o
xmenu.o window.o charset.o coding.o category.o ccl.o character.o
chartab.o bidi.o cm.o term.o terminal.o xfaces.o xterm.o xfns.o
xselect.o xrdb.o xsmfns.o xsettings.o gtkutil.o emacsgtkfixed.o
dbusbind.o emacs.o keyboard.o macros.o keymap.o sysdep.o buffer.o
filelock.o insdel.o marker.o minibuf.o fileio.o dired.o cmds.o
casetab.o casefiddle.o indent.o search.o regex.o undo.o alloc.o data.o
doc.o editfns.o callint.o eval.o floatfns.o fns.o font.o print.o
lread.o  syntax.o unexelf.o bytecode.o process.o gnutls.o callproc.o
region-cache.o sound.o atimer.o doprnt.o intervals.o textprop.o
composite.o xml.o lcms.o inotify.o  profiler.o decompress.o thread.o
systhread.o      xfont.o ftfont.o xftfont.o ftxfont.o  fontset.o
fringe.o image.o xgselect.o  terminfo.o lastfile.o
../lib/libgnu.a       -ltiff -ljpeg -L/usr/lib -lpng14 -lgif -lXpm
-lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0
-lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0   -lSM
-lICE -lX11 -lX11-xcb -lxcb -lXrender -lXft   -lasound   -lrsvg-2 -lm
-lgio-2.0 -lgdk_pixbuf-2.0 -lcairo -lgobject-2.0 -lglib-2.0
-lMagickWand-6.Q16 -lMagickCore-6.Q16   -lacl     -lrt -ldbus-1
-lXrandr   -lXinerama   -lXfixes   -lXext -lxml2   -lgpm   -lncurses
-lgio-2.0 -lgobject-2.0 -lglib-2.0   -lgobject-2.0 -lglib-2.0
-lfreetype   -lfontconfig     -lgnutls   -lpthread -lanl -llcms2  -lm
-lz
gnutls.o: In function `Fgnutls_ciphers':
/home/g/extsrc/emacs-26.1/src/gnutls.c:1889: undefined reference to
`gnutls_cipher_get_tag_size'
/home/g/extsrc/emacs-26.1/src/gnutls.c:1892: undefined reference to
`gnutls_cipher_get_iv_size'
gnutls.o: In function `Fgnutls_digests':
/home/g/extsrc/emacs-26.1/src/gnutls.c:2242: undefined reference to
`gnutls_digest_list'
/home/g/extsrc/emacs-26.1/src/gnutls.c:2248: undefined reference to
`gnutls_digest_get_name'
gnutls.o: In function `gnutls_symmetric':
/home/g/extsrc/emacs-26.1/src/gnutls.c:2062: undefined reference to
`gnutls_cipher_get_iv_size'
/home/g/extsrc/emacs-26.1/src/gnutls.c:2079: undefined reference to
`gnutls_cipher_get_tag_size'
collect2: error: ld returned 1 exit status
make[1]: *** [temacs] Error 1
make[1]: Leaving directory `/home/g/extsrc/emacs-26.1/src'
make: *** [src] Error 2

I looked to see which symbols were in the gnutls library:

$ nm -D /usr/lib/libgnutls.so.28.21.5 | grep cipher
00043760 T gnutls_cipher_add_auth
00043880 T gnutls_cipher_decrypt
00043940 T gnutls_cipher_decrypt2
000439c0 T gnutls_cipher_deinit
00043830 T gnutls_cipher_encrypt
000438f0 T gnutls_cipher_encrypt2
0003d550 T gnutls_cipher_get
000b8dc0 T gnutls_cipher_get_block_size
000b8fd0 T gnutls_cipher_get_id
000b8ed0 T gnutls_cipher_get_key_size
000b8f90 T gnutls_cipher_get_name
000435e0 T gnutls_cipher_init
000b9020 T gnutls_cipher_list
000437f0 T gnutls_cipher_set_iv
00028f30 T gnutls_cipher_set_priority
000b9270 T gnutls_cipher_suite_get_name
000b9320 T gnutls_cipher_suite_info
000436d0 T gnutls_cipher_tag
000b95a0 T gnutls_priority_get_cipher_suite_index

"gnutls_cipher_get_tag_size" is not there.

According to https://www.gnutls.org/abi-tracker/changelog/gnutls/3.4.10/log.html,
gnutls_cipher_get_tag_size was added in version 3.2.2. However, the
configure script for Emacs did not detect that I had an out-of-date
gnutls. From config.log:

configure:13176: checking for LIBGNUTLS
configure:13183: $PKG_CONFIG --exists --print-errors "gnutls >= 2.12.2"
configure:13186: $? = 0
configure:13200: $PKG_CONFIG --exists --print-errors "gnutls >= 2.12.2"
configure:13203: $? = 0
configure:13241: result: yes

The check is for an older version of gnutls, which my system passes:

$ pkg-config --modversion gnutls
3.1.25

I'd guess that the required version in 'configure' needs to be increased.