CMakeLists.txt 22.9 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 15 16 17 18 19
if (WIN32)
  message("-- Using win32 threads")
else()
  set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
  set(THREADS_PREFER_PTHREAD_FLAG TRUE)
  find_package(Threads)
endif()
20 21
include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
22 23
include(CheckFileOffsetBits)
CHECK_FILE_OFFSET_BITS()
24

25 26
include(GNUInstallDirs)

27 28 29 30 31
find_package (ECM 1.6.0 QUIET NO_MODULE)
if (ECM_FOUND)
    include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
endif()

32
set(POPPLER_MAJOR_VERSION "0")
Albert Astals Cid's avatar
0.63  
Albert Astals Cid committed
33
set(POPPLER_MINOR_VERSION "63")
Albert Astals Cid's avatar
Albert Astals Cid committed
34
set(POPPLER_MICRO_VERSION "0")
35
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
36

Albert Astals Cid's avatar
Albert Astals Cid committed
37
set (CMAKE_CXX_STANDARD 11)
38
set (CMAKE_CXX_EXTENSIONS OFF)
Albert Astals Cid's avatar
Albert Astals Cid committed
39

40 41 42
# command line switches
option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF)
option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON)
Albert Astals Cid's avatar
Albert Astals Cid committed
43
option(BUILD_QT5_TESTS "Whether compile the Qt5 test programs." ON)
44
option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON)
45 46
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
47
option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
48
option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
49
option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
50
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
51
set(ENABLE_LIBOPENJPEG "openjpeg2" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: openjpeg2, unmaintained, none. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: openjpeg2")
52
set(ENABLE_CMS "lcms2" CACHE STRING "Use color management system. Possible values: lcms2, none. 'none' disables color management system.")
53
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")
54
option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
55 56
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
57
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
58 59
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
60
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
61
if(WIN32)
62
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
63
else()
64
  set(ENABLE_RELOCATABLE OFF)
65
endif()
66
option(EXTRA_WARN "Enable extra compile warnings" OFF)
67

68 69
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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

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

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

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

# setting the minimum required versions for some components
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

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)
  set(ENABLE_ZLIB ${ZLIB_FOUND})
189
endif()
190 191 192
if(ENABLE_ZLIB_UNCOMPRESS AND NOT ENABLE_ZLIB)
  message("Warning: ENABLE_ZLIB_UNCOMPRESS requires ENABLE_ZLIB")
  set(ENABLE_ZLIB_UNCOMPRESS FALSE)
193
endif()
194
set(WITH_OPENJPEG FALSE)
195
if(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
196
  find_package(LIBOPENJPEG2)
Adrian Johnson's avatar
Adrian Johnson committed
197
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
198 199 200 201 202 203 204 205 206 207 208 209
  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
210
endif()
211
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
212
if(ENABLE_CMS STREQUAL "lcms2")
213 214
  find_package(LCMS2)
  set(USE_CMS ${LCMS2_FOUND})
215 216
elseif(NOT ENABLE_CMS STREQUAL "none")
  message(FATAL_ERROR "Invalid ENABLE_CMS value: ${ENABLE_CMS}")
217
endif()
Hib Eris's avatar
Hib Eris committed
218 219
if(ENABLE_LIBCURL)
  find_package(CURL)
220 221 222 223 224 225
  if(CURL_FOUND)
    include_directories(${CURL_INCLUDE_DIR})
    set(POPPLER_HAS_CURL_SUPPORT ON)
  else()
    set(ENABLE_LIBCURL OFF)
  endif()
226
endif()
227

228 229 230
if(MINGW)
  # Use mingw's ansi stdio extensions
  add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
231
endif()
232 233
if(FONTCONFIG_FOUND)
  add_definitions(${FONTCONFIG_DEFINITIONS})
234
  include_directories(${FONTCONFIG_INCLUDE_DIR})
235
endif()
236 237 238 239
if(WITH_FONTCONFIGURATION_WIN32)
  if(MINGW)
    # Set the minimum required Internet Explorer version to 5.0
    add_definitions(-D_WIN32_IE=0x0500)
240 241
  endif()
endif()
242 243 244 245 246 247 248
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
249
  ${FREETYPE_INCLUDE_DIRS}
250 251 252 253
)

if(ENABLE_ZLIB)
  include_directories(${ZLIB_INCLUDE_DIR})
254
endif()
André Guerreiro's avatar
André Guerreiro committed
255 256 257 258

if (NSS3_FOUND)
  add_definitions(${NSS3_CFLAGS})
  set(ENABLE_NSS3 ON)
259
endif()
260 261
if(JPEG_FOUND)
  include_directories(${JPEG_INCLUDE_DIR})
262
endif()
263 264 265
if(PNG_FOUND)
  include_directories(${PNG_INCLUDE_DIR})
  set(ENABLE_LIBPNG ON)
266
endif()
267 268 269
if(TIFF_FOUND)
  include_directories(${TIFF_INCLUDE_DIR})
  set(ENABLE_LIBTIFF ON)
270
endif()
Adrian Johnson's avatar
Adrian Johnson committed
271 272 273
if(LIBOPENJPEG2_FOUND)
  include_directories(${LIBOPENJPEG2_INCLUDE_DIRS})
endif()
Pino Toscano's avatar
Pino Toscano committed
274 275
if(LCMS2_FOUND)
  include_directories(${LCMS2_INCLUDE_DIR})
276
endif()
277

278 279 280 281 282 283 284 285 286 287
# 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}")
288 289
  endif()
endif()
290 291
if(NOT DEFINED POPPLER_DATADIR)
  set(POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler")
292
endif()
293

294
if(EXTRA_WARN)
295
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
296 297
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_EXTRA} ${CMAKE_CXX_FLAGS}")
else()
298
  set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
299
  set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS} ${CMAKE_CXX_FLAGS}")
300
endif()
301 302 303 304


include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
305
configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)
306 307 308 309 310 311 312 313 314 315 316


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
317
  goo/NetPBMWriter.cc
318
  goo/PNGWriter.cc
319
  goo/TiffWriter.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
320
  goo/JpegWriter.cc
321
  goo/ImgWriter.cc
322
  goo/gstrtod.cc
323
  goo/grandom.cc
324
  goo/glibc.cc
Adrian Johnson's avatar
Adrian Johnson committed
325
  goo/glibc_strtok_r.cc
326 327 328 329 330
  fofi/FoFiBase.cc
  fofi/FoFiEncodings.cc
  fofi/FoFiTrueType.cc
  fofi/FoFiType1.cc
  fofi/FoFiType1C.cc
331
  fofi/FoFiIdentifier.cc
332 333 334 335
  poppler/Annot.cc
  poppler/Array.cc
  poppler/BuiltinFont.cc
  poppler/BuiltinFontTables.cc
Hib Eris's avatar
Hib Eris committed
336
  poppler/CachedFile.cc
337 338 339
  poppler/Catalog.cc
  poppler/CharCodeToUnicode.cc
  poppler/CMap.cc
340
  poppler/DateInfo.cc
341 342 343
  poppler/Decrypt.cc
  poppler/Dict.cc
  poppler/Error.cc
344
  poppler/FileSpec.cc
345 346 347 348 349 350 351 352
  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
353
  poppler/Hints.cc
354 355 356 357
  poppler/JArithmeticDecoder.cc
  poppler/JBIG2Stream.cc
  poppler/Lexer.cc
  poppler/Link.cc
Hib Eris's avatar
Hib Eris committed
358
  poppler/Linearization.cc
359
  poppler/LocalPDFDocBuilder.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
360
  poppler/MarkedContentOutputDev.cc
361 362
  poppler/NameToCharCode.cc
  poppler/Object.cc
363
  poppler/OptionalContent.cc
364 365 366 367 368 369 370
  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
371
  poppler/PDFDocFactory.cc
372
  poppler/PopplerCache.cc
373 374 375
  poppler/ProfileData.cc
  poppler/PreScanOutputDev.cc
  poppler/PSTokenizer.cc
376
  poppler/SignatureInfo.cc
377
  poppler/Stream.cc
Albert Astals Cid's avatar
Albert Astals Cid committed
378 379
  poppler/StructTreeRoot.cc
  poppler/StructElement.cc
380
  poppler/UnicodeMap.cc
381
  poppler/UnicodeMapFuncs.cc
382
  poppler/UnicodeTypeTable.cc
383
  poppler/UTF.cc
384 385 386 387 388
  poppler/XRef.cc
  poppler/PSOutputDev.cc
  poppler/TextOutputDev.cc
  poppler/PageLabelInfo.cc
  poppler/SecurityHandler.cc
389
  poppler/StdinCachedFile.cc
390
  poppler/StdinPDFDocBuilder.cc
391
  poppler/Sound.cc
392
  poppler/ViewerPreferences.cc
393
  poppler/XpdfPluginAPI.cc
Hugo Mercier's avatar
Hugo Mercier committed
394
  poppler/Movie.cc
395
  poppler/Rendition.cc
396
)
397
set(poppler_LIBS ${FREETYPE_LIBRARIES})
398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
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
  )
418
endif()
419 420
if(FONTCONFIG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${FONTCONFIG_LIBRARIES})
421
endif()
André Guerreiro's avatar
André Guerreiro committed
422

423 424 425 426 427
if(JPEG_FOUND)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/DCTStream.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES})
428
endif()
429 430
if(ENABLE_ZLIB)
  set(poppler_SRCS ${poppler_SRCS}
431
    poppler/FlateEncoder.cc
432 433
  )
  set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES})
434
endif()
435 436 437 438
if(ENABLE_ZLIB_UNCOMPRESS)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/FlateStream.cc
  )
439
endif()
Hib Eris's avatar
Hib Eris committed
440 441 442
if(ENABLE_LIBCURL)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/CurlCachedFile.cc
Hib Eris's avatar
Hib Eris committed
443
    poppler/CurlPDFDocBuilder.cc
Hib Eris's avatar
Hib Eris committed
444 445
  )
  set(poppler_LIBS ${poppler_LIBS} ${CURL_LIBRARIES})
446
endif()
André Guerreiro's avatar
André Guerreiro committed
447 448 449 450 451
if (ENABLE_NSS3)
  set(poppler_SRCS ${poppler_SRCS}
    poppler/SignatureHandler.cc
  )
  set(poppler_LIBS ${poppler_LIBS} ${NSS3_LIBRARIES})
452
endif()
453
if (LIBOPENJPEG2_FOUND)
454 455 456
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPEG2000Stream.cc
  )
Adrian Johnson's avatar
Adrian Johnson committed
457 458
  set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG2_LIBRARIES})
else ()
459 460 461
  set(poppler_SRCS ${poppler_SRCS}
    poppler/JPXStream.cc
  )
Adrian Johnson's avatar
Adrian Johnson committed
462
endif()
463
if(USE_CMS)
464
  set(poppler_LIBS ${poppler_LIBS} ${LCMS2_LIBRARIES})
465
endif()
466
if(WIN32)
467 468
  # use clean APIs
  add_definitions(-DWIN32_LEAN_AND_MEAN)
469 470
  # gdi32 is needed under win32
  set(poppler_LIBS ${poppler_LIBS} gdi32)
471
endif()
472 473
if(PNG_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${PNG_LIBRARIES})
474
endif()
475 476
if(TIFF_FOUND)
  set(poppler_LIBS ${poppler_LIBS} ${TIFF_LIBRARIES})
477
endif()
478

479
if(MSVC)
480
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
481
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- ${CMAKE_CXX_FLAGS}")
482
add_library(poppler STATIC ${poppler_SRCS})
483
else()
484
add_library(poppler ${poppler_SRCS})
485
endif()
Albert Astals Cid's avatar
0.63  
Albert Astals Cid committed
486
set_target_properties(poppler PROPERTIES VERSION 74.0.0 SOVERSION 74)
487 488 489 490
if(MINGW)
    get_target_property(POPPLER_SOVERSION poppler SOVERSION)
    set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
491
target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
492 493 494
if(CMAKE_USE_PTHREADS_INIT)
   target_link_libraries(poppler LINK_PRIVATE Threads::Threads)
endif()
495
install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
496 497 498 499 500 501 502

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
503
    poppler/CachedFile.h
504 505 506
    poppler/Catalog.h
    poppler/CharCodeToUnicode.h
    poppler/CMap.h
507
    poppler/DateInfo.h
508 509 510
    poppler/Decrypt.h
    poppler/Dict.h
    poppler/Error.h
511
    poppler/FileSpec.h
512 513 514 515 516 517 518
    poppler/FontEncodingTables.h
    poppler/FontInfo.h
    poppler/Form.h
    poppler/Function.h
    poppler/Gfx.h
    poppler/GfxFont.h
    poppler/GfxState.h
519
    poppler/GfxState_helpers.h
520
    poppler/GlobalParams.h
Hib Eris's avatar
Hib Eris committed
521
    poppler/Hints.h
522 523 524 525
    poppler/JArithmeticDecoder.h
    poppler/JBIG2Stream.h
    poppler/Lexer.h
    poppler/Link.h
Hib Eris's avatar
Hib Eris committed
526
    poppler/Linearization.h
527
    poppler/LocalPDFDocBuilder.h
Albert Astals Cid's avatar
Albert Astals Cid committed
528
    poppler/MarkedContentOutputDev.h
529
    poppler/Movie.h
530 531
    poppler/NameToCharCode.h
    poppler/Object.h
532
    poppler/OptionalContent.h
533 534 535 536 537 538
    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
539
    poppler/PDFDocBuilder.h
540
    poppler/PDFDocEncoding.h
Hib Eris's avatar
Hib Eris committed
541
    poppler/PDFDocFactory.h
Albert Astals Cid's avatar
Albert Astals Cid committed
542
    poppler/PopplerCache.h
543 544 545
    poppler/ProfileData.h
    poppler/PreScanOutputDev.h
    poppler/PSTokenizer.h
546
    poppler/Rendition.h
547 548
    poppler/Stream-CCITT.h
    poppler/Stream.h
Albert Astals Cid's avatar
Albert Astals Cid committed
549 550
    poppler/StructElement.h
    poppler/StructTreeRoot.h
551
    poppler/UnicodeMap.h
552
    poppler/UnicodeMapFuncs.h
553 554 555 556 557
    poppler/UnicodeMapTables.h
    poppler/UnicodeTypeTable.h
    poppler/UnicodeCClassTables.h
    poppler/UnicodeCompTables.h
    poppler/UnicodeDecompTables.h
558
    poppler/ViewerPreferences.h
559 560 561 562 563 564 565 566
    poppler/XRef.h
    poppler/CharTypes.h
    poppler/CompactFontTables.h
    poppler/ErrorCodes.h
    poppler/NameToUnicodeTable.h
    poppler/PSOutputDev.h
    poppler/TextOutputDev.h
    poppler/SecurityHandler.h
567
    poppler/StdinCachedFile.h
568
    poppler/StdinPDFDocBuilder.h
569
    poppler/UTF.h
570 571 572 573
    poppler/XpdfPluginAPI.h
    poppler/Sound.h
    ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
    DESTINATION include/poppler)
574 575 576 577 578 579 580 581 582 583
  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
584
    goo/ImgWriter.h
585
    goo/GooLikely.h
586
    goo/gstrtod.h
587
    goo/grandom.h
588
    DESTINATION include/poppler/goo)
589 590 591 592
  if(PNG_FOUND)
    install(FILES
      goo/PNGWriter.h
      DESTINATION include/poppler/goo)
593
  endif()
594 595 596 597
  if(TIFF_FOUND)
    install(FILES
      goo/TiffWriter.h
      DESTINATION include/poppler/goo)
598
  endif()
599 600 601 602
  if(JPEG_FOUND)
    install(FILES
      goo/JpegWriter.h
      DESTINATION include/poppler/goo)
603
  endif()
604 605 606 607 608 609
  install(FILES
    fofi/FoFiBase.h
    fofi/FoFiEncodings.h
    fofi/FoFiTrueType.h
    fofi/FoFiType1.h
    fofi/FoFiType1C.h
610
    fofi/FoFiIdentifier.h
611
    DESTINATION include/poppler/fofi)
Hib Eris's avatar
Hib Eris committed
612 613 614
  if(ENABLE_LIBCURL)
    install(FILES
      poppler/CurlCachedFile.h
Hib Eris's avatar
Hib Eris committed
615
      poppler/CurlPDFDocBuilder.h
Hib Eris's avatar
Hib Eris committed
616
      DESTINATION include/poppler)
617
  endif()
618
  if(LIBOPENJPEG2_FOUND)
Adrian Johnson's avatar
Adrian Johnson committed
619 620 621 622
    install(FILES
      poppler/JPEG2000Stream.h
      DESTINATION include/poppler)
  else()
623 624 625
    install(FILES
      poppler/JPXStream.h
      DESTINATION include/poppler)
Adrian Johnson's avatar
Adrian Johnson committed
626
  endif()
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652
  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)
653 654
  endif()
endif()
655 656 657 658


if(ENABLE_UTILS)
  add_subdirectory(utils)
659
endif()
660
if(ENABLE_GLIB)
661
  add_subdirectory(glib)
662
endif()
663
add_subdirectory(test)
664
if(ENABLE_QT5)
Albert Astals Cid's avatar
Albert Astals Cid committed
665
  add_subdirectory(qt5)
666
endif()
667 668
if(ENABLE_CPP)
  add_subdirectory(cpp)
669
endif()
670 671

set(PKG_CONFIG_VERSION_0_18 TRUE)
672 673
if(PKG_CONFIG_EXECUTABLE)
  exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR)
674
  macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18)
675
endif()
676 677 678
if(PKG_CONFIG_VERSION_0_18)
  set(PC_REQUIRES "")
  set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
679
else()
680 681
  set(PC_REQUIRES "poppler = ${POPPLER_VERSION}")
  set(PC_REQUIRES_PRIVATE "")
682
endif()
683

684
poppler_create_install_pkgconfig(poppler.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
685
if(ENABLE_SPLASH)
686
  poppler_create_install_pkgconfig(poppler-splash.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
687
endif()
688
if(ENABLE_QT5)
689
  poppler_create_install_pkgconfig(poppler-qt5.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
690
endif()
691
if(ENABLE_GLIB)
692
  poppler_create_install_pkgconfig(poppler-glib.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
693
endif()
694
if(CAIRO_FOUND)
695
  poppler_create_install_pkgconfig(poppler-cairo.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
696
endif()
697
if(ENABLE_CPP)
698
  poppler_create_install_pkgconfig(poppler-cpp.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
699
endif()
700 701 702


message("Building Poppler with support for:")
703
show_end_message("font configuration" ${font_configuration})
704
show_end_message_yesno("splash output" ENABLE_SPLASH)
705 706 707
if(SPLASH_CMYK)
  message("      with CMYK support")
endif()
708
show_end_message_yesno("cairo output" CAIRO_FOUND)
709
show_end_message_yesno("qt5 wrapper" ENABLE_QT5)
710
show_end_message_yesno("glib wrapper" ENABLE_GLIB)
711
show_end_message_yesno("  introspection" INTROSPECTION_FOUND)
712
show_end_message_yesno("  gtk-doc" ENABLE_GTK_DOC)
713 714 715
show_end_message_yesno("cpp wrapper" ENABLE_CPP)
show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG)
show_end_message_yesno("use libpng" ENABLE_LIBPNG)
716
show_end_message_yesno("use libtiff" ENABLE_LIBTIFF)
717 718
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
719
show_end_message_yesno("use nss3" ENABLE_NSS3)
Hib Eris's avatar
Hib Eris committed
720
show_end_message_yesno("use curl" ENABLE_LIBCURL)
721
show_end_message_yesno("use libopenjpeg2" WITH_OPENJPEG)
722
show_end_message_yesno("use lcms2" USE_CMS)
723
show_end_message_yesno("command line utils" ENABLE_UTILS)
724
show_end_message("test data dir" ${TESTDATADIR})
725

726 727
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
728
endif()
729

730 731
if(USE_FIXEDPOINT AND USE_FLOAT)
  message("Warning: Single precision and fixed point options should not be enabled at the same time")
732
endif()
733

734
if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
735
  message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
736 737 738 739 740
endif()

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

742
if(ENABLE_ZLIB_UNCOMPRESS)
743
  message("Warning: Using zlib is not totally safe")
744
endif()
745

746
if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
747
  message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
748 749 750 751 752
endif()

if(NOT HAVE_JPX_DECODER)
  message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
endif()
753 754 755 756 757 758

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
759 760
        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar glib/reference/html --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
761 762
        COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})