Skip to content

Commit

Permalink
[poppler,gdal] Major update to poppler; poppler feature for gdal (#22720
Browse files Browse the repository at this point in the history
)

* Major update to port poppler

* Fixup usage requirements via main pc file

* Add usage based on FindPkgConfig

* Export unofficial cmake config

* uwp is unsupported

* [gdal] Add poppler feature

* [gdal] Update poppler dependency

* [gdal] Add patch for poppler C++17 API

* Disable ENABLE_RELOCATABLE

* Update to 22.02.0 from poppler gitlab

* Update versions

* [skip actions] CI with gdal tools

* Revert "[skip actions] CI with gdal tools"

* Modify feature name for private API

* Update versions

* Add license field to gdal manifest

* Add port name to unofficial namespace

* Rectify poppler version number

* Update versions

* poppler[fontconfig] doesn't build for MSVC

* Update versions

Co-authored-by: Matthias Kuhn <matthias@opengis.ch>
  • Loading branch information
dg0yt and m-kuhn authored Feb 18, 2022
1 parent 805811e commit d4422c3
Show file tree
Hide file tree
Showing 18 changed files with 259 additions and 96 deletions.
17 changes: 17 additions & 0 deletions ports/gdal/0009-poppler-cxx17.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/gdal/frmts/pdf/GNUmakefile b/gdal/frmts/pdf/GNUmakefile
index aa42769477fc..56c2cd775d05 100644
--- a/gdal/frmts/pdf/GNUmakefile
+++ b/gdal/frmts/pdf/GNUmakefile
@@ -11,6 +11,12 @@ LD_SHARED = $(LD) -bundle
endif

ifeq ($(HAVE_POPPLER),yes)
+# Poppler 2022.1 requires c++17
+ifeq ($(shell test $(POPPLER_MAJOR_VERSION) -gt 21; echo $$?),0)
+CXX := $(subst -std=c++11,,${CXX})
+CXX := $(subst -std=c++14,,${CXX})
+CXX := ${CXX} -std=c++17
+endif
CPPFLAGS += -DHAVE_POPPLER -DPOPPLER_MAJOR_VERSION=$(POPPLER_MAJOR_VERSION) -DPOPPLER_MINOR_VERSION=$(POPPLER_MINOR_VERSION)
endif

9 changes: 9 additions & 0 deletions ports/gdal/dependency_win.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,15 @@ macro(find_dependency_win)
list(APPEND NMAKE_OPTIONS_DBG "NETCDF_LIB=${NETCDF_LIBS_DEBUG}")
endif()

if("poppler" IN_LIST FEATURES)
list(APPEND NMAKE_OPTIONS "POPPLER_ENABLED=YES")
list(APPEND NMAKE_OPTIONS "POPPLER_MAJOR_VERSION=22" "POPPLER_MINOR_VERSION=1") # Bump as needed
list(APPEND NMAKE_OPTIONS "POPPLER_CFLAGS=-I${CURRENT_INSTALLED_DIR}/include -I${CURRENT_INSTALLED_DIR}/include/poppler /std:c++17")
x_vcpkg_pkgconfig_get_modules(PREFIX POPPLER MODULES --msvc-syntax poppler LIBS)
list(APPEND NMAKE_OPTIONS_REL "POPPLER_LIBS=${POPPLER_LIBS_RELEASE}")
list(APPEND NMAKE_OPTIONS_DBG "POPPLER_LIBS=${POPPLER_LIBS_DEBUG}")
endif()

if("postgresql" IN_LIST FEATURES)
list(APPEND NMAKE_OPTIONS "PG_INC_DIR=${CURRENT_INSTALLED_DIR}/include")
x_vcpkg_pkgconfig_get_modules(PREFIX OPENSSL MODULES --msvc-syntax openssl LIBS)
Expand Down
7 changes: 6 additions & 1 deletion ports/gdal/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ set(GDAL_PATCHES
0005-Fix-configure.patch
0007-Control-tools.patch
0008-Fix-absl-string_view.patch
0009-poppler-cxx17.patch
)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
list(APPEND GDAL_PATCHES 0006-Fix-mingw-dllexport.patch)
Expand Down Expand Up @@ -175,6 +176,11 @@ else()
add_config("--with-spatialite=no" "SpatiaLite support: no")
endif()

if ("poppler" IN_LIST FEATURES)
add_config("--with-poppler=yes" "Poppler support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-poppler=no" "Poppler support: no")
endif()
if ("postgresql" IN_LIST FEATURES)
add_config("--with-pg=yes" "PostgreSQL support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
Expand Down Expand Up @@ -258,7 +264,6 @@ else()
--with-pcre2=no
--with-pdfium=no
--with-podofo=no
--with-poppler=no
--with-qhull=no
--with-rasdaman=no
--with-rasterlite2=no
Expand Down
3 changes: 3 additions & 0 deletions ports/gdal/vcpkg-cmake-wrapper.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ if(GDAL_FOUND)
_gdal_add_dependency(JPEG::JPEG JPEG)
_gdal_add_dependency(liblzma::liblzma liblzma CONFIG)
_gdal_add_dependency(png libpng CONFIG)
if("poppler" IN_LIST Z_VCPKG_PORT_FEATURES)
_gdal_add_dependency(unofficial::poppler::poppler-private unofficial-poppler)
endif()
if("postgresql" IN_LIST Z_VCPKG_PORT_FEATURES)
_gdal_add_dependency(PostgreSQL::PostgreSQL PostgreSQL)
endif()
Expand Down
15 changes: 14 additions & 1 deletion ports/gdal/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{
"name": "gdal",
"version-semver": "3.4.1",
"port-version": 1,
"port-version": 2,
"description": "The Geographic Data Abstraction Library for reading and writing geospatial raster and vector data",
"homepage": "https://gdal.org",
"license": null,
"supports": "!uwp",
"dependencies": [
"curl",
Expand Down Expand Up @@ -72,6 +73,18 @@
"netcdf-c"
]
},
"poppler": {
"description": "Enable poppler support",
"dependencies": [
{
"name": "poppler",
"default-features": false,
"features": [
"private-api"
]
}
]
},
"postgresql": {
"description": "Enable PostgreSQL support",
"dependencies": [
Expand Down
24 changes: 0 additions & 24 deletions ports/poppler/0002-remove-test-subdirectory.patch

This file was deleted.

15 changes: 0 additions & 15 deletions ports/poppler/0003-fix-gperf-not-recognized.patch

This file was deleted.

12 changes: 0 additions & 12 deletions ports/poppler/0004-disable-clang-format.patch

This file was deleted.

29 changes: 29 additions & 0 deletions ports/poppler/cmake-project-include.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
if("${FONT_CONFIGURATION}" STREQUAL "fontconfig")
# Poppler uses different variable names than CMake.
find_package(Fontconfig REQUIRED)
set(FONTCONFIG_DEFINITIONS "")
set(FONTCONFIG_INCLUDE_DIR "${Fontconfig_INCLUDE_DIRS}")
set(FONTCONFIG_LIBRARIES "Fontconfig::Fontconfig")
endif()

# Poppler uses different variable names than CMake,
# plus ICONV_SECOND_ARGUMENT_IS_CONST
find_package(Iconv REQUIRED)
set(ICONV_INCLUDE_DIR "${Iconv_INCLUDE_DIR}")
set(ICONV_LIBRARIES "${Iconv_LIBRARIES}")

# Create helper file for iconv usage requirement
set(poppler_iconv [[
Name: poppler-vcpkg-iconv
Description: iconv linking requirements for poppler
Version: 0
Libs:]])
string(TOLOWER "${Iconv_LIBRARIES}" iconv_libraries)
if(iconv_libraries MATCHES "iconv")
string(APPEND poppler_iconv " -liconv")
endif()
if(iconv_libraries MATCHES "charset")
string(APPEND poppler_iconv " -lcharset")
endif()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/poppler-vcpkg-iconv.pc" "${poppler_iconv}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/poppler-vcpkg-iconv.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
34 changes: 34 additions & 0 deletions ports/poppler/export-unofficial-poppler.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a0dcb1..c1f2f02 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -600,7 +600,14 @@ target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
if(CMAKE_USE_PTHREADS_INIT)
target_link_libraries(poppler LINK_PRIVATE Threads::Threads)
endif()
-install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+target_include_directories(poppler PUBLIC
+ $<INSTALL_INTERFACE:include/poppler>
+ $<INSTALL_INTERFACE:include/poppler/fofi>
+ $<INSTALL_INTERFACE:include/poppler/goo>
+)
+set_target_properties(poppler PROPERTIES EXPORT_NAME poppler-private)
+install(TARGETS poppler EXPORT unofficial-poppler-targets RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(EXPORT unofficial-poppler-targets NAMESPACE unofficial::poppler:: DESTINATION share/unofficial-poppler)

if(ENABLE_UNSTABLE_API_ABI_HEADERS)
install(FILES
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index c37936b..344933c 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -32,7 +32,8 @@ if(MINGW AND BUILD_SHARED_LIBS)
set_target_properties(poppler-cpp PROPERTIES SUFFIX "-${POPPLER_CPP_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
target_link_libraries(poppler-cpp poppler ${ICONV_LIBRARIES})
-install(TARGETS poppler-cpp RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS poppler-cpp EXPORT unofficial-poppler-cpp-targets RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(EXPORT unofficial-poppler-cpp-targets NAMESPACE unofficial::poppler:: DESTINATION share/unofficial-poppler)

install(FILES
poppler-destination.h
73 changes: 52 additions & 21 deletions ports/poppler/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,45 +1,76 @@
vcpkg_from_github(
vcpkg_from_gitlab(
GITLAB_URL https://gitlab.freedesktop.org
OUT_SOURCE_PATH SOURCE_PATH
REPO freedesktop/poppler
REF poppler-20.12.1
SHA512 f692682689c0b0fcc3953a1cc157b6e1d2ce3ccab185189d6dc0807f1dd3ea2d1a9773d0b805079a30b3c8a3b0cf3ee83239ed48d7b08dc7762eba29c2033674
REPO poppler/poppler
REF poppler-22.02.0
SHA512 693b813ef80656e7078f8830ec38e23520c6abd307befbb1721ba883233c92099704a7f02557807b28560f9c7ea1aa27192aea620b2ce4e9062a0b8790e93225
HEAD_REF master
PATCHES
0002-remove-test-subdirectory.patch
0003-fix-gperf-not-recognized.patch
0004-disable-clang-format.patch
export-unofficial-poppler.patch
)
file(REMOVE "${SOURCE_PATH}/cmake/Modules/FindFontconfig.cmake")

vcpkg_find_acquire_program(GPERF)
get_filename_component(GPERF_PATH ${GPERF} DIRECTORY)
vcpkg_add_to_path(${GPERF_PATH})
set(POPPLER_PC_REQUIRES "freetype2 libjpeg libopenjp2 libpng libtiff-4 poppler-vcpkg-iconv")

vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
curl ENABLE_CURL
zlib ENABLE_ZLIB
splash ENABLE_SPLASH
FEATURES
cairo WITH_Cairo
curl ENABLE_LIBCURL
private-api ENABLE_UNSTABLE_API_ABI_HEADERS
zlib ENABLE_ZLIB
)
if("fontconfig" IN_LIST FEATURES)
list(APPEND FEATURE_OPTIONS "-DFONT_CONFIGURATION=fontconfig")
string(APPEND POPPLER_PC_REQUIRES " fontconfig")
elseif(VCPKG_TARGET_IS_WINDOWS)
list(APPEND FEATURE_OPTIONS "-DFONT_CONFIGURATION=win32")
else()
list(APPEND FEATURE_OPTIONS "-DFONT_CONFIGURATION=generic")
endif()
if("cairo" IN_LIST FEATURES)
string(APPEND POPPLER_PC_REQUIRES " cairo")
endif()
if("curl" IN_LIST FEATURES)
string(APPEND POPPLER_PC_REQUIRES " libcurl")
endif()
if("zlib" IN_LIST FEATURES)
string(APPEND POPPLER_PC_REQUIRES " zlib")
endif()

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
vcpkg_find_acquire_program(PKGCONFIG)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
"-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake"
"-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}"
-DBUILD_GTK_TESTS=OFF
-DBUILD_QT5_TESTS=OFF
-DBUILD_QT6_TESTS=OFF
-DBUILD_CPP_TESTS=OFF
-DENABLE_LIBCURL=${ENABLE_CURL}
-DBUILD_MANUAL_TESTS=OFF
-DENABLE_UTILS=OFF
-DENABLE_GLIB=OFF
-DENABLE_GLOBJECT_INTROSPECTION=OFF
-DENABLE_GOBJECT_INTROSPECTION=OFF
-DENABLE_QT5=OFF
-DENABLE_QT6=OFF
-DENABLE_CMS=none
-DRUN_GPERF_IF_PRESENT=OFF
-DENABLE_RELOCATABLE=OFF # https://gitlab.freedesktop.org/poppler/poppler/-/issues/1209
-DWITH_NSS3=OFF
${FEATURE_OPTIONS}
)
vcpkg_cmake_install()

configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial-poppler-config.cmake" "${CURRENT_PACKAGES_DIR}/share/unofficial-poppler/unofficial-poppler-config.cmake" @ONLY)
vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-poppler)

vcpkg_install_cmake()
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/poppler.pc" "Libs:" "Requires.private: ${POPPLER_PC_REQUIRES}\nLibs:")
if(NOT DEFINED VCPKG_BUILD_TYPE)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/poppler.pc" "Libs:" "Requires.private: ${POPPLER_PC_REQUIRES}\nLibs:")
endif()
vcpkg_fixup_pkgconfig()

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")

file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
vcpkg_fixup_pkgconfig()
file(INSTALL "${SOURCE_PATH}/COPYING" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
22 changes: 22 additions & 0 deletions ports/poppler/unofficial-poppler-config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
include(CMakeFindDependencyMacro)
cmake_policy(SET CMP0012 NEW)
cmake_policy(SET CMP0057 NEW)
set(features "@FEATURES@")
find_dependency(Boost)
if("fontconfig" IN_LIST features)
find_dependency(Fontconfig) # CMake 3.14
endif()
find_dependency(Freetype)
find_dependency(JPEG)
find_dependency(PNG)
find_dependency(TIFF)
find_dependency(OpenJPEG CONFIG)
if("curl" IN_LIST features)
find_dependency(CURL)
endif()
if("zlib" IN_LIST features)
find_dependency(ZLIB)
endif()
find_dependency(Iconv) # CMake 3.11
include("${CMAKE_CURRENT_LIST_DIR}/unofficial-poppler-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/unofficial-poppler-cpp-targets.cmake")
6 changes: 6 additions & 0 deletions ports/poppler/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
The package poppler can be imported via CMake FindPkgConfig module:

include(FindPkgConfig)
pkg_check_modules(POPPLER_CPP REQUIRED IMPORTED_TARGET poppler-cpp)

target_link_libraries(main PRIVATE PkgConfig::poppler-cpp)
Loading

0 comments on commit d4422c3

Please sign in to comment.