summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt303
1 files changed, 303 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..44215c5
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,303 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+cmake_minimum_required(VERSION 3.1.0)
+
+cmake_policy(SET CMP0003 NEW) # don't be prolific with library paths
+cmake_policy(SET CMP0005 NEW) # proper define quoting
+cmake_policy(SET CMP0009 NEW) # don't follow symbolic links when using GLOB
+
+if(POLICY CMP0075)
+ cmake_policy(SET CMP0075 NEW) # link check-executable to CMAKE_REQUIRED_LIBRARIES (CMake 3.12.1)
+endif(POLICY CMP0075)
+
+message("------------------------------")
+message("Building Makefile for Inkscape")
+message("------------------------------")
+message("Source Dir: ${CMAKE_CURRENT_SOURCE_DIR}")
+message("Binary Dir: ${CMAKE_CURRENT_BINARY_DIR}")
+
+# -----------------------------------------------------------------------------
+# CMake Configuration
+# -----------------------------------------------------------------------------
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+# set(CMAKE_CXX_EXTENSIONS OFF) # enforces -std=c++17 instead of -std=gnu++17
+ # TODO: build currently fails with it as we actually depend on GNU compiler extensions...
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeScripts/Modules")
+
+# avoid having empty buildtype
+set(CMAKE_BUILD_TYPE_INIT "Release")
+
+include(CMakeScripts/HelperFunctions.cmake)
+include(CMakeScripts/ConfigEnv.cmake)
+
+project(inkscape)
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME inkscape) # needs to be before any install() commands
+
+include(GNUInstallDirs) # for the CMAKE_INSTALL_LIBDIR variable
+include(CMakeScripts/ConfigPaths.cmake)
+include(CMakeDependentOption)
+
+set(PROJECT_NAME inkscape)
+
+# see https://gitlab.com/inkscape/inkscape/-/issues/551 for versioning suffixes
+set(INKSCAPE_VERSION_MAJOR 1)
+set(INKSCAPE_VERSION_MINOR 2)
+set(INKSCAPE_VERSION_PATCH 2)
+set(INKSCAPE_VERSION_SUFFIX "")
+
+set(INKSCAPE_VERSION ${INKSCAPE_VERSION_MAJOR}.${INKSCAPE_VERSION_MINOR})
+if(INKSCAPE_VERSION_PATCH)
+ set(INKSCAPE_VERSION ${INKSCAPE_VERSION}.${INKSCAPE_VERSION_PATCH})
+endif()
+if(INKSCAPE_VERSION_SUFFIX)
+ set(INKSCAPE_VERSION ${INKSCAPE_VERSION}${INKSCAPE_VERSION_SUFFIX})
+endif()
+
+set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
+
+file(RELATIVE_PATH
+ INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR
+ "${CMAKE_INSTALL_FULL_BINDIR}"
+ "${CMAKE_INSTALL_FULL_LIBDIR}/inkscape")
+
+if(APPLE)
+ SET(CMAKE_MACOSX_RPATH TRUE)
+ SET(CMAKE_INSTALL_RPATH "@loader_path/${INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR}")
+else()
+ SET(CMAKE_INSTALL_RPATH "$ORIGIN/${INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR}")
+endif()
+
+# this can be removed if/when cmake 3.1 is made the minimum required version
+set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
+
+# console output is slow as hell on Windows and as a result status messages of the "install" target slow down
+# the whole build process considerably (especially since we also copy a lot of files from the devlibs)
+# TODO: Is this worth to be configurable / also applicable to other platforms?
+if(WIN32 AND NOT CMAKE_INSTALL_MESSAGE)
+ set(CMAKE_INSTALL_MESSAGE "LAZY")
+endif()
+
+# Define a very strict set of build flags that will prevent any use of deprecated symbols.
+# This will almost certainly cause compilation failure and is intended only for developer use.
+set(CMAKE_CXX_FLAGS_STRICT "${CMAKE_CXX_FLAGS_DEBUG} -Werror=deprecated-declarations -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED -DGLIBMM_DISABLE_DEPRECATED"
+ CACHE STRING
+ "Flags used by C++ compiler during Strict builds"
+ FORCE)
+set(CMAKE_C_FLAGS_STRICT "${CMAKE_C_FLAGS_DEBUG} -Werror=deprecated-declarations -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED"
+ CACHE STRING
+ "Flags used by C compiler during Strict builds"
+ FORCE)
+mark_as_advanced(
+ CMAKE_CXX_FLAGS_STRICT
+ CMAKE_C_FLAGS_STRICT)
+
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING
+ "Choose the type of build, options are: None(CMAKE_CXXFLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel Strict."
+ FORCE)
+
+# -----------------------------------------------------------------------------
+# Redirect output files
+# -----------------------------------------------------------------------------
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} CACHE PATH "Output directory for runtime binaries")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} CACHE PATH "Output directory for shared libraries")
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} CACHE PATH "Output directory for static libraries")
+
+# -----------------------------------------------------------------------------
+# Options
+# -----------------------------------------------------------------------------
+option(WITH_GNU_READLINE "Compile with GNU Readline support (shell mode)" ON)
+option(ENABLE_LCMS "Compile with LCMS support" ON)
+option(WITH_SVG2 "Compile with support for new SVG2 features" ON)
+option(WITH_LPETOOL "Compile with LPE Tool" OFF)
+option(LPE_ENABLE_TEST_EFFECTS "Compile with test experimental LPEs enabled" OFF)
+option(WITH_OPENMP "Compile with OpenMP support" ON)
+option(WITH_PROFILING "Turn on profiling" OFF) # Set to true if compiler/linker should enable profiling
+option(BUILD_SHARED_LIBS "Compile libraries as shared and not static" ON)
+
+option(ENABLE_POPPLER "Compile with support of libpoppler" ON)
+option(ENABLE_POPPLER_CAIRO "Compile with support of libpoppler-cairo for rendering PDF preview (depends on ENABLE_POPPLER)" ON)
+option(WITH_IMAGE_MAGICK "Compile with support of ImageMagick for raster extensions and image import resolution (requires ImageMagick 6; set to OFF if you prefer GraphicsMagick)" ON)
+option(WITH_GRAPHICS_MAGICK "Compile with support of GraphicsMagick for raster extensions and image import resolution" ON)
+option(WITH_LIBCDR "Compile with support of libcdr for CorelDRAW Diagrams" ON)
+option(WITH_LIBVISIO "Compile with support of libvisio for Microsoft Visio Diagrams" ON)
+option(WITH_LIBWPG "Compile with support of libwpg for WordPerfect Graphics" ON)
+option(WITH_GSPELL "Compile with support of gspell" ON)
+option(WITH_NLS "Compile with Native Language Support (using gettext)" ON)
+option(WITH_JEMALLOC "Compile with JEMALLOC support" OFF)
+option(WITH_ASAN "Compile with Clang's AddressSanitizer (for debugging purposes)" OFF)
+option(WITH_INTERNAL_2GEOM "Prefer internal copy of lib2geom" OFF)
+cmake_dependent_option(WITH_X11 "Compile with X11 support" ON "UNIX; NOT APPLE" OFF)
+
+option(WITH_FUZZ "Compile for fuzzing purpose (use 'make fuzz' only)" OFF)
+mark_as_advanced(WITH_FUZZ)
+option(WITH_MANPAGE_COMPRESSION "gzips manpages if gzip is available" ON)
+mark_as_advanced(WITH_MANPAGE_COMPRESSION)
+cmake_dependent_option(WITH_INTERNAL_CAIRO "Use a patched version of cairo" OFF "UNIX" ON)
+
+option(ENABLE_BINRELOC "Enable relocatable binaries" OFF)
+
+
+include(CMakeScripts/DefineDependsandFlags.cmake) # Includes, Compiler Flags, and Link Libraries
+include(CMakeScripts/HelperMacros.cmake) # Misc Utility Macros
+
+# -----------------------------------------------------------------------------
+# BAD HACKS, NEED TO INVESTIGATE MAKING THESE LESS BAD
+if(BUILD_SHARED_LIBS AND NOT WIN32)
+ add_definitions(-fPIC)
+endif()
+#
+# end badness
+# -----------------------------------------------------------------------------
+
+
+
+# -----------------------------------------------------------------------------
+# Subdirectories
+# -----------------------------------------------------------------------------
+add_subdirectory(src)
+
+if(ENABLE_NLS)
+ add_subdirectory(po)
+endif(ENABLE_NLS)
+
+if(NOT WIN32)
+ include(CMakeScripts/Pod2man.cmake)
+ add_subdirectory(man)
+endif()
+
+
+
+# -----------------------------------------------------------------------------
+# Check License Headers
+# -----------------------------------------------------------------------------
+add_custom_target(check-license-headers WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ./buildtools/check_license_headers.py)
+
+
+# -----------------------------------------------------------------------------
+# Test Harness
+# -----------------------------------------------------------------------------
+
+if(BUILD_TESTING OR NOT DEFINED BUILD_TESTING)
+ find_package(GTest)
+ if(GTEST_FOUND)
+ set(DART_TESTING_TIMEOUT 180 CACHE STRING "Test timeout") # if running for > 180 s something must be wrong)
+ include(CTest)
+ add_subdirectory(testfiles EXCLUDE_FROM_ALL)
+ else()
+ set(BUILD_TESTING OFF)
+ message(WARNING "No gtest found! Disabling testing...\n"
+ "Consider installing it via package manager (install 'libgtest-dev' or equivalent).")
+ endif()
+endif()
+
+
+# -----------------------------------------------------------------------------
+# Clean Targets
+# -----------------------------------------------------------------------------
+add_custom_target(clean-cmake-files
+ COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts/CleanAll.cmake"
+)
+
+add_custom_target(clean-all
+ COMMAND ${CMAKE_BUILD_TOOL} clean
+ COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts/CleanAll.cmake"
+)
+
+# -----------------------------------------------------------------------------
+# Install Target
+# -----------------------------------------------------------------------------
+add_subdirectory(share)
+
+if(WIN32)
+ include(CMakeScripts/InstallMSYS2.cmake)
+endif()
+
+# -----------------------------------------------------------------------------
+# Uninstall Target
+# -----------------------------------------------------------------------------
+if(WIN32)
+ add_custom_target(uninstall
+ "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_INSTALL_PREFIX}")
+else()
+ configure_file(
+ "${CMAKE_SOURCE_DIR}/CMakeScripts/cmake_uninstall.cmake.in"
+ "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
+ @ONLY)
+ add_custom_target(uninstall
+ "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
+endif()
+
+# -----------------------------------------------------------------------------
+# Dist Targets
+# -----------------------------------------------------------------------------
+include(CMakeScripts/Dist.cmake)
+
+# -----------------------------------------------------------------------------
+# Packaging (CPack)
+# -----------------------------------------------------------------------------
+include(CMakeScripts/ConfigCPack.cmake)
+
+
+
+# ----------------------------------------------------------------------
+# Information Summary
+# ----------------------------------------------------------------------
+message("------------------------------------------------------------------------")
+message("Configuration Summary")
+message("------------------------------------------------------------------------")
+# project info
+message("PROJECT_NAME: ${PROJECT_NAME}")
+message("INKSCAPE_VERSION: ${INKSCAPE_VERSION}")
+message("INKSCAPE_DIST_PREFIX: ${INKSCAPE_DIST_PREFIX}")
+message("")
+
+# cmake info
+message("CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
+message("CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
+message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")
+message("PACKAGE_LOCALE_DIR ${PACKAGE_LOCALE_DIR}")
+message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
+message("CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
+message("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
+message("CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
+message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
+message("CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
+message("")
+
+if(WIN32)
+message("CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
+message("CMAKE_FIND_LIBRARY_PREFIXES: ${CMAKE_FIND_LIBRARY_PREFIXES}")
+message("CMAKE_FIND_LIBRARY_SUFFIXES: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
+message("")
+endif()
+
+# dependency info
+message("ENABLE_LCMS: ${ENABLE_LCMS}")
+message("ENABLE_POPPLER: ${ENABLE_POPPLER}")
+message("ENABLE_POPPLER_CAIRO: ${ENABLE_POPPLER_CAIRO}")
+message("WITH_GNU_READLINE: ${WITH_GNU_READLINE}")
+message("WITH_GSPELL: ${WITH_GSPELL}")
+message("WITH_IMAGE_MAGICK: ${WITH_IMAGE_MAGICK}")
+message("WITH_GRAPHICS_MAGICK: ${WITH_GRAPHICS_MAGICK}")
+message("WITH_LIBCDR: ${WITH_LIBCDR}")
+message("WITH_LIBVISIO: ${WITH_LIBVISIO}")
+message("WITH_LIBWPG: ${WITH_LIBWPG}")
+message("WITH_NLS: ${WITH_NLS}")
+message("WITH_OPENMP: ${WITH_OPENMP}")
+message("WITH_JEMALLOC: ${WITH_JEMALLOC}")
+message("WITH_INTERNAL_2GEOM: ${WITH_INTERNAL_2GEOM}")
+message("WITH_INTERNAL_CAIRO: ${WITH_INTERNAL_CAIRO}")
+message("WITH_X11: ${WITH_X11}")
+
+message("WITH_PROFILING: ${WITH_PROFILING}")
+message("BUILD_TESTING: ${BUILD_TESTING}")
+
+if(WIN32)
+message("")
+message("HAVE_MINGW64: ${HAVE_MINGW64}")
+message("MINGW_PATH: ${MINGW_PATH}")
+message("MINGW_ARCH: ${MINGW_ARCH}")
+endif()
+
+message("------------------------------------------------------------------------")