CMakeLists.txt 23.2 KB
Newer Older
1 2
project(poppler)

Albert Astals Cid's avatar
Albert Astals Cid committed
3
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
4 5 6 7 8 9 10 11 12

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)

include(PopplerDefaults)
include(PopplerMacros)
include(MacroOptionalFindPackage)
find_package(PkgConfig)
include(MacroEnsureVersion)
include(MacroBoolTo01)
13 14 15 16 17 18 19
if (WIN32)
  message("-- Using win32 threads")
else()
  set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
  set(THREADS_PREFER_PTHREAD_FLAG TRUE)
  find_package(Threads)
endif()
20 21
include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
22 23
include(CheckFileOffsetBits)
CHECK_FILE_OFFSET_BITS()
24

25 26
include(GNUInstallDirs)

27 28 29 30 31
find_package (ECM 1.6.0 QUIET NO_MODULE)
if (ECM_FOUND)
    include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
endif()

32
set(POPPLER_MAJOR_VERSION "0")
Albert Astals Cid's avatar
Albert Astals Cid committed
33
set(POPPLER_MINOR_VERSION "67")
Albert Astals Cid's avatar
Albert Astals Cid committed
34
set(POPPLER_MICRO_VERSION "0")
35
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
36

Albert Astals Cid's avatar
Albert Astals Cid committed
37
set (CMAKE_CXX_STANDARD 11)
38
set (CMAKE_CXX_EXTENSIONS OFF)
Albert Astals Cid's avatar
Albert Astals Cid committed
39

40 41 42
# command line switches
option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF)
option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON)
Albert Astals Cid's avatar
Albert Astals Cid committed
43
option(BUILD_QT5_TESTS "Whether compile the Qt5 test programs." ON)
44
option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON)
45 46
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
47
option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
48
option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
49
option(ENABLE_GOBJECT_INTROSPECTION "Whether to generate GObject introspection." ON)
50
option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
51
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
52
set(ENABLE_LIBOPENJPEG "openjpeg2" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: openjpeg2, unmaintained, none. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: openjpeg2")
53
set(ENABLE_CMS "lcms2" CACHE STRING "Use color management system. Possible values: lcms2, none. 'none' disables color management system.")
54
set(ENABLE_DCTDECODER "libjpeg" CACHE STRING "Use libjpeg for DCT streams. Possible values: libjpeg, unmaintained, none. will use libjpeg if available or fail if not. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no DCT decoder at all. Default: libjpeg")
55
option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
56 57
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
58
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
59 60
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
61
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
62
if(WIN32)
63
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
64
else()
65
  set(ENABLE_RELOCATABLE OFF)
66
endif()
67
option(EXTRA_WARN "Enable extra compile warnings" OFF)
68

69 70
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
set(TESTDATADIR "${CMAKE_SOURCE_DIR}/../test" CACHE STRING "Specify test data dir.")
if(NOT (EXISTS ${TESTDATADIR} AND EXISTS ${TESTDATADIR}/test-poppler.c))
  message(WARNING "
 No test data found in $testdatadir.
 You will not be able to run 'make test' successfully.

 The test data is not included in the source packages
 and is also not part of the main git repository. Instead,
 you can checkout the test data from its own git
 repository with:

   git clone git://git.freedesktop.org/git/poppler/test

 You should checkout the test data as a sibling of your
 poppler source folder or specify the location of your
 checkout with -DTESTDATADIR=/path/to/checkoutdir/test.
  ")
endif()

90 91
if(WIN32)
  set(_default_fontconfiguration "win32")
92 93 94
elseif(ANDROID)
  # on android we don't have fontconfig and we don't want window-specific code
  set(_default_fontconfiguration "generic")
95
else()
96
  set(_default_fontconfiguration "fontconfig")
97
endif()
98
set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|generic|fontconfig).")
99
string(TOLOWER "${FONT_CONFIGURATION}" font_configuration)
100 101
set(WITH_FONTCONFIGURATION_WIN32 OFF)
set(WITH_FONTCONFIGURATION_FONTCONFIG OFF)
102 103 104 105
if(font_configuration STREQUAL "win32")
  set(WITH_FONTCONFIGURATION_WIN32 ON)
elseif(font_configuration STREQUAL "fontconfig")
  set(WITH_FONTCONFIGURATION_FONTCONFIG ON)
106 107
elseif(font_configuration STREQUAL "generic")
  message(STATUS "no fontconfig or win32 specific code")
108
else()
109
  message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}")
110
endif()
111

112 113 114 115
if(CMAKE_USE_PTHREADS_INIT OR WIN32)
  set(MULTITHREADED ON)
endif()

116 117 118 119 120
# Enable these unconditionally.
set(OPI_SUPPORT ON)
set(TEXTOUT_WORD_LIST ON)

# setting the minimum required versions for some components
121
set(CAIRO_VERSION "1.10.0")
122
set(GLIB_REQUIRED "2.41")
123 124 125

macro_bool_to_01(ENABLE_SPLASH HAVE_SPLASH)
find_package(Freetype REQUIRED)
126 127
if(WITH_FONTCONFIGURATION_FONTCONFIG)
  find_package(Fontconfig REQUIRED)
128
endif()
129
macro_optional_find_package(JPEG)
130
macro_optional_find_package(PNG)
131
macro_optional_find_package(TIFF)
André Guerreiro's avatar
André Guerreiro committed
132
macro_optional_find_package(NSS3)
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
if(ENABLE_DCTDECODER STREQUAL "libjpeg")
  if(JPEG_FOUND)
    set(ENABLE_LIBJPEG ${JPEG_FOUND})
  else()
    message(FATAL_ERROR "Install libjpeg before trying to build poppler. You can also decide to use the internal unmaintained DCT decoder or none at all.")
  endif()
  set(HAVE_DCT_DECODER ON)
elseif(ENABLE_DCTDECODER STREQUAL "unmaintained")
  set(ENABLE_LIBJPEG OFF)
  set(HAVE_DCT_DECODER ON)
elseif(ENABLE_DCTDECODER STREQUAL "none")
  set(ENABLE_LIBJPEG OFF)
  set(HAVE_DCT_DECODER OFF)
else()
  message(FATAL_ERROR "Invalid ENABLE_DCTDECODER value.")
endif()
149 150 151 152 153 154 155 156 157 158 159

if (ENABLE_QT5)
  find_package(Qt5Core)
  find_package(Qt5Gui)
  find_package(Qt5Xml)
  find_package(Qt5Widgets)
  find_package(Qt5Test)
  if (NOT (Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5Xml_FOUND AND Qt5Widgets_FOUND AND Qt5Test_FOUND))
    message("-- Package Qt5Core or Qt5Gui or Qt5Xml or Qt5Widgets or Qt5Test not found")
    set(ENABLE_QT5 OFF)
  endif()
160
endif()
161

162 163
macro_optional_find_package(Cairo ${CAIRO_VERSION})
if(CAIRO_FOUND)
Albert Astals Cid's avatar
Albert Astals Cid committed
164
  set(HAVE_CAIRO ${CAIRO_FOUND})
165 166
  set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1")
  set(CAIRO_REQ "cairo")
167 168
  set(POPPLER_GLIB_DISABLE_DEPRECATED "")
  set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "")
169 170 171 172 173 174 175
  if(ENABLE_GLIB)
    macro_optional_find_package(GLIB)
    if(NOT GLIB_FOUND)
      set(ENABLE_GLIB OFF)
    endif()
  endif()
  if(ENABLE_GLIB)
176 177 178 179 180
    if(ENABLE_GOBJECT_INTROSPECTION)
      # Check for introspection
      macro_optional_find_package(GObjectIntrospection 0.9.12)
      set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
    endif()
181 182
    set(POPPLER_GLIB_DISABLE_DEPRECATED "${POPPLER_GLIB_DISABLE_DEPRECATED} -DG_DISABLE_DEPRECATED")
    set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "${POPPLER_GLIB_DISABLE_SINGLE_INCLUDES} -DG_DISABLE_SINGLE_INCLUDES")
183
    macro_optional_find_package(GTK)
184 185
  endif()
else()
186
  set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO")
187
  set(ENABLE_GLIB OFF)
188
endif()
189 190 191 192
if(ENABLE_CPP)
  macro_optional_find_package(Iconv)
  set(ENABLE_CPP ${ICONV_FOUND})
  set(HAVE_ICONV ${ICONV_FOUND})
193
endif()
194 195 196
if(ENABLE_ZLIB)
  find_package(ZLIB)
  set(ENABLE_ZLIB ${ZLIB_FOUND})
197
endif()
198 199 200
if(ENABLE_ZLIB_UNCOMPRESS AND NOT ENABLE_ZLIB)
  message("Warning: ENABLE_ZLIB_UNCOMPRESS requires ENABLE_ZLIB")
  set(ENABLE_ZLIB_UNCOMPRESS FALSE)
201
endif()
202
set(WITH_OPENJPEG FALSE)
203
if(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
204
  find_package(LIBOPENJPEG2)
Adrian Johnson's avatar
Adrian Johnson committed
205
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
206 207 208 209 210 211 212 213 214 215 216 217
  if(NOT LIBOPENJPEG2_FOUND)
    message(FATAL_ERROR "Install libopenjpeg2 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all.")
  endif()
  set(HAVE_JPX_DECODER ON)
elseif(ENABLE_LIBOPENJPEG STREQUAL "unmaintained")
  set(WITH_OPENJPEG OFF)
  set(HAVE_JPX_DECODER ON)
elseif(ENABLE_LIBOPENJPEG STREQUAL "none")
  set(WITH_OPENJPEG OFF)
  set(HAVE_JPX_DECODER OFF)
else()
  message(FATAL_ERROR "Invalid ENABLE_LIBOPENJPEG value: ${ENABLE_LIBOPENJPEG}")
Adrian Johnson's avatar
Adrian Johnson committed
218
endif()
219
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
220
if(ENABLE_CMS STREQUAL "lcms2")
221 222
  find_package(LCMS2)
  set(USE_CMS ${LCMS2_FOUND})
223 224
elseif(NOT ENABLE_CMS STREQUAL "none")
  message(FATAL_ERROR "Invalid ENABLE_CMS value: ${ENABLE_CMS}")
225
endif()
Hib Eris's avatar
Hib Eris committed
226 227
if(ENABLE_LIBCURL)
  find_package(CURL)
228 229 230 231 232 233
  if(CURL_FOUND)
    include_directories(${CURL_INCLUDE_DIR})
    set(POPPLER_HAS_CURL_SUPPORT ON)
  else()
    set(ENABLE_LIBCURL OFF)
  endif()
234
endif()
235

236 237 238
if(MINGW)
  # Use mingw's ansi stdio extensions
  add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
239
endif()
240 241
if(FONTCONFIG_FOUND)
  add_definitions(${FONTCONFIG_DEFINITIONS})
242
  include_directories(${FONTCONFIG_INCLUDE_DIR})
243
endif()
244 245 246 247
if(WITH_FONTCONFIGURATION_WIN32)
  if(MINGW)
    # Set the minimum required Internet Explorer version to 5.0
    add_definitions(-D_WIN32_IE=0x0500)
248 249
  endif()
endif()
250 251 252 253 254 255 256
include_directories(
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/fofi
  ${CMAKE_CURRENT_SOURCE_DIR}/goo
  ${CMAKE_CURRENT_SOURCE_DIR}/poppler
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}/poppler
257
  ${FREETYPE_INCLUDE_DIRS}
258 259 260 261
)

if(ENABLE_ZLIB)
  include_directories(${ZLIB_INCLUDE_DIR})
262
endif()
André Guerreiro's avatar
André Guerreiro committed
263 264 265 266

if (NSS3_FOUND)
  add_definitions(${NSS3_CFLAGS})
  set(ENABLE_NSS3 ON)
267
endif()
268 269
if(JPEG_FOUND)
  include_directories(${JPEG_INCLUDE_DIR})
270
endif()
271 272 273
if(PNG_FOUND)
  include_directories(${PNG_INCLUDE_DIR})
  set(ENABLE_LIBPNG ON)
274
endif()
275 276 277
if(TIFF_FOUND)
  include_directories(${TIFF_INCLUDE_DIR})
  set(ENABLE_LIBTIFF ON)
278
endif()
Adrian Johnson's avatar
Adrian Johnson committed
279 280 281
if(LIBOPENJPEG2_FOUND)
  include_directories(${LIBOPENJPEG2_INCLUDE_DIRS})
endif()
Pino Toscano's avatar
Pino Toscano committed
282 283
if(LCMS2_FOUND)
  include_directories(${LCMS2_INCLUDE_DIR})
284
endif()
285

286 287 288 289 290 291 292 293 294 295
# Recent versions of poppler-data install a .pc file.
# Use it to determine the encoding data path, if available.
# Default to the same prefix otherwise.
pkg_check_modules(POPPLER_DATA poppler-data)
if(POPPLER_DATA_FOUND)
  execute_process(COMMAND "${PKG_CONFIG_EXECUTABLE}" --variable=poppler_datadir poppler-data
                  RESULT_VARIABLE _result_var
                  OUTPUT_VARIABLE _output_var OUTPUT_STRIP_TRAILING_WHITESPACE)
  if(_result_var STREQUAL "0" AND NOT _output_var STREQUAL "")
    set(POPPLER_DATADIR "${_output_var}")
296 297
  endif()
endif()
298 299
if(NOT DEFINED POPPLER_DATADIR)
  set(POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler")
300
endif()
301

302
if(EXTRA_WARN)
303
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
304 305
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_EXTRA} ${CMAKE_CXX_FLAGS}")
else()
306
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
307
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS} ${CMAKE_CXX_FLAGS}")
308
endif()
309 310 311 312


include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
313
configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)
314 315 316 317 318 319 320 321 322 323


set(poppler_SRCS
  goo/gfile.cc
  goo/gmempp.cc
  goo/GooList.cc
  goo/GooTimer.cc
  goo/GooString.cc
  goo/gmem.cc
  goo/FixedPoint.cc
324
  goo/NetPBMWriter.cc
325
  goo/PNGWriter.cc
326
  goo/TiffWriter.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
327
  goo/JpegWriter.cc
328
  goo/ImgWriter.cc
329
  goo/gstrtod.cc
330
  goo/grandom.cc
331
  goo/glibc.cc
Adrian Johnson's avatar
Adrian Johnson committed
332
  goo/glibc_strtok_r.cc
333 334 335 336 337
  fofi/FoFiBase.cc
  fofi/FoFiEncodings.cc
  fofi/FoFiTrueType.cc
  fofi/FoFiType1.cc
  fofi/FoFiType1C.cc
338
  fofi/FoFiIdentifier.cc
339 340 341 342
  poppler/Annot.cc
  poppler/Array.cc
  poppler/BuiltinFont.cc
  poppler/BuiltinFontTables.cc
Hib Eris's avatar
Hib Eris committed
343
  poppler/CachedFile.cc
344 345 346
  poppler/Catalog.cc
  poppler/CharCodeToUnicode.cc
  poppler/CMap.cc
347
  poppler/DateInfo.cc
348 349 350
  poppler/Decrypt.cc
  poppler/Dict.cc
  poppler/Error.cc
351
  poppler/FileSpec.cc
352 353 354 355 356 357 358 359
  poppler/FontEncodingTables.cc
  poppler/Form.cc
  poppler/FontInfo.cc
  poppler/Function.cc
  poppler/Gfx.cc
  poppler/GfxFont.cc
  poppler/GfxState.cc
  poppler/GlobalParams.cc
Hib Eris's avatar
Hib Eris committed
360
  poppler/Hints.cc
361 362 363 364
  poppler/JArithmeticDecoder.cc
  poppler/JBIG2Stream.cc
  poppler/Lexer.cc
  poppler/Link.cc
Hib Eris's avatar
Hib Eris committed
365
  poppler/Linearization.cc
366
  poppler/LocalPDFDocBuilder.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
367
  poppler/MarkedContentOutputDev.cc
368 369
  poppler/NameToCharCode.cc
  poppler/Object.cc
370
  poppler/OptionalContent.cc
371 372 373 374 375 376 377
  poppler/Outline.cc
  poppler/OutputDev.cc
  poppler/Page.cc
  poppler/PageTransition.cc
  poppler/Parser.cc
  poppler/PDFDoc.cc
  poppler/PDFDocEncoding.cc
Hib Eris's avatar
Hib Eris committed
378
  poppler/PDFDocFactory.cc
379
  poppler/PopplerCache.cc
380 381 382
  poppler/ProfileData.cc
  poppler/PreScanOutputDev.cc
  poppler/PSTokenizer.cc
383
  poppler/SignatureInfo.cc
384
  poppler/Stream.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
385 386
  poppler/StructTreeRoot.cc
  poppler/StructElement.cc
387
  poppler/UnicodeMap.cc
388
  poppler/UnicodeMapFuncs.cc
389
  poppler/UnicodeTypeTable.cc
390
  poppler/UTF.cc
391 392 393 394 395
  poppler/XRef.cc
  poppler/PSOutputDev.cc
  poppler/TextOutputDev.cc
  poppler/PageLabelInfo.cc
  poppler/SecurityHandler.cc
396
  poppler/StdinCachedFile.cc
397
  poppler/StdinPDFDocBuilder.cc
398
  poppler/Sound.cc
399
  poppler/ViewerPreferences.cc
400
  poppler/XpdfPluginAPI.cc
Hugo Mercier's avatar
Hugo Mercier committed
401
  poppler/Movie.cc
402
  poppler/Rendition.cc
403
)
404
set(poppler_LIBS ${FREETYPE_LIBRARIES})
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424
if(ENABLE_SPLASH)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/SplashOutputDev.cc
    splash/Splash.cc
    splash/SplashBitmap.cc
    splash/SplashClip.cc
    splash/SplashFTFont.cc
    splash/SplashFTFontEngine.cc
    splash/SplashFTFontFile.cc
    splash/SplashFont.cc
    splash/SplashFontEngine.cc
    splash/SplashFontFile.cc
    splash/SplashFontFileID.cc
    splash/SplashPath.cc
    splash/SplashPattern.cc
    splash/SplashScreen.cc
    splash/SplashState.cc
    splash/SplashXPath.cc
    splash/SplashXPathScanner.cc
  )
425
endif()
426 427
if(FONTCONFIG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${FONTCONFIG_LIBRARIES})
428
endif()
André Guerreiro's avatar
André Guerreiro committed
429

430 431 432 433 434
if(JPEG_FOUND)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/DCTStream.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES})
435
endif()
436 437
if(ENABLE_ZLIB)
  set(poppler_SRCS ${poppler_SRCS}
438
    poppler/FlateEncoder.cc
439 440
  )
  set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES})
441
endif()
442 443 444 445
if(ENABLE_ZLIB_UNCOMPRESS)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/FlateStream.cc
  )
446
endif()
Hib Eris's avatar
Hib Eris committed
447 448 449
if(ENABLE_LIBCURL)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/CurlCachedFile.cc
Hib Eris's avatar
Hib Eris committed
450
    poppler/CurlPDFDocBuilder.cc
Hib Eris's avatar
Hib Eris committed
451 452
  )
  set(poppler_LIBS ${poppler_LIBS} ${CURL_LIBRARIES})
453
endif()
André Guerreiro's avatar
André Guerreiro committed
454 455 456 457 458
if (ENABLE_NSS3)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/SignatureHandler.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${NSS3_LIBRARIES})
459
endif()
460
if (LIBOPENJPEG2_FOUND)
461 462 463
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPEG2000Stream.cc
  )
Adrian Johnson's avatar
Adrian Johnson committed
464 465
  set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG2_LIBRARIES})
else ()
466 467 468
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPXStream.cc
  )
Adrian Johnson's avatar
Adrian Johnson committed
469
endif()
470
if(USE_CMS)
471
  set(poppler_LIBS ${poppler_LIBS} ${LCMS2_LIBRARIES})
472
endif()
473
if(WIN32)
474 475
  # use clean APIs
  add_definitions(-DWIN32_LEAN_AND_MEAN)
476 477
  # gdi32 is needed under win32
  set(poppler_LIBS ${poppler_LIBS} gdi32)
478
endif()
479 480
if(PNG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${PNG_LIBRARIES})
481
endif()
482 483
if(TIFF_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${TIFF_LIBRARIES})
484
endif()
485

486
if(MSVC)
487
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
488
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- ${CMAKE_CXX_FLAGS}")
489
add_library(poppler STATIC ${poppler_SRCS})
490
else()
491
add_library(poppler ${poppler_SRCS})
492
endif()
Albert Astals Cid's avatar
Albert Astals Cid committed
493
set_target_properties(poppler PROPERTIES VERSION 78.0.0 SOVERSION 78)
494 495 496 497
if(MINGW)
    get_target_property(POPPLER_SOVERSION poppler SOVERSION)
    set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
498
target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
499 500 501
if(CMAKE_USE_PTHREADS_INIT)
   target_link_libraries(poppler LINK_PRIVATE Threads::Threads)
endif()
502
install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
503 504 505 506 507 508 509

if(ENABLE_XPDF_HEADERS)
  install(FILES
    poppler/Annot.h
    poppler/Array.h
    poppler/BuiltinFont.h
    poppler/BuiltinFontTables.h
Hib Eris's avatar
Hib Eris committed
510
    poppler/CachedFile.h
511 512 513
    poppler/Catalog.h
    poppler/CharCodeToUnicode.h
    poppler/CMap.h
514
    poppler/DateInfo.h
515 516 517
    poppler/Decrypt.h
    poppler/Dict.h
    poppler/Error.h
518
    poppler/FileSpec.h
519 520 521 522 523 524 525
    poppler/FontEncodingTables.h
    poppler/FontInfo.h
    poppler/Form.h
    poppler/Function.h
    poppler/Gfx.h
    poppler/GfxFont.h
    poppler/GfxState.h
526
    poppler/GfxState_helpers.h
527
    poppler/GlobalParams.h
Hib Eris's avatar
Hib Eris committed
528
    poppler/Hints.h
529 530 531 532
    poppler/JArithmeticDecoder.h
    poppler/JBIG2Stream.h
    poppler/Lexer.h
    poppler/Link.h
Hib Eris's avatar
Hib Eris committed
533
    poppler/Linearization.h
534
    poppler/LocalPDFDocBuilder.h
Albert Astals Cid's avatar
Albert Astals Cid committed
535
    poppler/MarkedContentOutputDev.h
536
    poppler/Movie.h
537 538
    poppler/NameToCharCode.h
    poppler/Object.h
539
    poppler/OptionalContent.h
540 541 542 543 544 545
    poppler/Outline.h
    poppler/OutputDev.h
    poppler/Page.h
    poppler/PageTransition.h
    poppler/Parser.h
    poppler/PDFDoc.h
Hib Eris's avatar
Hib Eris committed
546
    poppler/PDFDocBuilder.h
547
    poppler/PDFDocEncoding.h
Hib Eris's avatar
Hib Eris committed
548
    poppler/PDFDocFactory.h
Albert Astals Cid's avatar
Albert Astals Cid committed
549
    poppler/PopplerCache.h
550 551 552
    poppler/ProfileData.h
    poppler/PreScanOutputDev.h
    poppler/PSTokenizer.h
553
    poppler/Rendition.h
554 555
    poppler/Stream-CCITT.h
    poppler/Stream.h
Albert Astals Cid's avatar
Albert Astals Cid committed
556 557
    poppler/StructElement.h
    poppler/StructTreeRoot.h
558
    poppler/UnicodeMap.h
559
    poppler/UnicodeMapFuncs.h
560 561 562 563 564
    poppler/UnicodeMapTables.h
    poppler/UnicodeTypeTable.h
    poppler/UnicodeCClassTables.h
    poppler/UnicodeCompTables.h
    poppler/UnicodeDecompTables.h
565
    poppler/ViewerPreferences.h
566 567 568 569 570 571 572 573
    poppler/XRef.h
    poppler/CharTypes.h
    poppler/CompactFontTables.h
    poppler/ErrorCodes.h
    poppler/NameToUnicodeTable.h
    poppler/PSOutputDev.h
    poppler/TextOutputDev.h
    poppler/SecurityHandler.h
574
    poppler/StdinCachedFile.h
575
    poppler/StdinPDFDocBuilder.h
576
    poppler/UTF.h
577 578 579 580
    poppler/XpdfPluginAPI.h
    poppler/Sound.h
    ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
    DESTINATION include/poppler)
581 582 583 584 585 586 587 588 589
  install(FILES
    goo/GooList.h
    goo/GooTimer.h
    goo/GooMutex.h
    goo/GooString.h
    goo/gtypes.h
    goo/gmem.h
    goo/gfile.h
    goo/FixedPoint.h
590
    goo/ImgWriter.h
591
    goo/GooLikely.h
592
    goo/gstrtod.h
593
    goo/grandom.h
594
    DESTINATION include/poppler/goo)
595 596 597 598
  if(PNG_FOUND)
    install(FILES
      goo/PNGWriter.h
      DESTINATION include/poppler/goo)
599
  endif()
600 601 602 603
  if(TIFF_FOUND)
    install(FILES
      goo/TiffWriter.h
      DESTINATION include/poppler/goo)
604
  endif()
605 606 607 608
  if(JPEG_FOUND)
    install(FILES
      goo/JpegWriter.h
      DESTINATION include/poppler/goo)
609
  endif()
610 611 612 613 614 615
  install(FILES
    fofi/FoFiBase.h
    fofi/FoFiEncodings.h
    fofi/FoFiTrueType.h
    fofi/FoFiType1.h
    fofi/FoFiType1C.h
616
    fofi/FoFiIdentifier.h
617
    DESTINATION include/poppler/fofi)
Hib Eris's avatar
Hib Eris committed
618 619 620
  if(ENABLE_LIBCURL)
    install(FILES
      poppler/CurlCachedFile.h
Hib Eris's avatar
Hib Eris committed
621
      poppler/CurlPDFDocBuilder.h
Hib Eris's avatar
Hib Eris committed
622
      DESTINATION include/poppler)
623
  endif()
624
  if(LIBOPENJPEG2_FOUND)
Adrian Johnson's avatar
Adrian Johnson committed
625 626 627 628
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
  else()
629 630 631
    install(FILES
      poppler/JPXStream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
632
  endif()
633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658
  if(ENABLE_SPLASH)
    install(FILES
      poppler/SplashOutputDev.h
      DESTINATION include/poppler)
    install(FILES
      splash/Splash.h
      splash/SplashBitmap.h
      splash/SplashClip.h
      splash/SplashErrorCodes.h
      splash/SplashFTFont.h
      splash/SplashFTFontEngine.h
      splash/SplashFTFontFile.h
      splash/SplashFont.h
      splash/SplashFontEngine.h
      splash/SplashFontFile.h
      splash/SplashFontFileID.h
      splash/SplashGlyphBitmap.h
      splash/SplashMath.h
      splash/SplashPath.h
      splash/SplashPattern.h
      splash/SplashScreen.h
      splash/SplashState.h
      splash/SplashTypes.h
      splash/SplashXPath.h
      splash/SplashXPathScanner.h
      DESTINATION include/poppler/splash)
659 660
  endif()
endif()
661 662 663 664


if(ENABLE_UTILS)
  add_subdirectory(utils)
665
endif()
666
if(ENABLE_GLIB)
667
  add_subdirectory(glib)
668
endif()
669
add_subdirectory(test)
670
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
671
  add_subdirectory(qt5)
672
endif()
673 674
if(ENABLE_CPP)
  add_subdirectory(cpp)
675
endif()
676 677

set(PKG_CONFIG_VERSION_0_18 TRUE)
678 679
if(PKG_CONFIG_EXECUTABLE)
  exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR)
680
  macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18)
681
endif()
682 683 684
if(PKG_CONFIG_VERSION_0_18)
  set(PC_REQUIRES "")
  set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
685
else()
686 687
  set(PC_REQUIRES "poppler = ${POPPLER_VERSION}")
  set(PC_REQUIRES_PRIVATE "")
688
endif()
689

690
poppler_create_install_pkgconfig(poppler.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
691
if(ENABLE_SPLASH)
692
  poppler_create_install_pkgconfig(poppler-splash.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
693
endif()
694
if(ENABLE_QT5)
695
  poppler_create_install_pkgconfig(poppler-qt5.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
696
endif()
697
if(ENABLE_GLIB)
698
  poppler_create_install_pkgconfig(poppler-glib.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
699
endif()
700
if(CAIRO_FOUND)
701
  poppler_create_install_pkgconfig(poppler-cairo.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
702
endif()
703
if(ENABLE_CPP)
704
  poppler_create_install_pkgconfig(poppler-cpp.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
705
endif()
706 707 708


message("Building Poppler with support for:")
709
show_end_message("font configuration" ${font_configuration})
710
show_end_message_yesno("splash output" ENABLE_SPLASH)
711 712 713
if(SPLASH_CMYK)
  message("      with CMYK support")
endif()
714
show_end_message_yesno("cairo output" CAIRO_FOUND)
715
show_end_message_yesno("qt5 wrapper" ENABLE_QT5)
716
show_end_message_yesno("glib wrapper" ENABLE_GLIB)
717
show_end_message_yesno("  introspection" INTROSPECTION_FOUND)
718
show_end_message_yesno("  gtk-doc" ENABLE_GTK_DOC)
719 720 721
show_end_message_yesno("cpp wrapper" ENABLE_CPP)
show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG)
show_end_message_yesno("use libpng" ENABLE_LIBPNG)
722
show_end_message_yesno("use libtiff" ENABLE_LIBTIFF)
723 724
show_end_message_yesno("use zlib compress" ENABLE_ZLIB)
show_end_message_yesno("use zlib uncompress" ENABLE_ZLIB_UNCOMPRESS)
André Guerreiro's avatar
André Guerreiro committed
725
show_end_message_yesno("use nss3" ENABLE_NSS3)
Hib Eris's avatar
Hib Eris committed
726
show_end_message_yesno("use curl" ENABLE_LIBCURL)
727
show_end_message_yesno("use libopenjpeg2" WITH_OPENJPEG)
728
show_end_message_yesno("use lcms2" USE_CMS)
729
show_end_message_yesno("command line utils" ENABLE_UTILS)
730
show_end_message("test data dir" ${TESTDATADIR})
731

732 733
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
734
endif()
735

736 737
if(USE_FIXEDPOINT AND USE_FLOAT)
  message("Warning: Single precision and fixed point options should not be enabled at the same time")
738
endif()
739

740
if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
741
  message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
742 743 744 745 746
endif()

if(NOT HAVE_DCT_DECODER)
  message("Warning: You're not compiling any DCT decoder. Some files will fail to display properly.")
endif()
747

748
if(ENABLE_ZLIB_UNCOMPRESS)
749
  message("Warning: Using zlib is not totally safe")
750
endif()
751

752
if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
753
  message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
754 755 756 757 758
endif()

if(NOT HAVE_JPX_DECODER)
  message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
endif()
759 760 761 762 763 764

set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${POPPLER_VERSION})
add_custom_target(dist
    COMMAND
        COMMAND git log --stat | fmt --split-only > ${CMAKE_BINARY_DIR}/ChangeLog
        COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
765 766
        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar glib/reference/html --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
767 768
        COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})