CMakeLists.txt 25.4 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
find_package(Threads)
14 15
include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
16 17
include(CheckFileOffsetBits)
CHECK_FILE_OFFSET_BITS()
18

19 20 21 22 23
find_package (ECM 1.6.0 QUIET NO_MODULE)
if (ECM_FOUND)
    include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
endif()

24
set(POPPLER_MAJOR_VERSION "0")
Albert Astals Cid's avatar
Albert Astals Cid committed
25
set(POPPLER_MINOR_VERSION "59")
Albert Astals Cid's avatar
Albert Astals Cid committed
26
set(POPPLER_MICRO_VERSION "0")
27
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
28

Albert Astals Cid's avatar
Albert Astals Cid committed
29
set (CMAKE_CXX_STANDARD 11)
30
set (CMAKE_CXX_EXTENSIONS OFF)
Albert Astals Cid's avatar
Albert Astals Cid committed
31

32 33 34 35
# command line switches
option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF)
option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON)
option(BUILD_QT4_TESTS "Whether compile the Qt4 test programs." ON)
Albert Astals Cid's avatar
Albert Astals Cid committed
36
option(BUILD_QT5_TESTS "Whether compile the Qt5 test programs." ON)
37
option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON)
38 39
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
40
option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
41 42 43
option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
option(ENABLE_QT4 "Compile poppler qt4 wrapper." ON)
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
44
set(ENABLE_LIBOPENJPEG "auto" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: auto, openjpeg1, openjpeg2, unmaintained, none. 'auto' prefers openjpeg2 over openjpeg1 if both are available. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: auto")
45
set(ENABLE_CMS "auto" CACHE STRING "Use color management system. Possible values: auto, lcms1, lcms2. 'auto' prefers lcms2 over lcms1 if both are available. Unset to disable color management system.")
46
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")
Hib Eris's avatar
Hib Eris committed
47
option(ENABLE_LIBCURL "Build libcurl based HTTP support." OFF)
48 49
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
50
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
51 52
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
53
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
54
if(WIN32)
55
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
56
else()
57
  set(ENABLE_RELOCATABLE OFF)
58
endif()
59

60
set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
61
set(SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Share directory name")
62

63 64
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
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()

84 85
if(WIN32)
  set(_default_fontconfiguration "win32")
86
else()
87
  set(_default_fontconfiguration "fontconfig")
88
endif()
89 90
set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|fontconfig).")
string(TOLOWER "${FONT_CONFIGURATION}" font_configuration)
91 92
set(WITH_FONTCONFIGURATION_WIN32 OFF)
set(WITH_FONTCONFIGURATION_FONTCONFIG OFF)
93 94 95 96
if(font_configuration STREQUAL "win32")
  set(WITH_FONTCONFIGURATION_WIN32 ON)
elseif(font_configuration STREQUAL "fontconfig")
  set(WITH_FONTCONFIGURATION_FONTCONFIG ON)
97
else()
98
  message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}")
99
endif()
100

101
# Enable these unconditionally.
102
set(MULTITHREADED ON)
103 104 105 106
set(OPI_SUPPORT ON)
set(TEXTOUT_WORD_LIST ON)

# setting the minimum required versions for some components
107
set(QT4_MIN_VERSION "4.7.0")
108
set(CAIRO_VERSION "1.10.0")
109
set(GLIB_REQUIRED "2.41")
110 111 112

macro_bool_to_01(ENABLE_SPLASH HAVE_SPLASH)
find_package(Freetype REQUIRED)
113 114
if(WITH_FONTCONFIGURATION_FONTCONFIG)
  find_package(Fontconfig REQUIRED)
115
endif()
116
macro_optional_find_package(JPEG)
117
macro_optional_find_package(PNG)
118
macro_optional_find_package(TIFF)
André Guerreiro's avatar
André Guerreiro committed
119
macro_optional_find_package(NSS3)
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
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()
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

if (ENABLE_QT4)
  macro_optional_find_package(Qt4)
  if (NOT QT4_FOUND)
    set(ENABLE_QT4 OFF)
  endif()
endif()

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()
154
endif()
155

156 157
macro_optional_find_package(Cairo ${CAIRO_VERSION})
if(CAIRO_FOUND)
Albert Astals Cid's avatar
Albert Astals Cid committed
158
  set(HAVE_CAIRO ${CAIRO_FOUND})
159 160
  set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1")
  set(CAIRO_REQ "cairo")
161 162
  set(POPPLER_GLIB_DISABLE_DEPRECATED "")
  set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "")
163 164 165 166 167 168 169
  if(ENABLE_GLIB)
    macro_optional_find_package(GLIB)
    if(NOT GLIB_FOUND)
      set(ENABLE_GLIB OFF)
    endif()
  endif()
  if(ENABLE_GLIB)
170
    # Check for introspection
171
    macro_optional_find_package(GObjectIntrospection 0.9.12)
172
    set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
173 174
    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")
175
    macro_optional_find_package(GTK)
176 177
  endif()
else()
178
  set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO")
179
endif()
180 181 182 183
if(ENABLE_CPP)
  macro_optional_find_package(Iconv)
  set(ENABLE_CPP ${ICONV_FOUND})
  set(HAVE_ICONV ${ICONV_FOUND})
184
endif()
185 186 187
if(ENABLE_ZLIB)
  find_package(ZLIB)
  if(ZLIB_FOUND)
Albert Astals Cid's avatar
Albert Astals Cid committed
188
    set(HAVE_LIBZ ${ZLIB_FOUND})
189
  endif()
190
  set(ENABLE_ZLIB ${ZLIB_FOUND})
191
endif()
192 193 194
if(ENABLE_ZLIB_UNCOMPRESS AND NOT ENABLE_ZLIB)
  message("Warning: ENABLE_ZLIB_UNCOMPRESS requires ENABLE_ZLIB")
  set(ENABLE_ZLIB_UNCOMPRESS FALSE)
195
endif()
Adrian Johnson's avatar
Adrian Johnson committed
196 197
set(USE_OPENJPEG1 FALSE)
set(USE_OPENJPEG2 FALSE)
198
set(WITH_OPENJPEG FALSE)
Adrian Johnson's avatar
Adrian Johnson committed
199
if(ENABLE_LIBOPENJPEG STREQUAL "auto")
200 201 202 203 204 205 206
  find_package(LIBOPENJPEG2)
  set(USE_OPENJPEG2 ${LIBOPENJPEG2_FOUND})
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
  if(NOT LIBOPENJPEG2_FOUND)
    find_package(LIBOPENJPEG)
    set(USE_OPENJPEG1 ${LIBOPENJPEG_FOUND})
    set(WITH_OPENJPEG ${LIBOPENJPEG_FOUND})  
207 208 209
    if(NOT LIBOPENJPEG_FOUND)
      message(FATAL_ERROR "Install libopenjpeg2 or libopenjpeg1 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all.")
    endif()
Adrian Johnson's avatar
Adrian Johnson committed
210
  endif()
211
  set(HAVE_JPX_DECODER ON)
Adrian Johnson's avatar
Adrian Johnson committed
212 213 214 215
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg1")
  find_package(LIBOPENJPEG)
  set(USE_OPENJPEG1 ${LIBOPENJPEG_FOUND})
  set(WITH_OPENJPEG ${LIBOPENJPEG_FOUND})
216 217 218 219
  if(NOT LIBOPENJPEG_FOUND)
    message(FATAL_ERROR "Install libopenjpeg1 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)
Adrian Johnson's avatar
Adrian Johnson committed
220 221 222 223
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
  find_package(LIBOPENJPEG2)
  set(USE_OPENJPEG2 ${LIBOPENJPEG2_FOUND})
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
224 225 226 227 228 229 230 231 232 233 234 235
  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
236
endif()
237
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
238
if(ENABLE_CMS STREQUAL "auto")
Pino Toscano's avatar
Pino Toscano committed
239
  find_package(LCMS2)
240 241
  set(USE_CMS ${LCMS2_FOUND})
  if(NOT LCMS2_FOUND)
Pino Toscano's avatar
Pino Toscano committed
242 243 244
    find_package(LCMS)
    set(USE_CMS ${LCMS_FOUND})
    set(USE_LCMS1 ${LCMS_FOUND})
245
  endif()
246 247 248 249 250 251 252 253
elseif(ENABLE_CMS STREQUAL "lcms1")
  find_package(LCMS)
  set(USE_CMS ${LCMS_FOUND})
  set(USE_LCMS1 ${LCMS_FOUND})
elseif(ENABLE_CMS STREQUAL "lcms2")
  find_package(LCMS2)
  set(USE_CMS ${LCMS2_FOUND})
endif()
Hib Eris's avatar
Hib Eris committed
254 255 256 257
if(ENABLE_LIBCURL)
  find_package(CURL)
  include_directories(${CURL_INCLUDE_DIR})
  set(POPPLER_HAS_CURL_SUPPORT ON)
258
endif()
259

260
add_definitions(-DHAVE_CONFIG_H=1)
261 262 263
if(MINGW)
  # Use mingw's ansi stdio extensions
  add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
264
endif()
265 266
if(FONTCONFIG_FOUND)
  add_definitions(${FONTCONFIG_DEFINITIONS})
267
  include_directories(${FONTCONFIG_INCLUDE_DIR})
268
endif()
269 270 271 272
if(WITH_FONTCONFIGURATION_WIN32)
  if(MINGW)
    # Set the minimum required Internet Explorer version to 5.0
    add_definitions(-D_WIN32_IE=0x0500)
273 274
  endif()
endif()
275 276 277 278 279 280 281
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
282
  ${FREETYPE_INCLUDE_DIRS}
283 284
)
set(HAVE_FREETYPE_H ON)
285 286
if(CMAKE_USE_PTHREADS_INIT)
  set(HAVE_PTHREAD ON)
287
endif()
288 289 290

if(ENABLE_ZLIB)
  include_directories(${ZLIB_INCLUDE_DIR})
291
endif()
André Guerreiro's avatar
André Guerreiro committed
292 293 294 295

if (NSS3_FOUND)
  add_definitions(${NSS3_CFLAGS})
  set(ENABLE_NSS3 ON)
296
endif()
297 298
if(JPEG_FOUND)
  include_directories(${JPEG_INCLUDE_DIR})
299
endif()
300 301 302
if(PNG_FOUND)
  include_directories(${PNG_INCLUDE_DIR})
  set(ENABLE_LIBPNG ON)
303
endif()
304 305 306
if(TIFF_FOUND)
  include_directories(${TIFF_INCLUDE_DIR})
  set(ENABLE_LIBTIFF ON)
307
endif()
308
if(LIBOPENJPEG_FOUND)
309
  include_directories(${LIBOPENJPEG_INCLUDE_DIR})
310
endif()
Adrian Johnson's avatar
Adrian Johnson committed
311 312 313
if(LIBOPENJPEG2_FOUND)
  include_directories(${LIBOPENJPEG2_INCLUDE_DIRS})
endif()
Albert Astals Cid's avatar
Albert Astals Cid committed
314 315
if(LCMS_FOUND)
  include_directories(${LCMS_INCLUDE_DIR})
316
endif()
Pino Toscano's avatar
Pino Toscano committed
317 318
if(LCMS2_FOUND)
  include_directories(${LCMS2_INCLUDE_DIR})
319
endif()
320

321 322 323 324 325 326 327 328 329 330
# 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}")
331 332
  endif()
endif()
333 334
if(NOT DEFINED POPPLER_DATADIR)
  set(POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler")
335
endif()
336

337
if(DEFINED COMPILE_WARNINGS)
338
else()
339
  set(COMPILE_WARNINGS "yes")
340
endif()
341 342
string(TOLOWER "${COMPILE_WARNINGS}" _comp_warnings)
if(_comp_warnings STREQUAL "no")
343
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_NO} ${CMAKE_CXX_FLAGS}")
344
endif()
345
if(_comp_warnings STREQUAL "yes")
346
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
347
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_YES} ${CMAKE_CXX_FLAGS}")
348
endif()
349
if(_comp_warnings STREQUAL "kde")
350
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
351
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_KDE} ${CMAKE_CXX_FLAGS}")
352
endif()
353 354 355 356


include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
357
configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)
358 359 360 361 362 363 364 365 366 367 368


set(poppler_SRCS
  goo/gfile.cc
  goo/gmempp.cc
  goo/GooHash.cc
  goo/GooList.cc
  goo/GooTimer.cc
  goo/GooString.cc
  goo/gmem.cc
  goo/FixedPoint.cc
369
  goo/NetPBMWriter.cc
370
  goo/PNGWriter.cc
371
  goo/TiffWriter.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
372
  goo/JpegWriter.cc
373
  goo/ImgWriter.cc
374
  goo/gstrtod.cc
375
  goo/grandom.cc
376
  goo/glibc.cc
377 378 379 380 381
  fofi/FoFiBase.cc
  fofi/FoFiEncodings.cc
  fofi/FoFiTrueType.cc
  fofi/FoFiType1.cc
  fofi/FoFiType1C.cc
382
  fofi/FoFiIdentifier.cc
383 384 385 386
  poppler/Annot.cc
  poppler/Array.cc
  poppler/BuiltinFont.cc
  poppler/BuiltinFontTables.cc
Hib Eris's avatar
Hib Eris committed
387
  poppler/CachedFile.cc
388 389 390
  poppler/Catalog.cc
  poppler/CharCodeToUnicode.cc
  poppler/CMap.cc
391
  poppler/DateInfo.cc
392 393 394
  poppler/Decrypt.cc
  poppler/Dict.cc
  poppler/Error.cc
395
  poppler/FileSpec.cc
396 397 398 399 400 401 402 403
  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
404
  poppler/Hints.cc
405 406 407 408
  poppler/JArithmeticDecoder.cc
  poppler/JBIG2Stream.cc
  poppler/Lexer.cc
  poppler/Link.cc
Hib Eris's avatar
Hib Eris committed
409
  poppler/Linearization.cc
410
  poppler/LocalPDFDocBuilder.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
411
  poppler/MarkedContentOutputDev.cc
412 413
  poppler/NameToCharCode.cc
  poppler/Object.cc
414
  poppler/OptionalContent.cc
415 416 417 418 419 420 421
  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
422
  poppler/PDFDocFactory.cc
423
  poppler/PopplerCache.cc
424 425 426
  poppler/ProfileData.cc
  poppler/PreScanOutputDev.cc
  poppler/PSTokenizer.cc
427
  poppler/SignatureInfo.cc
428
  poppler/Stream.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
429 430
  poppler/StructTreeRoot.cc
  poppler/StructElement.cc
431
  poppler/strtok_r.cpp
432 433
  poppler/UnicodeMap.cc
  poppler/UnicodeTypeTable.cc
434
  poppler/UTF.cc
435 436 437 438 439
  poppler/XRef.cc
  poppler/PSOutputDev.cc
  poppler/TextOutputDev.cc
  poppler/PageLabelInfo.cc
  poppler/SecurityHandler.cc
440
  poppler/StdinCachedFile.cc
441
  poppler/StdinPDFDocBuilder.cc
442
  poppler/Sound.cc
443
  poppler/ViewerPreferences.cc
444
  poppler/XpdfPluginAPI.cc
Hugo Mercier's avatar
Hugo Mercier committed
445
  poppler/Movie.cc
446
  poppler/Rendition.cc
447
)
448
set(poppler_LIBS ${FREETYPE_LIBRARIES})
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471
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/SplashT1Font.cc
    splash/SplashT1FontEngine.cc
    splash/SplashT1FontFile.cc
    splash/SplashXPath.cc
    splash/SplashXPathScanner.cc
  )
472
endif()
473 474
if(FONTCONFIG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${FONTCONFIG_LIBRARIES})
475
endif()
André Guerreiro's avatar
André Guerreiro committed
476

477 478 479 480 481
if(JPEG_FOUND)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/DCTStream.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES})
482
endif()
483 484
if(ENABLE_ZLIB)
  set(poppler_SRCS ${poppler_SRCS}
485
    poppler/FlateEncoder.cc
486 487
  )
  set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES})
488
endif()
489 490 491 492
if(ENABLE_ZLIB_UNCOMPRESS)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/FlateStream.cc
  )
493
endif()
Hib Eris's avatar
Hib Eris committed
494 495 496
if(ENABLE_LIBCURL)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/CurlCachedFile.cc
Hib Eris's avatar
Hib Eris committed
497
    poppler/CurlPDFDocBuilder.cc
Hib Eris's avatar
Hib Eris committed
498 499
  )
  set(poppler_LIBS ${poppler_LIBS} ${CURL_LIBRARIES})
500
endif()
André Guerreiro's avatar
André Guerreiro committed
501 502 503 504 505
if (ENABLE_NSS3)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/SignatureHandler.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${NSS3_LIBRARIES})
506
endif()
507
if(LIBOPENJPEG_FOUND)
508 509 510 511
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPEG2000Stream.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG_LIBRARIES})
Adrian Johnson's avatar
Adrian Johnson committed
512 513 514 515 516 517 518 519
  add_definitions(-DUSE_OPENJPEG1)
elseif (LIBOPENJPEG2_FOUND)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPEG2000Stream.cc
  )
  add_definitions(-DUSE_OPENJPEG2)
  set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG2_LIBRARIES})
else ()
520 521 522
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPXStream.cc
  )
Adrian Johnson's avatar
Adrian Johnson committed
523
endif()
524
if(USE_CMS)
Pino Toscano's avatar
Pino Toscano committed
525 526
  if(LCMS_FOUND)
    set(poppler_LIBS ${poppler_LIBS} ${LCMS_LIBRARIES})
527
  endif()
Pino Toscano's avatar
Pino Toscano committed
528 529
  if(LCMS2_FOUND)
    set(poppler_LIBS ${poppler_LIBS} ${LCMS2_LIBRARIES})
530 531
  endif()
endif()
532
if(WIN32)
533 534
  # use clean APIs
  add_definitions(-DWIN32_LEAN_AND_MEAN)
535 536
  # gdi32 is needed under win32
  set(poppler_LIBS ${poppler_LIBS} gdi32)
537
endif()
538 539
if(PNG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${PNG_LIBRARIES})
540
endif()
541 542
if(TIFF_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${TIFF_LIBRARIES})
543
endif()
544 545 546
if(HAVE_PTHREAD)
  set(poppler_LIBS ${poppler_LIBS} ${CMAKE_THREAD_LIBS_INIT})
endif()
547

548
if(MSVC)
549
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
550
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- ${CMAKE_CXX_FLAGS}")
551
add_library(poppler STATIC ${poppler_SRCS})
552
else()
553
add_library(poppler ${poppler_SRCS})
554
endif()
Albert Astals Cid's avatar
Albert Astals Cid committed
555
set_target_properties(poppler PROPERTIES VERSION 70.0.0 SOVERSION 70)
556
target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
557
install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX})
558 559 560 561 562 563 564

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
565
    poppler/CachedFile.h
566 567 568
    poppler/Catalog.h
    poppler/CharCodeToUnicode.h
    poppler/CMap.h
569
    poppler/DateInfo.h
570 571 572
    poppler/Decrypt.h
    poppler/Dict.h
    poppler/Error.h
573
    poppler/FileSpec.h
574 575 576 577 578 579 580 581
    poppler/FontEncodingTables.h
    poppler/FontInfo.h
    poppler/Form.h
    poppler/Function.cc
    poppler/Function.h
    poppler/Gfx.h
    poppler/GfxFont.h
    poppler/GfxState.h
582
    poppler/GfxState_helpers.h
583
    poppler/GlobalParams.h
Hib Eris's avatar
Hib Eris committed
584
    poppler/Hints.h
585 586 587 588
    poppler/JArithmeticDecoder.h
    poppler/JBIG2Stream.h
    poppler/Lexer.h
    poppler/Link.h
Hib Eris's avatar
Hib Eris committed
589
    poppler/Linearization.h
590
    poppler/LocalPDFDocBuilder.h
Albert Astals Cid's avatar
Albert Astals Cid committed
591
    poppler/MarkedContentOutputDev.h
592
    poppler/Movie.h
593 594
    poppler/NameToCharCode.h
    poppler/Object.h
595
    poppler/OptionalContent.h
596 597 598 599 600 601
    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
602
    poppler/PDFDocBuilder.h
603
    poppler/PDFDocEncoding.h
Hib Eris's avatar
Hib Eris committed
604
    poppler/PDFDocFactory.h
Albert Astals Cid's avatar
Albert Astals Cid committed
605
    poppler/PopplerCache.h
606 607 608
    poppler/ProfileData.h
    poppler/PreScanOutputDev.h
    poppler/PSTokenizer.h
609
    poppler/Rendition.h
610 611
    poppler/Stream-CCITT.h
    poppler/Stream.h
Albert Astals Cid's avatar
Albert Astals Cid committed
612 613
    poppler/StructElement.h
    poppler/StructTreeRoot.h
614 615 616 617 618 619
    poppler/UnicodeMap.h
    poppler/UnicodeMapTables.h
    poppler/UnicodeTypeTable.h
    poppler/UnicodeCClassTables.h
    poppler/UnicodeCompTables.h
    poppler/UnicodeDecompTables.h
620
    poppler/ViewerPreferences.h
621 622 623 624 625 626 627 628
    poppler/XRef.h
    poppler/CharTypes.h
    poppler/CompactFontTables.h
    poppler/ErrorCodes.h
    poppler/NameToUnicodeTable.h
    poppler/PSOutputDev.h
    poppler/TextOutputDev.h
    poppler/SecurityHandler.h
629
    poppler/StdinCachedFile.h
630
    poppler/StdinPDFDocBuilder.h
631
    poppler/UTF.h
632
    poppler/UTF8.h
633 634 635 636
    poppler/XpdfPluginAPI.h
    poppler/Sound.h
    ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
    DESTINATION include/poppler)
637 638 639 640 641 642 643 644 645 646
  install(FILES
    goo/GooHash.h
    goo/GooList.h
    goo/GooTimer.h
    goo/GooMutex.h
    goo/GooString.h
    goo/gtypes.h
    goo/gmem.h
    goo/gfile.h
    goo/FixedPoint.h
647
    goo/ImgWriter.h
648
    goo/GooLikely.h
649
    goo/gstrtod.h
650
    goo/grandom.h
651
    DESTINATION include/poppler/goo)
652 653 654 655
  if(PNG_FOUND)
    install(FILES
      goo/PNGWriter.h
      DESTINATION include/poppler/goo)
656
  endif()
657 658 659 660
  if(TIFF_FOUND)
    install(FILES
      goo/TiffWriter.h
      DESTINATION include/poppler/goo)
661
  endif()
662 663 664 665
  if(JPEG_FOUND)
    install(FILES
      goo/JpegWriter.h
      DESTINATION include/poppler/goo)
666
  endif()
667 668 669 670 671 672
  install(FILES
    fofi/FoFiBase.h
    fofi/FoFiEncodings.h
    fofi/FoFiTrueType.h
    fofi/FoFiType1.h
    fofi/FoFiType1C.h
673
    fofi/FoFiIdentifier.h
674
    DESTINATION include/poppler/fofi)
Hib Eris's avatar
Hib Eris committed
675 676 677
  if(ENABLE_LIBCURL)
    install(FILES
      poppler/CurlCachedFile.h
Hib Eris's avatar
Hib Eris committed
678
      poppler/CurlPDFDocBuilder.h
Hib Eris's avatar
Hib Eris committed
679
      DESTINATION include/poppler)
680
  endif()
681
  if(LIBOPENJPEG_FOUND)
682 683 684
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
685 686 687 688 689
  elseif(LIBOPENJPEG2_FOUND)
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
  else()
690 691 692
    install(FILES
      poppler/JPXStream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
693
  endif()
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
  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/SplashT1Font.h
      splash/SplashT1FontEngine.h
      splash/SplashT1FontFile.h
      splash/SplashTypes.h
      splash/SplashXPath.h
      splash/SplashXPathScanner.h
      DESTINATION include/poppler/splash)
723 724
  endif()
endif()
725 726 727 728


if(ENABLE_UTILS)
  add_subdirectory(utils)
729
endif()
730
if(ENABLE_GLIB)
731
  add_subdirectory(glib)
732
endif()
733
add_subdirectory(test)
734
if(ENABLE_QT4)
735
  add_subdirectory(qt4)
736
endif()
737
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
738
  add_subdirectory(qt5)
739
endif()
740 741
if(ENABLE_CPP)
  add_subdirectory(cpp)
742
endif()
743 744

set(PKG_CONFIG_VERSION_0_18 TRUE)
745 746
if(PKG_CONFIG_EXECUTABLE)
  exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR)
747
  macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18)
748
endif()
749 750 751
if(PKG_CONFIG_VERSION_0_18)
  set(PC_REQUIRES "")
  set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
752
else()
753 754
  set(PC_REQUIRES "poppler = ${POPPLER_VERSION}")
  set(PC_REQUIRES_PRIVATE "")
755
endif()
756

757
poppler_create_install_pkgconfig(poppler.pc lib${LIB_SUFFIX}/pkgconfig)
758
if(ENABLE_SPLASH)
759
  poppler_create_install_pkgconfig(poppler-splash.pc lib${LIB_SUFFIX}/pkgconfig)
760
endif()
761
if(ENABLE_QT4)
762
  poppler_create_install_pkgconfig(poppler-qt4.pc lib${LIB_SUFFIX}/pkgconfig)
763
endif()
764
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
765
  poppler_create_install_pkgconfig(poppler-qt5.pc lib${LIB_SUFFIX}/pkgconfig)
766
endif()
767
if(ENABLE_GLIB)
768
  poppler_create_install_pkgconfig(poppler-glib.pc lib${LIB_SUFFIX}/pkgconfig)
769
endif()
770
if(CAIRO_FOUND)
771
  poppler_create_install_pkgconfig(poppler-cairo.pc lib${LIB_SUFFIX}/pkgconfig)
772
endif()
773 774
if(ENABLE_CPP)
  poppler_create_install_pkgconfig(poppler-cpp.pc lib${LIB_SUFFIX}/pkgconfig)
775
endif()
776 777 778


message("Building Poppler with support for:")
779
show_end_message("font configuration" ${font_configuration})
780
show_end_message_yesno("splash output" ENABLE_SPLASH)
781 782 783
if(SPLASH_CMYK)
  message("      with CMYK support")
endif()
784
show_end_message_yesno("cairo output" CAIRO_FOUND)
785 786
show_end_message_yesno("qt4 wrapper" ENABLE_QT4)
show_end_message_yesno("qt5 wrapper" ENABLE_QT5)
787
show_end_message_yesno("glib wrapper" ENABLE_GLIB)
788
show_end_message_yesno("  introspection" INTROSPECTION_FOUND)
789
show_end_message_yesno("cpp wrapper" ENABLE_CPP)
790
show_end_message("use gtk-doc" "not supported with this CMake build system")
791 792
show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG)
show_end_message_yesno("use libpng" ENABLE_LIBPNG)
793
show_end_message_yesno("use libtiff" ENABLE_LIBTIFF)
794 795
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
796
show_end_message_yesno("use nss3" ENABLE_NSS3)
Hib Eris's avatar
Hib Eris committed
797
show_end_message_yesno("use curl" ENABLE_LIBCURL)
Adrian Johnson's avatar
Adrian Johnson committed
798 799 800 801 802 803 804
show_end_message_yesno("use libopenjpeg" WITH_OPENJPEG)
if(USE_OPENJPEG1)
  message("      with openjpeg1")
endif()
if(USE_OPENJPEG2)
  message("      with openjpeg2")
endif()
805
show_end_message_yesno("use cms" USE_CMS)
Pino Toscano's avatar
Pino Toscano committed
806 807
if(LCMS_FOUND)
  message("      with lcms1")
808
endif()
Pino Toscano's avatar
Pino Toscano committed
809 810
if(LCMS2_FOUND)
  message("      with lcms2")
811
endif()
812
show_end_message_yesno("command line utils" ENABLE_UTILS)
813
show_end_message("test data dir" ${TESTDATADIR})
814

815 816
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
817
endif()
818

819 820
if(USE_FIXEDPOINT AND USE_FLOAT)
  message("Warning: Single precision and fixed point options should not be enabled at the same time")
821
endif()
822

823
if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
824
  message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
825 826 827 828 829
endif()

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

831
if(ENABLE_ZLIB_UNCOMPRESS)
832
  message("Warning: Using zlib is not totally safe")
833
endif()
834

835
if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
836
  message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
837 838 839 840 841
endif()

if(NOT HAVE_JPX_DECODER)
  message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
endif()
842 843 844 845 846 847 848 849 850

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
        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,'
        COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})