#======================================================================== # # xpdf/cmake-xpdf.txt # # CMake script for the Xpdf tools. # # Copyright 2015 Glyph & Cog, LLC # #======================================================================== include_directories("${PROJECT_SOURCE_DIR}") include_directories("${PROJECT_BINARY_DIR}") include_directories("${PROJECT_SOURCE_DIR}/goo") include_directories("${PROJECT_SOURCE_DIR}/fofi") include_directories("${PROJECT_SOURCE_DIR}/splash") #------------------ ## https://stackoverflow.com/questions/36220123/undefined-reference-to-png-set-longjmp-fn-when-compiling-pcl-source-file ## https://stackoverflow.com/questions/30980383/cmake-compile-options-for-libpng # search for pkg-config include (FindPkgConfig) if (NOT PKG_CONFIG_FOUND) message (FATAL_ERROR "pkg-config not found") endif () # check for libpng pkg_check_modules (PNG libpng15 REQUIRED) if (NOT PNG_FOUND) message(FATAL_ERROR "You don't seem to have libpng15 development libraries installed") else () include_directories (${PNG_INCLUDE_DIRS}) link_directories (${PNG_LIBRARY_DIRS}) link_libraries (${PNG_LIBRARIES}) endif () #------------------ if (ZLIB_FOUND) message(STATUS "@@@@@@@@@@@@@@@ ZLIB_FOUND ${ZLIB_LIBRARIES}") include_directories("${ZLIB_INCLUDE_DIRS}") else () message(STATUS "@@@@@@@@@@@@@@@ NOT ZLIB_FOUND") endif () if (PNG_FOUND) message(STATUS "@@@@@@@@@@@@@@@ PNG_FOUND ${PNG_LINK_FLAGS}") include_directories("${PNG_INCLUDE_DIRS}") link_directories (${PNG_LIBRARY_DIRS}) link_libraries (${PNG_LIBRARIES}) add_definitions("${PNG_DEFINITIONS}") else () message(STATUS "@@@@@@@@@@@@@@@ NOT PNG_FOUND") endif () if (HAVE_LCMS) include_directories("${LCMS_INCLUDE_DIR}") set(COLOR_MANAGER_SOURCE "ColorManager.cc") else () set(COLOR_MANAGER_SOURCE "") endif () add_library(xpdf_objs OBJECT AcroForm.cc Annot.cc Array.cc BuiltinFont.cc BuiltinFontTables.cc Catalog.cc CharCodeToUnicode.cc CMap.cc ${COLOR_MANAGER_SOURCE} Decrypt.cc Dict.cc Error.cc FontEncodingTables.cc Form.cc Function.cc Gfx.cc GfxFont.cc GfxState.cc GlobalParams.cc JArithmeticDecoder.cc JBIG2Stream.cc JPXStream.cc Lexer.cc Link.cc NameToCharCode.cc Object.cc OptionalContent.cc Outline.cc OutputDev.cc Page.cc Parser.cc PDFDoc.cc PDFDocEncoding.cc PSTokenizer.cc SecurityHandler.cc Stream.cc TextString.cc UnicodeMap.cc UnicodeTypeTable.cc UTF8.cc XFAForm.cc XRef.cc Zoox.cc ) #--- object files needed by XpdfWidget if ((QT4_FOUND OR Qt5Widgets_FOUND) AND HAVE_SPLASH AND MULTITHREADED AND USE_EXCEPTIONS) if (HIGHLIGHTED_REGIONS) set(HIGHLIGHT_SRC "HighlightFile.cc") else () set(HIGHLIGHT_SRC "") endif () add_library(xpdf_widget_objs OBJECT DisplayState.cc PDFCore.cc PreScanOutputDev.cc PSOutputDev.cc SplashOutputDev.cc TextOutputDev.cc TileCache.cc TileCompositor.cc TileMap.cc ${HIGHLIGHT_SRC} ) endif () # We want to build static xpdf-tools binaries. See # https://stackoverflow.com/questions/24648357/compiling-a-static-executable-with-cmake # Want to make the min number of changes for building statically, so using this way: SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(BUILD_SHARED_LIBS OFF) SET(CMAKE_EXE_LINKER_FLAGS "-static") # See https://github.com/droe/sslsplit/issues/82 # for warnings of this nature: # ../goo/libgoo.a(gfile.cc.o): In function `getHomeDir()': # gfile.cc:(.text+0x55): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking # gfile.cc:(.text+0x90): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking # See https://stackoverflow.com/questions/1620918/cmake-and-libpthread # after googling cmake and "-lpthread" (pthread) after ERRORS to do with this, like: # undefined reference to `pthread_mutex_unlock' set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) #-- libpng # https://stackoverflow.com/questions/36220123/undefined-reference-to-png-set-longjmp-fn-when-compiling-pcl-source-file # https://stackoverflow.com/questions/30980383/cmake-compile-options-for-libpng #--- pdftops if (HAVE_SPLASH) add_executable(pdftops $ PreScanOutputDev.cc PSOutputDev.cc SplashOutputDev.cc pdftops.cc ) target_link_libraries(pdftops goo fofi splash ${FREETYPE_LIBRARY} ${FREETYPE_OTHER_LIBS} ${DTYPE_LIBRARY} ${LCMS_LIBRARY} Threads::Threads) else () add_executable(pdftops $ PreScanOutputDev.cc PSOutputDev.cc pdftops.cc ) target_link_libraries(pdftops goo fofi ${LCMS_LIBRARY} Threads::Threads) endif () install(TARGETS pdftops RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdftops.1 DESTINATION man/man1) #--- pdftotext add_executable(pdftotext $ TextOutputDev.cc pdftotext.cc ) target_link_libraries(pdftotext goo fofi ${LCMS_LIBRARY} ${PNG_LIBRARIES} ${PNG_LINK_FLAGS} Threads::Threads) install(TARGETS pdftotext RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdftotext.1 DESTINATION man/man1) #--- pdftohtml if (HAVE_SPLASH AND PNG_FOUND) add_executable(pdftohtml $ HTMLGen.cc SplashOutputDev.cc TextOutputDev.cc pdftohtml.cc ) target_link_libraries(pdftohtml goo fofi splash ${FREETYPE_LIBRARY} ${FREETYPE_OTHER_LIBS} ${DTYPE_LIBRARY} ${LCMS_LIBRARY} ${PNG_LIBRARIES} Threads::Threads) install(TARGETS pdftohtml RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdftohtml.1 DESTINATION man/man1) endif () #--- pdfinfo add_executable(pdfinfo $ pdfinfo.cc ) target_link_libraries(pdfinfo goo fofi ${LCMS_LIBRARY} Threads::Threads) install(TARGETS pdfinfo RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdfinfo.1 DESTINATION man/man1) #--- pdffonts add_executable(pdffonts $ pdffonts.cc ) target_link_libraries(pdffonts goo fofi ${LCMS_LIBRARY} Threads::Threads) install(TARGETS pdffonts RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdffonts.1 DESTINATION man/man1) #--- pdfdetach add_executable(pdfdetach $ pdfdetach.cc ) target_link_libraries(pdfdetach goo fofi ${LCMS_LIBRARY} Threads::Threads) install(TARGETS pdfdetach RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdfdetach.1 DESTINATION man/man1) #--- pdftoppm if (HAVE_SPLASH) add_executable(pdftoppm $ SplashOutputDev.cc pdftoppm.cc ) target_link_libraries(pdftoppm goo fofi splash ${FREETYPE_LIBRARY} ${FREETYPE_OTHER_LIBS} ${DTYPE_LIBRARY} ${LCMS_LIBRARY} Threads::Threads) install(TARGETS pdftoppm RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdftoppm.1 DESTINATION man/man1) endif () #--- pdftopng if (HAVE_SPLASH AND PNG_FOUND) add_executable(pdftopng $ SplashOutputDev.cc pdftopng.cc ) target_link_libraries(pdftopng goo fofi splash ${FREETYPE_LIBRARY} ${FREETYPE_OTHER_LIBS} ${DTYPE_LIBRARY} ${LCMS_LIBRARY} ${PNG_LIBRARIES} Threads::Threads) install(TARGETS pdftopng RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdftopng.1 DESTINATION man/man1) endif () #--- pdfimages add_executable(pdfimages $ ImageOutputDev.cc pdfimages.cc ) target_link_libraries(pdfimages goo fofi ${LCMS_LIBRARY} Threads::Threads) install(TARGETS pdfimages RUNTIME DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/doc/pdfimages.1 DESTINATION man/man1) #--- xpdfrc man page install(FILES ${PROJECT_SOURCE_DIR}/doc/xpdfrc.5 DESTINATION man/man5)