Articles tagged #build-systems
Productionizing our poppler build
I was a bit anxious about running our poppler meson build in CI, because it's the real test, you know? "Works on my machine" only goes so far, things have a tendency to break once you try to make them reproducible.
And I was right to worry... but not for the reasons I thought. As I tried to get everything to build in CI, there was a Pypi maintenance that prevented me from installing meson, and then .
Porting poppler to meson
It took a hot minute.
Try several weeks.
Well, yeah. I got to contribute to a bunch of open-source projects in the meantime though, so I'm fairly pleased with it!
- libffi (for static linking)
- cairo (more static linking!)
- proxy-libintl (more static linking!)
- expat (static linking strikes again)
- poppler (for file descriptor stuff not properly gated on Windows, closed in favor of a similar MR)
Building poppler for Windows
I know what you're thinking: haven't we strayed from the whole "content pipeline" theme in this series?
Well... fair. But compiling and distributing software is part of software engineering, and unless you're in specific circles, I see that taught a lot less than the "just write code and stuff happens" part.
A static poppler build: the easy way
So! Now our asset processing pipeline is almost complete. But we've just traded dependencies against CLI tools, for dependencies against dynamic libraries:
$ ldd ./target/debug/pdftocairo
linux-vdso.so.1 (0x00007ffd615be000)
libpoppler-glib.so.8 => /lib64/libpoppler-glib.so.8 (0x00007f2ba1bb4000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f2ba1b59000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f2ba1a1e000)
libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f2ba1902000)
libcairo-gobject.so.2 => /lib64/libcairo-gobject.so.2 (0x00007f2ba18f6000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2ba18dc000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2ba17fe000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2ba15f4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2ba216c000)
libpoppler.so.112 => /lib64/libpoppler.so.112 (0x00007f2ba1288000)
libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007f2ba11bd000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f2ba0fe4000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f2ba0dc5000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f2ba0db8000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f2ba0d40000)
libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f2ba0c94000)
libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f2ba0c45000)
libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f2ba0c0c000)
libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f2ba0c07000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f2ba0bda000)
libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f2ba0bca000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f2ba0bbd000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f2ba0a75000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007f2ba0a60000)
libz.so.1 => /lib64/libz.so.1 (0x00007f2ba0a46000)
libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007f2ba09c2000)
libopenjp2.so.7 => /lib64/libopenjp2.so.7 (0x00007f2ba0968000)
liblcms2.so.2 => /lib64/liblcms2.so.2 (0x00007f2ba0903000)
libtiff.so.5 => /lib64/libtiff.so.5 (0x00007f2ba087c000)
libsmime3.so => /lib64/libsmime3.so (0x00007f2ba0850000)
libnss3.so => /lib64/libnss3.so (0x00007f2ba0712000)
libplc4.so => /lib64/libplc4.so (0x00007f2ba0709000)
libnspr4.so => /lib64/libnspr4.so (0x00007f2ba06c6000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f2ba06b3000)
libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f2ba05dd000)
libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x00007f2ba05cf000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f2ba05c8000)
libmount.so.1 => /lib64/libmount.so.1 (0x00007f2ba0581000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f2ba0556000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f2ba03cd000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f2ba03c7000)
libwebp.so.7 => /lib64/libwebp.so.7 (0x00007f2ba0358000)
libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f2ba0260000)
libjbig.so.2.1 => /lib64/libjbig.so.2.1 (0x00007f2ba0252000)
libnssutil3.so => /lib64/libnssutil3.so (0x00007f2ba021f000)
libplds4.so => /lib64/libplds4.so (0x00007f2ba021a000)
libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f2ba01f9000)
libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x00007f2ba01d4000)
libblkid.so.1 => /lib64/libblkid.so.1 (0x00007f2ba019c000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f2ba0105000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f2ba00d9000)
Go back to the homepage.