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
  set(ENABLE_GLIB OFF)
180
endif()
181 182 183 184
if(ENABLE_CPP)
  macro_optional_find_package(Iconv)
  set(ENABLE_CPP ${ICONV_FOUND})
  set(HAVE_ICONV ${ICONV_FOUND})
185
endif()
186 187 188
if(ENABLE_ZLIB)
  find_package(ZLIB)
  if(ZLIB_FOUND)
Albert Astals Cid's avatar
Albert Astals Cid committed
189
    set(HAVE_LIBZ ${ZLIB_FOUND})
190
  endif()
191
  set(ENABLE_ZLIB ${ZLIB_FOUND})
192
endif()
193 194 195
if(ENABLE_ZLIB_UNCOMPRESS AND NOT ENABLE_ZLIB)
  message("Warning: ENABLE_ZLIB_UNCOMPRESS requires ENABLE_ZLIB")
  set(ENABLE_ZLIB_UNCOMPRESS FALSE)
196
endif()
Adrian Johnson's avatar
Adrian Johnson committed
197 198
set(USE_OPENJPEG1 FALSE)
set(USE_OPENJPEG2 FALSE)
199
set(WITH_OPENJPEG FALSE)
Adrian Johnson's avatar
Adrian Johnson committed
200
if(ENABLE_LIBOPENJPEG STREQUAL "auto")
201 202 203 204 205 206 207
  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})  
208 209 210
    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
211
  endif()
212
  set(HAVE_JPX_DECODER ON)
Adrian Johnson's avatar
Adrian Johnson committed
213 214 215 216
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg1")
  find_package(LIBOPENJPEG)
  set(USE_OPENJPEG1 ${LIBOPENJPEG_FOUND})
  set(WITH_OPENJPEG ${LIBOPENJPEG_FOUND})
217 218 219 220
  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
221 222 223 224
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
  find_package(LIBOPENJPEG2)
  set(USE_OPENJPEG2 ${LIBOPENJPEG2_FOUND})
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
225 226 227 228 229 230 231 232 233 234 235 236
  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
237
endif()
238
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
239
if(ENABLE_CMS STREQUAL "auto")
Pino Toscano's avatar
Pino Toscano committed
240
  find_package(LCMS2)
241 242
  set(USE_CMS ${LCMS2_FOUND})
  if(NOT LCMS2_FOUND)
Pino Toscano's avatar
Pino Toscano committed
243 244 245
    find_package(LCMS)
    set(USE_CMS ${LCMS_FOUND})
    set(USE_LCMS1 ${LCMS_FOUND})
246
  endif()
247 248 249 250 251 252 253 254
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
255 256 257 258
if(ENABLE_LIBCURL)
  find_package(CURL)
  include_directories(${CURL_INCLUDE_DIR})
  set(POPPLER_HAS_CURL_SUPPORT ON)
259
endif()
260

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

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

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

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

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


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


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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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