CMakeLists.txt 23 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_GOBJECT_INTROSPECTION "Whether to generate GObject introspection." ON)
50
option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
51
option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
52
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")
53
set(ENABLE_CMS "lcms2" CACHE STRING "Use color management system. Possible values: lcms2, none. 'none' disables color management system.")
54
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")
55
option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
56 57
option(ENABLE_ZLIB "Build with zlib." ON)
option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
58
option(SPLASH_CMYK "Include support for CMYK rasterization." OFF)
59 60
option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
61
option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
62
if(WIN32)
63
  option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
64
else()
65
  set(ENABLE_RELOCATABLE OFF)
66
endif()
67
option(EXTRA_WARN "Enable extra compile warnings" OFF)
68

69 70
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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

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

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

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

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

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

if (ENABLE_QT5)
  find_package(Qt5Core)
  find_package(Qt5Gui)
  find_package(Qt5Xml)
  find_package(Qt5Widgets)
  find_package(Qt5Test)
  if (NOT (Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5Xml_FOUND AND Qt5Widgets_FOUND AND Qt5Test_FOUND))
    message("-- Package Qt5Core or Qt5Gui or Qt5Xml or Qt5Widgets or Qt5Test not found")
    set(ENABLE_QT5 OFF)
  endif()
155
endif()
156

157 158
macro_optional_find_package(Cairo ${CAIRO_VERSION})
if(CAIRO_FOUND)
Albert Astals Cid's avatar
Albert Astals Cid committed
159
  set(HAVE_CAIRO ${CAIRO_FOUND})
160 161
  set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1")
  set(CAIRO_REQ "cairo")
162 163
  set(POPPLER_GLIB_DISABLE_DEPRECATED "")
  set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "")
164 165 166 167 168 169 170
  if(ENABLE_GLIB)
    macro_optional_find_package(GLIB)
    if(NOT GLIB_FOUND)
      set(ENABLE_GLIB OFF)
    endif()
  endif()
  if(ENABLE_GLIB)
171 172 173 174 175
    if(ENABLE_GOBJECT_INTROSPECTION)
      # Check for introspection
      macro_optional_find_package(GObjectIntrospection 0.9.12)
      set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
    endif()
176 177
    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")
178
    macro_optional_find_package(GTK)
179 180
  endif()
else()
181
  set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO")
182
  set(ENABLE_GLIB OFF)
183
endif()
184 185 186 187
if(ENABLE_CPP)
  macro_optional_find_package(Iconv)
  set(ENABLE_CPP ${ICONV_FOUND})
  set(HAVE_ICONV ${ICONV_FOUND})
188
endif()
189 190 191
if(ENABLE_ZLIB)
  find_package(ZLIB)
  set(ENABLE_ZLIB ${ZLIB_FOUND})
192
endif()
193 194 195
if(ENABLE_ZLIB_UNCOMPRESS AND NOT ENABLE_ZLIB)
  message("Warning: ENABLE_ZLIB_UNCOMPRESS requires ENABLE_ZLIB")
  set(ENABLE_ZLIB_UNCOMPRESS FALSE)
196
endif()
197
set(WITH_OPENJPEG FALSE)
198
if(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
199
  find_package(LIBOPENJPEG2)
Adrian Johnson's avatar
Adrian Johnson committed
200
  set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
201 202 203 204 205 206 207 208 209 210 211 212
  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
213
endif()
214
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
215
if(ENABLE_CMS STREQUAL "lcms2")
216 217
  find_package(LCMS2)
  set(USE_CMS ${LCMS2_FOUND})
218 219
elseif(NOT ENABLE_CMS STREQUAL "none")
  message(FATAL_ERROR "Invalid ENABLE_CMS value: ${ENABLE_CMS}")
220
endif()
Hib Eris's avatar
Hib Eris committed
221 222
if(ENABLE_LIBCURL)
  find_package(CURL)
223 224 225 226 227 228
  if(CURL_FOUND)
    include_directories(${CURL_INCLUDE_DIR})
    set(POPPLER_HAS_CURL_SUPPORT ON)
  else()
    set(ENABLE_LIBCURL OFF)
  endif()
229
endif()
230

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

if(ENABLE_ZLIB)
  include_directories(${ZLIB_INCLUDE_DIR})
257
endif()
André Guerreiro's avatar
André Guerreiro committed
258 259 260 261

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

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

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


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


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

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

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

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


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

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

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


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

729 730
if(NOT ENABLE_SPLASH AND NOT CAIRO_FOUND)
  message("Warning: There is no rendering backend enabled")
731
endif()
732

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

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

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

745
if(ENABLE_ZLIB_UNCOMPRESS)
746
  message("Warning: Using zlib is not totally safe")
747
endif()
748

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

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

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
762 763
        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
764 765
        COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})