[poppler] CMakeLists.txt poppler/libpoppler.map.in

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jul 17 13:28:52 UTC 2023


 CMakeLists.txt            |   17 +++++++++++++++--
 poppler/libpoppler.map.in |    4 ++++
 2 files changed, 19 insertions(+), 2 deletions(-)

New commits:
commit 823de0858dff673f4ecdbad3386a702b5e0ec3b8
Author: Sune Vuorela <sune at vuorela.dk>
Date:   Thu Jul 6 09:07:28 2023 +0200

    Version symbols in poppler core
    
    This prevents crashes and collisions in the case where two poppler core
    libraries are in the same process.
    
    The likely case is if an application is linked to both poppler core
    and a stable frontend, and poppler is updated and the application
    is not yet recompiled against the newer poppler core, then the newer
    frontend pulls in newer poppler core while the application pulls in the
    older poppler core and that leads to crashes. In general, this can be
    fixed by versioning the symbols to prevent mix and match of symbols.
    
    Patch by Andreas Metzler <ametzler at bebt.de>

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 48c5b6e3..a468bf81 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -616,10 +616,17 @@ ADD_GPERF_FILE(TimesItalicWidths)
 ADD_GPERF_FILE(TimesRomanWidths)
 ADD_GPERF_FILE(ZapfDingbatsWidths)
 
+set(POPPLER_SOVERSION_NUMBER "130")
+
+set(LINKER_SCRIPT "${CMAKE_BINARY_DIR}/libpoppler.map")
+configure_file(
+    "${CMAKE_SOURCE_DIR}/poppler/libpoppler.map.in"
+    ${LINKER_SCRIPT})
+
 if(MSVC)
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 endif()
-add_library(poppler ${poppler_SRCS})
+add_library(poppler ${poppler_SRCS} ${LINKER_SCRIPT})
 if (OpenJPEG_FOUND)
   # check if we can remove this when we depend on newer openjpeg versions, 2.5 seems fixed
   # target openjp2 may lack interface include directories
@@ -629,7 +636,13 @@ if(USE_CMS)
   target_include_directories(poppler SYSTEM PRIVATE ${LCMS2_INCLUDE_DIR})
 endif()
 generate_export_header(poppler BASE_NAME poppler-private EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler_private_export.h")
-set_target_properties(poppler PROPERTIES VERSION 130.0.0 SOVERSION 130)
+set_target_properties(poppler PROPERTIES
+                              VERSION ${POPPLER_SOVERSION_NUMBER}.0.0
+                              SOVERSION ${POPPLER_SOVERSION_NUMBER})
+
+if(UNIX AND (NOT APPLE))
+	set_target_properties(poppler PROPERTIES LINK_OPTIONS LINKER:--version-script=${LINKER_SCRIPT})
+endif()
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_SOVERSION poppler SOVERSION)
     set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
diff --git a/poppler/libpoppler.map.in b/poppler/libpoppler.map.in
new file mode 100644
index 00000000..8a0ee016
--- /dev/null
+++ b/poppler/libpoppler.map.in
@@ -0,0 +1,4 @@
+POPPLER_ at POPPLER_SOVERSION_NUMBER@ {
+  global:
+    *;
+};


More information about the poppler mailing list