--as-needed prevents linking of libmupdfthird.so
Meson uses -Wl,--as-needed
by default, which causes zathura-pdf-mupdf
to not link against libmupdfthird.so
since no symbol from that library is referenced directly.
However, libmupdf.so
depends on libmupdfthird.so
for symbols such as js_tointeger
(if configured with #define FZ_ENABLE_JS 1
) but does not itself contain a DT_NEEDED
tag for the latter.
While some distros (e.g., Gentoo) patch MuPDF to build these two libraries as one shared object, FreeBSD does not.
Certain symbols therefore remain unresolved at load time.
Proposed fix: aou/zathura-pdf-mupdf@a4e2cf5b
- FreeBSD 11.2-RELEASE
- graphics/zathura: 0.4.0_1
- graphics/zathura-pdf-mupdf: 0.3.3_1 (poudriere build log)
- graphics/mupdf: 1.13.0_2,1 (poudriere build log)
$ zathura --version
error: Could not load plugin '/usr/local/lib/zathura/libpdf-mupdf.so' (/usr/local/lib/libmupdf.so.1.13.0: Undefined symbol "js_tointeger").
zathura 0.4.0
girara 0.3.1 (runtime: 0.3.1)
$ ldd /usr/local/lib/zathura/libpdf-mupdf.so
/usr/local/lib/zathura/libpdf-mupdf.so:
libgirara-gtk3.so.3 => /usr/local/lib/libgirara-gtk3.so.3 (0x801205000)
libcairo.so.2 => /usr/local/lib/libcairo.so.2 (0x801423000)
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x801735000)
libmupdf.so.1.13.0 => /usr/local/lib/libmupdf.so.1.13.0 (0x801c00000)
libc.so.7 => /lib/libc.so.7 (0x800823000)
libm.so.5 => /lib/libm.so.5 (0x8048ef000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x804b1c000)
libgtk-3.so.0 => /usr/local/lib/libgtk-3.so.0 (0x804e00000)
libgdk-3.so.0 => /usr/local/lib/libgdk-3.so.0 (0x8056d8000)
libpango-1.0.so.0 => /usr/local/lib/libpango-1.0.so.0 (0x80598e000)
libgio-2.0.so.0 => /usr/local/lib/libgio-2.0.so.0 (0x805bdc000)
libgobject-2.0.so.0 => /usr/local/lib/libgobject-2.0.so.0 (0x805f6f000)
libpixman-1.so.0 => /usr/local/lib/libpixman-1.so.0 (0x8061b9000)
libfontconfig.so.1 => /usr/local/lib/libfontconfig.so.1 (0x806483000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x8066cb000)
libpng16.so.16 => /usr/local/lib/libpng16.so.16 (0x806983000)
libxcb-shm.so.0 => /usr/local/lib/libxcb-shm.so.0 (0x806bbe000)
libxcb.so.1 => /usr/local/lib/libxcb.so.1 (0x806dc0000)
libxcb-render.so.0 => /usr/local/lib/libxcb-render.so.0 (0x806fe6000)
libXrender.so.1 => /usr/local/lib/libXrender.so.1 (0x8071f3000)
libX11.so.6 => /usr/local/lib/libX11.so.6 (0x8073fc000)
libXext.so.6 => /usr/local/lib/libXext.so.6 (0x80773b000)
libz.so.6 => /lib/libz.so.6 (0x80794c000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x807b64000)
libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x807e5f000)
libthr.so.3 => /lib/libthr.so.3 (0x8080fd000)
libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x808325000)
libjbig2dec.so.0 => /usr/local/lib/libjbig2dec.so.0 (0x8085be000)
libjpeg.so.8 => /usr/local/lib/libjpeg.so.8 (0x8087da000)
libopenjp2.so.7 => /usr/local/lib/libopenjp2.so.7 (0x808a6d000)
libXinerama.so.1 => /usr/local/lib/libXinerama.so.1 (0x808cc5000)
libXrandr.so.2 => /usr/local/lib/libXrandr.so.2 (0x808ec7000)
libXcursor.so.1 => /usr/local/lib/libXcursor.so.1 (0x8090d1000)
librt.so.1 => /usr/lib/librt.so.1 (0x8092dc000)
libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x8094e2000)
libpangocairo-1.0.so.0 => /usr/local/lib/libpangocairo-1.0.so.0 (0x8096e5000)
libXi.so.6 => /usr/local/lib/libXi.so.6 (0x8098f2000)
libXcomposite.so.1 => /usr/local/lib/libXcomposite.so.1 (0x809b00000)
libXdamage.so.1 => /usr/local/lib/libXdamage.so.1 (0x809d02000)
libXfixes.so.3 => /usr/local/lib/libXfixes.so.3 (0x809f04000)
libcairo-gobject.so.2 => /usr/local/lib/libcairo-gobject.so.2 (0x80a109000)
libgdk_pixbuf-2.0.so.0 => /usr/local/lib/libgdk_pixbuf-2.0.so.0 (0x80a311000)
libatk-1.0.so.0 => /usr/local/lib/libatk-1.0.so.0 (0x80a534000)
libatk-bridge-2.0.so.0 => /usr/local/lib/libatk-bridge-2.0.so.0 (0x80a75f000)
libepoxy.so.0 => /usr/local/lib/libepoxy.so.0 (0x80a98f000)
libpangoft2-1.0.so.0 => /usr/local/lib/libpangoft2-1.0.so.0 (0x80ac9e000)
libfribidi.so.0 => /usr/local/lib/libfribidi.so.0 (0x80aeb4000)
libffi.so.6 => /usr/local/lib/libffi.so.6 (0x80b0ca000)
libexpat.so.1 => /usr/local/lib/libexpat.so.1 (0x80b2d1000)
libbz2.so.4 => /usr/lib/libbz2.so.4 (0x80b4fb000)
libXau.so.6 => /usr/local/lib/libXau.so.6 (0x80b70f000)
libXdmcp.so.6 => /usr/local/lib/libXdmcp.so.6 (0x80b912000)
libgraphite2.so.3 => /usr/local/lib/libgraphite2.so.3 (0x80bb17000)
libdbus-1.so.3 => /usr/local/lib/libdbus-1.so.3 (0x80bd40000)
libatspi.so.0 => /usr/local/lib/libatspi.so.0 (0x80bf90000)
libdl.so.1 => /usr/lib/libdl.so.1 (0x80c1c1000)
libc++.so.1 => /usr/lib/libc++.so.1 (0x80c3c2000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x80c690000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x80c8af000)
libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x80cabe000)
libelf.so.2 => /lib/libelf.so.2 (0x80ccc1000)
$ ldd /usr/local/lib/libmupdf.so
/usr/local/lib/libmupdf.so:
libm.so.5 => /lib/libm.so.5 (0x803cef000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x803f1c000)
libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x8041d4000)
libjbig2dec.so.0 => /usr/local/lib/libjbig2dec.so.0 (0x80446d000)
libjpeg.so.8 => /usr/local/lib/libjpeg.so.8 (0x804689000)
libopenjp2.so.7 => /usr/local/lib/libopenjp2.so.7 (0x80491c000)
libz.so.6 => /lib/libz.so.6 (0x804b74000)
libc.so.7 => /lib/libc.so.7 (0x800823000)
libbz2.so.4 => /usr/lib/libbz2.so.4 (0x804d8c000)
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x804fa0000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x8052b7000)
libgraphite2.so.3 => /usr/local/lib/libgraphite2.so.3 (0x8054c2000)
libthr.so.3 => /lib/libthr.so.3 (0x8056eb000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x805913000)
libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x805c0e000)
libc++.so.1 => /usr/lib/libc++.so.1 (0x805eac000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x80617a000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x806399000)