Subject: bug#50494: 28.0.50; OpenBSD pgtk build fails due to the use of libdl

From: Daniel Semyonov <[email-masked]>
Date: Fri, 10 Sep 2021 02:34:35 +0300

Note: I'm sending this from a Linux machine but this was observed on an
OpenBSD laptop which I currently can't use, however since Emacs 28 is
releasing soon I thought I might as well report this since I happen to
know the solution to this bug.

At some point during a pgtk build (configure --with-pgtk) ld(1) will
error out since it can't find libdl, causing the build to fail.
This occurs since on OpenBSD libdl doesn't exist, instead providing the
same facilities through libc (this is a common issue when porting
programs to OpenBSD).

Workaround:
1. Run ./configure --with-pgtk
2. Open src/Makefile
3. Find the line PGTK_LIBS=...
4. Remove -ldl (the last library listed)
5. Run make

This produces a working Emacs AFAICT.

Sorry for not providing the specific error message returned by ld, and
not reporting this from the affected machine.  If this is critical, I
could try to get that laptop to work again and give some more
information.

Regards,
Daniel

In GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.29, cairo version 1.16.0)
 of 2021-09-09 built on coldharbour
Repository revision: fadf8f610d99d995310010a039aebb56dcc79dc7
Repository branch: feature/pgtk
Windowing system distributor 'System Description: void

Configured using:
 'configure --without-x --with-pgtk --prefix=/opt/Emacs'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PGTK PNG RSVG
SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS XIM GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  semantic-minor-modes-format: ((:eval (if (or semantic-highlight-edits-mode semantic-show-unmatched-syntax-mode)  S)))
  gnus-agent-group-mode: t
  gnus-topic-mode: t
  gnus-undo-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  shell-dirtrack-mode: t
  emms-mode-line-mode: t
  emms-playing-time-display-mode: t
  emms-playing-time-mode: t
  pdf-occur-global-minor-mode: t
  show-paren-mode: t
  electric-pair-mode: t
  repeat-mode: t
  swsw-mode: t
  global-auto-revert-mode: t
  delete-selection-mode: t
  vcomplete-mode: t
  display-time-mode: t
  minibuffer-line-mode: t
  minibuffer-electric-default-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/daniel/etc/emacs/elpa/transient-0.3.6/transient hides /opt/Emacs/share/emacs/28.0.50/lisp/transient

Features:
(shadow emacsbug sendmail make-mode tabify man magit-patch magit-subtree
magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help
ediff-init ediff-util sh-script executable wdired css-mode smie
sgml-mode facemenu eww xdg url-queue color makeinfo icomplete texinfo
texinfo-loaddefs eieio-opt speedbar ezimage dframe shortdoc cua-gmrk
cua-rect rect cua-base nndoc gnus-dup debbugs-gnu debbugs soap-client
rng-xsd rng-dt rng-util xsd-regexp emms-playlist-mode
emms-source-playlist emms-source-file locate url-http url-gw url-cache
url-auth nnrss mm-url sort smiley gnus-cite mm-archive mail-extr
gnus-async gnus-bcklg qp gnus-ml gnus-topic nndraft nnmh nnfolder utf-7
gnutls network-stream nsm gnus-agent gnus-srvr gnus-score score-mode
nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-cache gnus-sum shr kinsoku svg dom init-gnus gnus-demon nntp
gnus-group gnus-undo cus-start gnus-start gnus-dbus gnus-cloud nnimap
nnmail mail-source utf7 netrc nnoo parse-time iso8601 gnus-spec gnus-int
gnus-range gnus-win gnus nnheader term disp-table ehelp js cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars
cc-defs misearch multi-isearch goto-addr mule-util epa-file magit-extras
conf-mode vc-mtn vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc
bug-reference dired-aux face-remap magit-bookmark magit-submodule
magit-obsolete magit-blame magit-stash magit-reflog magit-bisect
magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
magit-sequence magit-notes magit-worktree magit-tag magit-merge
magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log which-func magit-diff
smerge-mode diff git-commit rx log-edit message rmc puny rfc822 mml
mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mailabbrev mail-utils
gmm-utils mailheader pcvs-util add-log magit-core magit-autorevert
magit-margin magit-transient magit-process with-editor shell pcomplete
magit-mode transient magit-git magit-section magit-utils crm dash
cl-extra cl-print help-fns radix-tree noutline outline vc-git diff-mode
easy-mmode vc-dispatcher time-date checkdoc lisp-mnt mail-parse rfc2231
rfc2047 rfc2045 mm-util ietf-drums mail-prsvr help-mode flymake-proc
flymake warnings thingatpt flyspell ispell init-interfaces grep
init-emms emms-mode-line emms-playing-time emms-player-mpv
emms-player-simple emms-info-opusinfo emms-info emms-later-do emms
emms-compat init-web elpher-eww-emulation init-volume init-pass
auth-source-pass pinentry init-programs pdf-occur ibuf-ext ibuffer
ibuffer-loaddefs tablist tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local find-func
cedet pdf-isearch let-alist pdf-misc imenu pdf-tools compile comint
ansi-color ring pdf-view bookmark text-property-search jka-compr
pdf-cache pdf-info tq pdf-util advice image-mode exif dired
dired-loaddefs init-term init-eshell init-programming paren elec-pair
init-ui format-spec repeat swsw autorevert filenotify edmacro kmacro
delsel vcomplete battery dbus cal-julian solar cal-dst cal-menu calendar
cal-loaddefs xml time minibuffer-line minibuf-eldef init-personal pcase
init-base server finder-inf package browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache json subr-x map url-vars seq
byte-opt gv bytecomp byte-compile cconv info cus-edit pp cus-load
wid-edit cl-loaddefs cl-lib iso-transl tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/pgtk-win pgtk-win
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit pgtk lcms2 multi-tty make-network-process
emacs)

Memory information:
((conses 16 823844 157742)
 (symbols 48 41233 1)
 (strings 32 214817 36469)
 (string-bytes 1 6119234)
 (vectors 16 85442)
 (vector-slots 8 1795153 153588)
 (floats 8 3246 1215)
 (intervals 56 9931 8584)
 (buffers 992 28))