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 14
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
15
find_package(Threads)
16 17
include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
18 19
include(CheckFileOffsetBits)
CHECK_FILE_OFFSET_BITS()
20

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

26
set(POPPLER_MAJOR_VERSION "0")
Albert Astals Cid's avatar
Albert Astals Cid committed
27
set(POPPLER_MINOR_VERSION "60")
Albert Astals Cid's avatar
Albert Astals Cid committed
28
set(POPPLER_MICRO_VERSION "1")
29
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
30

Albert Astals Cid's avatar
Albert Astals Cid committed
31
set (CMAKE_CXX_STANDARD 11)
32
set (CMAKE_CXX_EXTENSIONS OFF)
Albert Astals Cid's avatar
Albert Astals Cid committed
33

34 35 36 37
# 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
38
option(BUILD_QT5_TESTS "Whether compile the Qt5 test programs." ON)
39
option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON)
40 41
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
42
option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
43
option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
44
option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
45 46
option(ENABLE_QT4 "Compile poppler qt4 wrapper." ON)
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
47
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")
48
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.")
49
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")
50
option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
51 52
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
53
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
54 55
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
56
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
57
if(WIN32)
58
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
59
else()
60
  set(ENABLE_RELOCATABLE OFF)
61
endif()
62
option(EXTRA_WARN "Enable extra compile warnings" OFF)
63

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

67 68
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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

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

105 106 107 108
if(CMAKE_USE_PTHREADS_INIT OR WIN32)
  set(MULTITHREADED ON)
endif()

109 110 111 112 113
# Enable these unconditionally.
set(OPI_SUPPORT ON)
set(TEXTOUT_WORD_LIST ON)

# setting the minimum required versions for some components
114
set(QT4_MIN_VERSION "4.7.0")
115
set(CAIRO_VERSION "1.10.0")
116
set(GLIB_REQUIRED "2.41")
117 118 119

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

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()
161
endif()
162

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

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

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

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

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

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


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


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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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