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 "60")
Albert Astals Cid's avatar
Albert Astals Cid committed
26
set(POPPLER_MICRO_VERSION "1")
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
option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
42
option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
43 44
option(ENABLE_QT4 "Compile poppler qt4 wrapper." ON)
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
45
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")
46
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.")
47
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")
48
option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
49 50
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
51
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
52 53
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
54
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
55
if(WIN32)
56
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
57
else()
58
  set(ENABLE_RELOCATABLE OFF)
59
endif()
60
option(EXTRA_WARN "Enable extra compile warnings" OFF)
61

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

65 66
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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

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

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

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

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

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

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

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

if(ENABLE_ZLIB)
  include_directories(${ZLIB_INCLUDE_DIR})
296
endif()
André Guerreiro's avatar
André Guerreiro committed
297 298 299 300

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

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

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


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


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
365
  goo/NetPBMWriter.cc
366
  goo/PNGWriter.cc
367
  goo/TiffWriter.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
368
  goo/JpegWriter.cc
369
  goo/ImgWriter.cc
370
  goo/gstrtod.cc
371
  goo/grandom.cc
372
  goo/glibc.cc
373 374 375 376 377
  fofi/FoFiBase.cc
  fofi/FoFiEncodings.cc
  fofi/FoFiTrueType.cc
  fofi/FoFiType1.cc
  fofi/FoFiType1C.cc
378
  fofi/FoFiIdentifier.cc
379 380 381 382
  poppler/Annot.cc
  poppler/Array.cc
  poppler/BuiltinFont.cc
  poppler/BuiltinFontTables.cc
Hib Eris's avatar
Hib Eris committed
383
  poppler/CachedFile.cc
384 385 386
  poppler/Catalog.cc
  poppler/CharCodeToUnicode.cc
  poppler/CMap.cc
387
  poppler/DateInfo.cc
388 389 390
  poppler/Decrypt.cc
  poppler/Dict.cc
  poppler/Error.cc
391
  poppler/FileSpec.cc
392 393 394 395 396 397 398 399
  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
400
  poppler/Hints.cc
401 402 403 404
  poppler/JArithmeticDecoder.cc
  poppler/JBIG2Stream.cc
  poppler/Lexer.cc
  poppler/Link.cc
Hib Eris's avatar
Hib Eris committed
405
  poppler/Linearization.cc
406
  poppler/LocalPDFDocBuilder.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
407
  poppler/MarkedContentOutputDev.cc
408 409
  poppler/NameToCharCode.cc
  poppler/Object.cc
410
  poppler/OptionalContent.cc
411 412 413 414 415 416 417
  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
418
  poppler/PDFDocFactory.cc
419
  poppler/PopplerCache.cc
420 421 422
  poppler/ProfileData.cc
  poppler/PreScanOutputDev.cc
  poppler/PSTokenizer.cc
423
  poppler/SignatureInfo.cc
424
  poppler/Stream.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
425 426
  poppler/StructTreeRoot.cc
  poppler/StructElement.cc
427
  poppler/strtok_r.cpp
428 429
  poppler/UnicodeMap.cc
  poppler/UnicodeTypeTable.cc
430
  poppler/UTF.cc
431 432 433 434 435
  poppler/XRef.cc
  poppler/PSOutputDev.cc
  poppler/TextOutputDev.cc
  poppler/PageLabelInfo.cc
  poppler/SecurityHandler.cc
436
  poppler/StdinCachedFile.cc
437
  poppler/StdinPDFDocBuilder.cc
438
  poppler/Sound.cc
439
  poppler/ViewerPreferences.cc
440
  poppler/XpdfPluginAPI.cc
Hugo Mercier's avatar
Hugo Mercier committed
441
  poppler/Movie.cc
442
  poppler/Rendition.cc
443
)
444
set(poppler_LIBS ${FREETYPE_LIBRARIES})
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/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 71.0.0 SOVERSION 71)
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
    poppler/FontEncodingTables.h
    poppler/FontInfo.h
    poppler/Form.h
    poppler/Function.h
    poppler/Gfx.h
    poppler/GfxFont.h
    poppler/GfxState.h
574
    poppler/GfxState_helpers.h
575
    poppler/GlobalParams.h
Hib Eris's avatar
Hib Eris committed
576
    poppler/Hints.h
577 578 579 580
    poppler/JArithmeticDecoder.h
    poppler/JBIG2Stream.h
    poppler/Lexer.h
    poppler/Link.h
Hib Eris's avatar
Hib Eris committed
581
    poppler/Linearization.h
582
    poppler/LocalPDFDocBuilder.h
Albert Astals Cid's avatar
Albert Astals Cid committed
583
    poppler/MarkedContentOutputDev.h
584
    poppler/Movie.h
585 586
    poppler/NameToCharCode.h
    poppler/Object.h
587
    poppler/OptionalContent.h
588 589 590 591 592 593
    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
594
    poppler/PDFDocBuilder.h
595
    poppler/PDFDocEncoding.h
Hib Eris's avatar
Hib Eris committed
596
    poppler/PDFDocFactory.h
Albert Astals Cid's avatar
Albert Astals Cid committed
597
    poppler/PopplerCache.h
598 599 600
    poppler/ProfileData.h
    poppler/PreScanOutputDev.h
    poppler/PSTokenizer.h
601
    poppler/Rendition.h
602 603
    poppler/Stream-CCITT.h
    poppler/Stream.h
Albert Astals Cid's avatar
Albert Astals Cid committed
604 605
    poppler/StructElement.h
    poppler/StructTreeRoot.h
606 607 608 609 610 611
    poppler/UnicodeMap.h
    poppler/UnicodeMapTables.h
    poppler/UnicodeTypeTable.h
    poppler/UnicodeCClassTables.h
    poppler/UnicodeCompTables.h
    poppler/UnicodeDecompTables.h
612
    poppler/ViewerPreferences.h
613 614 615 616 617 618 619 620
    poppler/XRef.h
    poppler/CharTypes.h
    poppler/CompactFontTables.h
    poppler/ErrorCodes.h
    poppler/NameToUnicodeTable.h
    poppler/PSOutputDev.h
    poppler/TextOutputDev.h
    poppler/SecurityHandler.h
621
    poppler/StdinCachedFile.h
622
    poppler/StdinPDFDocBuilder.h
623
    poppler/UTF.h
624
    poppler/UTF8.h
625 626 627 628
    poppler/XpdfPluginAPI.h
    poppler/Sound.h
    ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
    DESTINATION include/poppler)
629 630 631 632 633 634 635 636 637 638
  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
639
    goo/ImgWriter.h
640
    goo/GooLikely.h
641
    goo/gstrtod.h
642
    goo/grandom.h
643
    DESTINATION include/poppler/goo)
644 645 646 647
  if(PNG_FOUND)
    install(FILES
      goo/PNGWriter.h
      DESTINATION include/poppler/goo)
648
  endif()
649 650 651 652
  if(TIFF_FOUND)
    install(FILES
      goo/TiffWriter.h
      DESTINATION include/poppler/goo)
653
  endif()
654 655 656 657
  if(JPEG_FOUND)
    install(FILES
      goo/JpegWriter.h
      DESTINATION include/poppler/goo)
658
  endif()
659 660 661 662 663 664
  install(FILES
    fofi/FoFiBase.h
    fofi/FoFiEncodings.h
    fofi/FoFiTrueType.h
    fofi/FoFiType1.h
    fofi/FoFiType1C.h
665
    fofi/FoFiIdentifier.h
666
    DESTINATION include/poppler/fofi)
Hib Eris's avatar
Hib Eris committed
667 668 669
  if(ENABLE_LIBCURL)
    install(FILES
      poppler/CurlCachedFile.h
Hib Eris's avatar
Hib Eris committed
670
      poppler/CurlPDFDocBuilder.h
Hib Eris's avatar
Hib Eris committed
671
      DESTINATION include/poppler)
672
  endif()
673
  if(LIBOPENJPEG_FOUND)
674 675 676
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
677 678 679 680 681
  elseif(LIBOPENJPEG2_FOUND)
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
  else()
682 683 684
    install(FILES
      poppler/JPXStream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
685
  endif()
686 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
  if(ENABLE_SPLASH)
    install(FILES
      poppler/SplashOutputDev.h
      DESTINATION include/poppler)
    install(FILES
      splash/Splash.h
      splash/SplashBitmap.h
      splash/SplashClip.h
      splash/SplashErrorCodes.h
      splash/SplashFTFont.h
      splash/SplashFTFontEngine.h
      splash/SplashFTFontFile.h
      splash/SplashFont.h
      splash/SplashFontEngine.h
      splash/SplashFontFile.h
      splash/SplashFontFileID.h
      splash/SplashGlyphBitmap.h
      splash/SplashMath.h
      splash/SplashPath.h
      splash/SplashPattern.h
      splash/SplashScreen.h
      splash/SplashState.h
      splash/SplashTypes.h
      splash/SplashXPath.h
      splash/SplashXPathScanner.h
      DESTINATION include/poppler/splash)
712 713
  endif()
endif()
714 715 716 717


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

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

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


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

804 805
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
806
endif()
807

808 809
if(USE_FIXEDPOINT AND USE_FLOAT)
  message("Warning: Single precision and fixed point options should not be enabled at the same time")
810
endif()
811

812
if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
813
  message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
814 815 816 817 818
endif()

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

820
if(ENABLE_ZLIB_UNCOMPRESS)
821
  message("Warning: Using zlib is not totally safe")
822
endif()
823

824
if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
825
  message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
826 827 828 829 830
endif()

if(NOT HAVE_JPX_DECODER)
  message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
endif()
831 832 833 834 835 836 837

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