Skip to content

Commit

Permalink
Introduce the CMake-based build system.
Browse files Browse the repository at this point in the history
Mostly works nicely as the autotools, and it mimics (almost) all the autotools behaviours.
Copied some scripts from the KDE cmake scripts (BSD-licensed).
TODO: gtk-doc.
  • Loading branch information
Pino Toscano committed Jan 30, 2008
1 parent 1ea831d commit 37d2055
Show file tree
Hide file tree
Showing 33 changed files with 3,455 additions and 0 deletions.
390 changes: 390 additions & 0 deletions CMakeLists.txt
@@ -0,0 +1,390 @@
project(poppler)

cmake_minimum_required(VERSION 2.4.0 FATAL_ERROR)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)

include(PopplerDefaults)
include(PopplerMacros)
include(MacroOptionalFindPackage)
find_package(PkgConfig)
include(MacroEnsureVersion)
include(MacroBoolTo01)

set(POPPLER_VERSION "0.6.80")

# 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_QT3_TESTS "Whether compile the Qt3 test programs." ON)
option(BUILD_QT4_TESTS "Whether compile the Qt4 test programs." ON)
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
option(ENABLE_ABIWORD "Build the Abiword backend." ON)
option(ENABLE_ZLIB "TODO" OFF)
option(USE_EXCEPTIONS "Throw exceptions to deal with not enough memory and similar problems." OFF)
option(USE_FIXEDPOINT "Use fixed point arithmetic" OFF)

# Enable these unconditionally.
set(MULTITHREAD ON)
set(OPI_SUPPORT ON)
set(TEXTOUT_WORD_LIST ON)

# setting the minimum required versions for some components
set(QT3_MIN_VERSION "3.3.0")
set(QT4_MIN_VERSION "4.1.0")
set(CAIRO_VERSION "1.4")

# set the default compile warnings
if(CMAKE_COMPILER_IS_GNUCXX)
set(DEFAULT_COMPILE_WARNINGS_NO)
set(DEFAULT_COMPILE_WARNINGS_YES "-Wall -Wno-write-strings")
set(DEFAULT_COMPILE_WARNINGS_KDE "-Wnon-virtual-dtor -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -O2 -Wformat-security -Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common")
endif(CMAKE_COMPILER_IS_GNUCXX)

macro_bool_to_01(ENABLE_SPLASH HAVE_SPLASH)
find_package(Freetype REQUIRED)
find_package(Fontconfig REQUIRED)
macro_optional_find_package(JPEG)
if(JPEG_FOUND)
set(ENABLE_LIBJPEG JPEG_FOUND)
endif(JPEG_FOUND)
macro_optional_find_package(Qt3)
macro_optional_find_package(Qt4)
macro_optional_find_package(GTK)
if(GLIB_FOUND)
macro_optional_find_package(Cairo)
set(HAVE_CAIRO CAIRO_FOUND)
if(CAIRO_FOUND)
set(CAIRO_REQ "cairo")
endif(CAIRO_FOUND)
endif(GLIB_FOUND)
if(ENABLE_ZLIB)
find_package(ZLIB)
if(ZLIB_FOUND)
set(HAVE_LIBZ ZLIB_FOUND)
endif(ZLIB_FOUND)
set(ENABLE_ZLIB ${ZLIB_FOUND})
endif(ENABLE_ZLIB)
if(ENABLE_ABIWORD)
find_package(LibXml2)
set(ENABLE_ABIWORD ${LIBXML2_FOUND})
endif(ENABLE_ABIWORD)

add_definitions(-DHAVE_CONFIG_H=1 ${FONTCONFIG_DEFINITIONS})
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
${FREETYPE_INCLUDE_DIR}
)
set(HAVE_FREETYPE_H ON)

if(ENABLE_ZLIB)
include_directories(${ZLIB_INCLUDE_DIR})
endif(ENABLE_ZLIB)
if(JPEG_FOUND)
include_directories(${JPEG_INCLUDE_DIR})
set(ENABLE_LIBJPEG ON)
endif(JPEG_FOUND)
if(ENABLE_ABIWORD)
include_directories(${LIBXML2_INCLUDE_DIR})
add_definitions(${LIBXML2_DEFINITIONS})
endif(ENABLE_ABIWORD)

if(DEFINED COMPILE_WARNINGS)
else(DEFINED COMPILE_WARNINGS)
set(COMPILE_WARNINGS "yes")
endif(DEFINED COMPILE_WARNINGS)
string(TOLOWER "${COMPILE_WARNINGS}" _comp_warnings)
if(_comp_warnings STREQUAL "no")
add_definitions(${DEFAULT_COMPILE_WARNINGS_NO})
endif(_comp_warnings STREQUAL "no")
if(_comp_warnings STREQUAL "yes")
add_definitions(${DEFAULT_COMPILE_WARNINGS_YES})
endif(_comp_warnings STREQUAL "yes")
if(_comp_warnings STREQUAL "kde")
set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_KDE} ${CMAKE_CXX_FLAGS}")
endif(_comp_warnings STREQUAL "kde")


include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)


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
fofi/FoFiBase.cc
fofi/FoFiEncodings.cc
fofi/FoFiTrueType.cc
fofi/FoFiType1.cc
fofi/FoFiType1C.cc
poppler/Annot.cc
poppler/Array.cc
poppler/BuiltinFont.cc
poppler/BuiltinFontTables.cc
poppler/Catalog.cc
poppler/CharCodeToUnicode.cc
poppler/CMap.cc
poppler/Decrypt.cc
poppler/Dict.cc
poppler/Error.cc
poppler/FontEncodingTables.cc
poppler/Form.cc
poppler/FontInfo.cc
poppler/Function.cc
poppler/Gfx.cc
poppler/GfxFont.cc
poppler/GfxState.cc
poppler/GlobalParams.cc
poppler/JArithmeticDecoder.cc
poppler/JBIG2Stream.cc
poppler/JPXStream.cc
poppler/Lexer.cc
poppler/Link.cc
poppler/NameToCharCode.cc
poppler/Object.cc
poppler/Outline.cc
poppler/OutputDev.cc
poppler/Page.cc
poppler/PageTransition.cc
poppler/Parser.cc
poppler/PDFDoc.cc
poppler/PDFDocEncoding.cc
poppler/ProfileData.cc
poppler/PreScanOutputDev.cc
poppler/PSTokenizer.cc
poppler/Stream.cc
poppler/UnicodeMap.cc
poppler/UnicodeTypeTable.cc
poppler/XRef.cc
poppler/PSOutputDev.cc
poppler/TextOutputDev.cc
poppler/PageLabelInfo.cc
poppler/SecurityHandler.cc
poppler/Sound.cc
poppler/XpdfPluginAPI.cc
)
set(poppler_LIBS ${FREETYPE_LIBRARIES} ${FONTCONFIG_LIBRARIES})
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/SplashT1Font.cc
splash/SplashT1FontEngine.cc
splash/SplashT1FontFile.cc
splash/SplashXPath.cc
splash/SplashXPathScanner.cc
)
endif(ENABLE_SPLASH)
if(JPEG_FOUND)
set(poppler_SRCS ${poppler_SRCS}
poppler/DCTStream.cc
)
set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES})
endif(JPEG_FOUND)
if(ENABLE_ZLIB)
set(poppler_SRCS ${poppler_SRCS}
poppler/FlateStream.cc
)
set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES})
endif(ENABLE_ZLIB)
if(ENABLE_ABIWORD)
set(poppler_SRCS ${poppler_SRCS}
poppler/ABWOutputDev.cc
)
set(poppler_LIBS ${poppler_LIBS} ${LIBXML2_LIBRARIES})
endif(ENABLE_ABIWORD)
if(WIN32)
# gdi32 is needed under win32
set(poppler_LIBS ${poppler_LIBS} gdi32)
endif(WIN32)

add_library(poppler SHARED ${poppler_SRCS})
set_target_properties(poppler PROPERTIES VERSION 2.0.0 SOVERSION 2)
target_link_libraries(poppler ${poppler_LIBS})
install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)

if(ENABLE_XPDF_HEADERS)
install(FILES
goo/GooHash.h
goo/GooList.h
goo/GooTimer.h
goo/GooMutex.h
goo/GooString.h
goo/GooVector.h
goo/gtypes.h
goo/gmem.h
goo/gfile.h
goo/FixedPoint.h
poppler/Annot.h
poppler/Array.h
poppler/BaseFile.h
poppler/BuiltinFont.h
poppler/BuiltinFontTables.h
poppler/Catalog.h
poppler/CharCodeToUnicode.h
poppler/CMap.h
poppler/Decrypt.h
poppler/Dict.h
poppler/Error.h
poppler/FontEncodingTables.h
poppler/FontInfo.h
poppler/Form.h
poppler/Function.cc
poppler/Function.h
poppler/Gfx.h
poppler/GfxFont.h
poppler/GfxState.h
poppler/GlobalParams.h
poppler/JArithmeticDecoder.h
poppler/JBIG2Stream.h
poppler/JPXStream.h
poppler/Lexer.h
poppler/Link.h
poppler/NameToCharCode.h
poppler/Object.h
poppler/Outline.h
poppler/OutputDev.h
poppler/Page.h
poppler/PageTransition.h
poppler/Parser.h
poppler/PDFDoc.h
poppler/PDFDocEncoding.h
poppler/ProfileData.h
poppler/PreScanOutputDev.h
poppler/PSTokenizer.h
poppler/Stream-CCITT.h
poppler/Stream.h
poppler/UnicodeMap.h
poppler/UnicodeMapTables.h
poppler/UnicodeTypeTable.h
poppler/UnicodeCClassTables.h
poppler/UnicodeCompTables.h
poppler/UnicodeDecompTables.h
poppler/XRef.h
poppler/CharTypes.h
poppler/CompactFontTables.h
poppler/ErrorCodes.h
poppler/NameToUnicodeTable.h
poppler/PSOutputDev.h
poppler/TextOutputDev.h
poppler/SecurityHandler.h
poppler/UTF8.h
poppler/XpdfPluginAPI.h
poppler/Sound.h
${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
DESTINATION include/poppler)
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/SplashT1Font.h
splash/SplashT1FontEngine.h
splash/SplashT1FontFile.h
splash/SplashTypes.h
splash/SplashXPath.h
splash/SplashXPathScanner.h
DESTINATION include/poppler/splash)
endif(ENABLE_SPLASH)
endif(ENABLE_XPDF_HEADERS)


if(ENABLE_UTILS)
add_subdirectory(utils)
endif(ENABLE_UTILS)
if(GLIB_FOUND)
add_subdirectory(glib)
endif(GLIB_FOUND)
if(QT3_FOUND)
add_subdirectory(qt)
endif(QT3_FOUND)
add_subdirectory(test)
if(QT4_FOUND)
add_subdirectory(qt4)
endif(QT4_FOUND)

set(PKG_CONFIG_VERSION_0_18 TRUE)
if(PKGCONFIG_EXECUTABLE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR)
macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18)
endif(PKGCONFIG_EXECUTABLE)
if(PKG_CONFIG_VERSION_0_18)
set(PC_REQUIRES "")
set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
else(PKG_CONFIG_VERSION_0_18)
set(PC_REQUIRES "poppler = ${POPPLER_VERSION}")
set(PC_REQUIRES_PRIVATE "")
endif(PKG_CONFIG_VERSION_0_18)

poppler_create_install_pkgconfig(poppler.pc lib/pkgconfig)
if(ENABLE_SPLASH)
poppler_create_install_pkgconfig(poppler-splash.pc lib/pkgconfig)
endif(ENABLE_SPLASH)
if(QT3_FOUND)
poppler_create_install_pkgconfig(poppler-qt.pc lib/pkgconfig)
endif(QT3_FOUND)
if(QT4_FOUND)
poppler_create_install_pkgconfig(poppler-qt4.pc lib/pkgconfig)
endif(QT4_FOUND)
if(GLIB_FOUND)
poppler_create_install_pkgconfig(poppler-glib.pc lib/pkgconfig)
endif(GLIB_FOUND)
if(CAIRO_FOUND)
poppler_create_install_pkgconfig(poppler-cairo.pc lib/pkgconfig)
endif(CAIRO_FOUND)


message("Building Poppler with support for:")
show_end_message("splash output" ENABLE_SPLASH)
show_end_message("cairo output" CAIRO_FOUND)
show_end_message("abiword output" ENABLE_ABIWORD)
show_end_message("qt wrapper" QT3_FOUND)
show_end_message("qt4 wrapper" QT4_FOUND)
show_end_message("glib wrapper" GLIB_FOUND)
# message(" use gtk-doc: $enable_gtk_doc") # TODO
show_end_message("use libjpeg" ENABLE_LIBJPEG)
show_end_message("use zlib" ENABLE_ZLIB)
show_end_message("command line utils" ENABLE_UTILS)

0 comments on commit 37d2055

Please sign in to comment.