Subject: emacs-27.1-rc1 and wrong GnuPG libraries

From: Jeffrey Walton <[email-masked]>
Date: Sat, 1 Aug 2020 10:51:54 -0400

Hi Everyone,

I was looking at the ldd dependencies of emacs-27.1-rc1. It shows a
dependency on GnuPG warez:

emacs-27.1$ ldd src/emacs
    linux-vdso.so.1 (0x00007fffc4aec000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb044395000)
    ...
    libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20
(0x00007fb04216a000)
    libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0
(0x00007fb041f55000)

Now, the rub here is, I built updated GnuPG libraries for Emacs:

   emacs-27.1$ ls ~/tmp/ok2delete/lib/*error*
   /home/jwalton/tmp/ok2delete/lib/libgpg-error.la
   /home/jwalton/tmp/ok2delete/lib/libgpg-error.so
   /home/jwalton/tmp/ok2delete/lib/libgpg-error.so.0
   /home/jwalton/tmp/ok2delete/lib/libgpg-error.so.0.29.0
   emacs-27.1$ ls ~/tmp/ok2delete/lib/*gcrypt*
   /home/jwalton/tmp/ok2delete/lib/libgcrypt.la
   /home/jwalton/tmp/ok2delete/lib/libgcrypt.so
   /home/jwalton/tmp/ok2delete/lib/libgcrypt.so.20
   /home/jwalton/tmp/ok2delete/lib/libgcrypt.so.20.2.6

The worry is, those stupid path problems that have plagued Linux for
the last 25 years or so. Programs still can't load the correct damn
library at runtime.

   $ readelf -d src/emacs | grep -E 'RPATH|RUNPATH'
    0x000000000000001d (RUNPATH)            Library runpath:
[$ORIGIN/../lib:/home/jwalton/tmp/ok2delete/lib]

PKG_CONFIG_PATH is set properly.

There does not appear to be a configure setting for GnuPG.

==========

$ ./configure --help
...

X features:
  --x-includes=DIR    X include files are in DIR
  --x-libraries=DIR   X library files are in DIR

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-ns-self-contained
                          disable self contained build under NeXTstep
  --enable-locallisppath=PATH
                          directories Emacs should search for lisp files
                          specific to this site
  --enable-checking[=LIST]
                          enable expensive checks. With LIST, enable only
                          specific categories of checks. Categories are:
                          all,yes,no. Flags are: stringbytes, stringoverrun,
                          stringfreelist, structs, glyphs
  --enable-profiling      build emacs with low-level, gprof profiling support.
                          Mainly useful for debugging Emacs itself. May not
                          work on all platforms. Stops profiler.el working.
  --enable-autodepend     automatically generate dependencies to .h-files.
                          Requires gcc, enabled if found.
  --enable-gtk-deprecation-warnings
                          Show Gtk+/Gdk deprecation warnings for Gtk+ >= 3.0
  --disable-build-details Make the build more deterministic by omitting host
                          names, time stamps, etc. from the output.
  --disable-largefile     omit support for large files
  --enable-gcc-warnings[=TYPE]
                          control generation of GCC warnings. The TYPE 'yes'
                          means to fail if any warnings are issued;
                          'warn-only' means issue warnings without failing
                          (default for developer builds); 'no' means disable
                          warnings (default for non-developer builds).
  --enable-check-lisp-object-type
                          Enable compile time checks for the Lisp_Object data
                          type, which can catch some bugs during development.
  --enable-link-time-optimization
                          build with link-time optimization (experimental; see
                          INSTALL)
  --disable-silent-rules  verbose build output (undo: "make V=0")
  --enable-cross-guesses={conservative|risky}
                          specify policy for cross-compilation guesses
  --disable-acl           do not support ACLs

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --without-all           omit almost all features and build small executable
                          with minimal dependencies
  --with-mailutils        rely on GNU Mailutils, so that the --without-pop
                          through --with-mailhost options are irrelevant; this
                          is the default if GNU Mailutils is installed
  --with-pop              Support POP mail retrieval if Emacs movemail is used
                          (not recommended, as Emacs movemail POP is
                          insecure). This is the default only on native
                          MS-Windows.
  --with-kerberos         support Kerberos-authenticated POP
  --with-kerberos5        support Kerberos version 5 authenticated POP
  --with-hesiod           support Hesiod to get the POP server host
  --with-mail-unlink      unlink, rather than empty, mail spool after reading
  --with-mailhost=HOSTNAME
                          string giving default POP mail host
  --with-sound=VALUE      compile with sound support (VALUE one of: yes, alsa,
                          oss, bsd-ossaudio, no; default yes). Only for
                          GNU/Linux, FreeBSD, NetBSD, MinGW, Cygwin.
  --with-pdumper=VALUE    enable pdumper support unconditionally ('yes', 'no',
                          or 'auto': default 'auto')
  --with-unexec=VALUE     enable unexec support unconditionally ('yes', 'no',
                          or 'auto': default 'auto')
  --with-dumping=VALUE    kind of dumping to use for initial Emacs build
                          (VALUE one of: pdumper, unexec, none; default
                          pdumper)
  --with-x-toolkit=KIT    use an X toolkit (KIT one of: yes or gtk, gtk2,
                          gtk3, lucid or athena, motif, 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
                          interpreter and larger memory footprint
  --without-xpm           don't compile with XPM image support
  --without-jpeg          don't compile with JPEG image support
  --without-tiff          don't compile with TIFF image support
  --without-gif           don't compile with GIF image support
  --without-png           don't compile with PNG image support
  --without-rsvg          don't compile with SVG image support
  --without-lcms2         don't compile with Little CMS support
  --without-libsystemd    don't compile with libsystemd support
  --with-cairo            compile with Cairo drawing
  --without-xml2          don't compile with XML parsing support
  --with-imagemagick      compile with ImageMagick image support
  --without-json          don't compile with native JSON support
  --without-xft           don't use XFT for anti aliased fonts
  --without-harfbuzz      don't use HarfBuzz for text shaping
  --without-libotf        don't use libotf for OpenType font support
  --without-m17n-flt      don't use m17n-flt for text shaping
  --without-toolkit-scroll-bars
                          don't use Motif/Xaw3d/GTK toolkit scroll bars
  --without-xaw3d         don't use Xaw3d
  --without-xim           at runtime, default X11 XIM to off
  --with-ns               use Nextstep (macOS Cocoa or GNUstep) windowing
                          system. On by default on macOS.
  --with-w32              use native MS Windows GUI in a Cygwin build
  --without-gpm           don't use -lgpm for mouse support on a GNU/Linux
                          console
  --without-dbus          don't compile with D-Bus support
  --with-gconf            compile with Gconf support (Gsettings replaces this)
  --without-gsettings     don't compile with GSettings support
  --without-selinux       don't compile with SELinux support
  --without-gnutls        don't use -lgnutls for SSL/TLS support
  --without-zlib          don't compile with zlib decompression support
  --without-modules       don't compile with dynamic modules support
  --without-threads       don't compile with elisp threading support
  --with-file-notification=LIB
                          use a file notification library (LIB one of: yes,
                          inotify, kqueue, gfile, w32, no)
  --with-xwidgets         enable use of some gtk widgets in Emacs buffers
                          (requires gtk3)
  --without-makeinfo      don't require makeinfo for building manuals
  --without-compress-install
                          don't compress some files (.el, .info, etc.) when
                          installing. Equivalent to: make GZIP_PROG= install
  --with-gameuser=USER_OR_GROUP
                          user for shared game score files. An argument
                          prefixed by ':' specifies a group instead.
  --with-gnustep-conf=FILENAME
                          name of GNUstep configuration file to use on systems
                          where the command 'gnustep-config' does not work;
                          default $GNUSTEP_CONFIG_FILE, or
                          /etc/GNUstep/GNUstep.conf
  --with-x                use the X Window System
  --without-libgmp        don't use the GNU Multiple Precision (GMP) library;
                          this is the default on systems lacking libgmp.
  --without-included-regex
                          don't compile regex; this is the default on systems
                          with recent-enough versions of the GNU C Library
                          (use with caution on other systems).