# PDFium integration. # # PDFium is NOT a vcpkg package — it is built from source via depot_tools/GN/Ninja # (see third_party/pdfium/). That build installs into: # # third_party/pdfium/install/ # include/ public PDFium headers (fpdfview.h, fpdf_*.h, ...) # lib/ the static library (pdfium.lib / libpdfium.a) # # This module turns that install tree into an imported target: pdfium::pdfium # # Behaviour: # PDFENGINE_WITH_PDFIUM = OFF (default) # No target is created. The engine compiles with PDFium code paths # #ifdef-ed out. This keeps Phase 0 unblocked before PDFium is built. # PDFENGINE_WITH_PDFIUM = ON # The install tree MUST exist; otherwise this is a hard error directing # the developer to the build script. if(NOT PDFENGINE_WITH_PDFIUM) message(STATUS "PDFium: disabled (PDFENGINE_WITH_PDFIUM=OFF). " "Engine builds without raw PDFium linkage.") return() endif() set(PDFIUM_INSTALL_DIR "${CMAKE_SOURCE_DIR}/third_party/pdfium/install" CACHE PATH "Root of the PDFium install tree produced by build_pdfium.*") find_path(PDFIUM_INCLUDE_DIR NAMES fpdfview.h PATHS "${PDFIUM_INSTALL_DIR}/include" NO_DEFAULT_PATH) find_library(PDFIUM_LIBRARY NAMES pdfium libpdfium PATHS "${PDFIUM_INSTALL_DIR}/lib" NO_DEFAULT_PATH) if(NOT PDFIUM_INCLUDE_DIR OR NOT PDFIUM_LIBRARY) message(FATAL_ERROR "PDFENGINE_WITH_PDFIUM=ON but no PDFium install tree was found under:\n" " ${PDFIUM_INSTALL_DIR}\n" "Build PDFium first (one-time, slow):\n" " Windows: pwsh third_party/pdfium/build_pdfium.ps1\n" " Unix: ./third_party/pdfium/build_pdfium.sh\n" "See third_party/pdfium/README.md.") endif() add_library(pdfium::pdfium STATIC IMPORTED GLOBAL) set_target_properties(pdfium::pdfium PROPERTIES IMPORTED_LOCATION "${PDFIUM_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${PDFIUM_INCLUDE_DIR}") # PDFium is a C++ static lib; consumers on Linux also need the C++ runtime and # pthreads. These are no-ops where irrelevant. if(UNIX AND NOT APPLE) set_property(TARGET pdfium::pdfium APPEND PROPERTY INTERFACE_LINK_LIBRARIES pthread dl) endif() message(STATUS "PDFium: found") message(STATUS " include .. ${PDFIUM_INCLUDE_DIR}") message(STATUS " library .. ${PDFIUM_LIBRARY}")