CMakeLists.txt 25.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
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
option(EXTRA_WARN "Enable extra compile warnings" OFF)
60

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

64 65
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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

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

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

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

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

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

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

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

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

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

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

339
if(EXTRA_WARN)
340
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
341 342
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_EXTRA} ${CMAKE_CXX_FLAGS}")
else()
343
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
344
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS} ${CMAKE_CXX_FLAGS}")
345
endif()
346 347 348 349


include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
350
configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)
351 352 353 354 355 356 357 358 359 360 361


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

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

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

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


if(ENABLE_UTILS)
  add_subdirectory(utils)
722
endif()
723
if(ENABLE_GLIB)
724
  add_subdirectory(glib)
725
endif()
726
add_subdirectory(test)
727
if(ENABLE_QT4)
728
  add_subdirectory(qt4)
729
endif()
730
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
731
  add_subdirectory(qt5)
732
endif()
733 734
if(ENABLE_CPP)
  add_subdirectory(cpp)
735
endif()
736 737

set(PKG_CONFIG_VERSION_0_18 TRUE)
738 739
if(PKG_CONFIG_EXECUTABLE)
  exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR)
740
  macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18)
741
endif()
742 743 744
if(PKG_CONFIG_VERSION_0_18)
  set(PC_REQUIRES "")
  set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
745
else()
746 747
  set(PC_REQUIRES "poppler = ${POPPLER_VERSION}")
  set(PC_REQUIRES_PRIVATE "")
748
endif()
749

750
poppler_create_install_pkgconfig(poppler.pc lib${LIB_SUFFIX}/pkgconfig)
751
if(ENABLE_SPLASH)
752
  poppler_create_install_pkgconfig(poppler-splash.pc lib${LIB_SUFFIX}/pkgconfig)
753
endif()
754
if(ENABLE_QT4)
755
  poppler_create_install_pkgconfig(poppler-qt4.pc lib${LIB_SUFFIX}/pkgconfig)
756
endif()
757
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
758
  poppler_create_install_pkgconfig(poppler-qt5.pc lib${LIB_SUFFIX}/pkgconfig)
759
endif()
760
if(ENABLE_GLIB)
761
  poppler_create_install_pkgconfig(poppler-glib.pc lib${LIB_SUFFIX}/pkgconfig)
762
endif()
763
if(CAIRO_FOUND)
764
  poppler_create_install_pkgconfig(poppler-cairo.pc lib${LIB_SUFFIX}/pkgconfig)
765
endif()
766 767
if(ENABLE_CPP)
  poppler_create_install_pkgconfig(poppler-cpp.pc lib${LIB_SUFFIX}/pkgconfig)
768
endif()
769 770 771


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

808 809
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
810
endif()
811

812 813
if(USE_FIXEDPOINT AND USE_FLOAT)
  message("Warning: Single precision and fixed point options should not be enabled at the same time")
814
endif()
815

816
if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
817
  message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
818 819 820 821 822
endif()

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

824
if(ENABLE_ZLIB_UNCOMPRESS)
825
  message("Warning: Using zlib is not totally safe")
826
endif()
827

828
if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
829
  message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
830 831 832 833 834
endif()

if(NOT HAVE_JPX_DECODER)
  message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
endif()
835 836 837 838 839 840 841 842 843

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})