#======================================================================== # # xpdf/cmake-xpdf.txt # # CMake script for the Xpdf tools. # # Copyright 2015 Glyph & Cog, LLC # #======================================================================== #======================================================================== # This is a customised version of Xpdf Tools' CMake file. # Customised for Greenstone. #======================================================================== 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") if (PNG_FOUND) include_directories("${PNG_INCLUDE_DIRS}") add_definitions("${PNG_DEFINITIONS}") else () message(STATUS "@@@@@@@@@@@@@@@ NO PNG_FOUND") endif () # https://stackoverflow.com/questions/36126333/mingw-cmake-undefined-reference-to-zlib if (ZLIB_FOUND) include_directories("${ZLIB_INCLUDE_DIRS}") add_definitions("${ZLIB_DEFINITIONS}") else () message(STATUS "@@@@@@@@@@@@@@@ NO ZLIB_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 the way # below. Beware, must *append* "-static" to existing CMAKE_EXE_LINKER_FLAGS=LD_FLAGS SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(BUILD_SHARED_LIBS OFF) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") # The original, unmodified CMakeLists.txt was not set up sufficiently # for static compilation of xpdf-tools. As a result, compile would first fail # with errors about undefined refs to mutex / lpthread. # When building xpdf-tools statically, need to add the following 2 lines as well # as append "Threads::Threads" to the end of each "target_link_libraries()" # See https://stackoverflow.com/questions/1620918/cmake-and-libpthread # found 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) #--- 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} ${ZLIB_LIBRARIES} ${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} 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} ${ZLIB_LIBRARIES} ${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)