From 35a96bde514a8897f6f0fcc41c5833bf63df2e2a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 18:29:01 +0200 Subject: Adding upstream version 1.0.2. Signed-off-by: Daniel Baumann --- CMakeScripts/DefineDependsandFlags.cmake | 419 +++++++++++++++++++++++++++++++ 1 file changed, 419 insertions(+) create mode 100644 CMakeScripts/DefineDependsandFlags.cmake (limited to 'CMakeScripts/DefineDependsandFlags.cmake') diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake new file mode 100644 index 0000000..1b5ed0d --- /dev/null +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -0,0 +1,419 @@ +set(INKSCAPE_LIBS "") +set(INKSCAPE_INCS "") +set(INKSCAPE_INCS_SYS "") +set(INKSCAPE_CXX_FLAGS "") +set(INKSCAPE_CXX_FLAGS_DEBUG "") + +list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/src + + # generated includes + ${CMAKE_BINARY_DIR}/include +) + +# AddressSanitizer +# Clang's AddressSanitizer can detect more memory errors and is more powerful +# than compiling with _FORTIFY_SOURCE but has a performance impact (approx. 2x +# slower), so it's not suitable for release builds. +if(WITH_ASAN) + list(APPEND INKSCAPE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer") + list(APPEND INKSCAPE_LIBS "-fsanitize=address") +else() + # Undefine first, to suppress 'warning: "_FORTIFY_SOURCE" redefined' + list(APPEND INKSCAPE_CXX_FLAGS "-U_FORTIFY_SOURCE") + list(APPEND INKSCAPE_CXX_FLAGS "-D_FORTIFY_SOURCE=2") +endif() + +# Errors for common mistakes +list(APPEND INKSCAPE_CXX_FLAGS "-fstack-protector-strong") +list(APPEND INKSCAPE_CXX_FLAGS "-Werror=format") # e.g.: printf("%s", std::string("foo")) +list(APPEND INKSCAPE_CXX_FLAGS "-Werror=format-security") # e.g.: printf(variable); +list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-Og") # -Og for _FORTIFY_SOURCE. One could add -Weffc++ here to see approx. 6000 warnings +list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-D_GLIBCXX_ASSERTIONS") +if (CMAKE_COMPILER_IS_GNUCC) + list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-fexceptions -grecord-gcc-switches -fasynchronous-unwind-tables") + if(CXX_COMPILER_VERSION VERSION_GREATER 8.0) + list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-fstack-clash-protection -fcf-protection") + endif() +endif() + +# Define the flags for profiling if desired: +if(WITH_PROFILING) + set(BUILD_SHARED_LIBS off) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") +endif() + +include(CheckCXXSourceCompiles) +CHECK_CXX_SOURCE_COMPILES(" +#include +#include +std::atomic x (0); +int main() { + uint64_t i = x.load(std::memory_order_relaxed); + return 0; +} +" +LIBATOMIC_NOT_NEEDED) +IF (NOT LIBATOMIC_NOT_NEEDED) + message(STATUS " Adding -latomic to the libs.") + list(APPEND INKSCAPE_LIBS "-latomic") +ENDIF() + + +# ---------------------------------------------------------------------------- +# Helper macros +# ---------------------------------------------------------------------------- + +# Turns linker arguments like "-framework Foo" into "-Wl,-framework,Foo" to +# make them safe for appending to INKSCAPE_LIBS +macro(sanitize_ldflags_for_libs ldflags_var) + # matches dash-argument followed by non-dash-argument + string(REGEX REPLACE "(^|;)(-[^;]*);([^-])" "\\1-Wl,\\2,\\3" ${ldflags_var} "${${ldflags_var}}") +endmacro() + + +# ---------------------------------------------------------------------------- +# Files we include +# ---------------------------------------------------------------------------- +if(WIN32) + # Set the link and include directories + get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) + + list(APPEND INKSCAPE_LIBS "-lmscms") + + list(APPEND INKSCAPE_CXX_FLAGS "-mms-bitfields") + list(APPEND INKSCAPE_CXX_FLAGS "-mwindows") + list(APPEND INKSCAPE_CXX_FLAGS "-mthreads") + + list(APPEND INKSCAPE_LIBS "-lgomp") + list(APPEND INKSCAPE_LIBS "-lwinpthread") + + if(HAVE_MINGW64) + list(APPEND INKSCAPE_CXX_FLAGS "-m64") + else() + list(APPEND INKSCAPE_CXX_FLAGS "-m32") + endif() +endif() + +find_package(PkgConfig REQUIRED) +pkg_check_modules(INKSCAPE_DEP REQUIRED + harfbuzz + pangocairo + pangoft2 + fontconfig + gsl + gmodule-2.0 + libsoup-2.4>=2.42) + +sanitize_ldflags_for_libs(INKSCAPE_DEP_LDFLAGS) +list(APPEND INKSCAPE_LIBS ${INKSCAPE_DEP_LDFLAGS}) +list(APPEND INKSCAPE_INCS_SYS ${INKSCAPE_DEP_INCLUDE_DIRS}) + +add_definitions(${INKSCAPE_DEP_CFLAGS_OTHER}) + +find_package(DoubleConversion REQUIRED) # lib2geom dependency + +if(WITH_JEMALLOC) + find_package(JeMalloc) + if (JEMALLOC_FOUND) + list(APPEND INKSCAPE_LIBS ${JEMALLOC_LIBRARIES}) + else() + set(WITH_JEMALLOC OFF) + endif() +endif() + +if(ENABLE_LCMS) + unset(HAVE_LIBLCMS2) + find_package(LCMS2) + if(LCMS2_FOUND) + list(APPEND INKSCAPE_INCS_SYS ${LCMS2_INCLUDE_DIRS}) + list(APPEND INKSCAPE_LIBS ${LCMS2_LIBRARIES}) + add_definitions(${LCMS2_DEFINITIONS}) + set (HAVE_LIBLCMS2 ON) + else() + set(ENABLE_LCMS OFF) + endif() +endif() + +find_package(Iconv REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${ICONV_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${ICONV_LIBRARIES}) +add_definitions(${ICONV_DEFINITIONS}) + +find_package(Intl REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${Intl_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${Intl_LIBRARIES}) +add_definitions(${Intl_DEFINITIONS}) + +find_package(BoehmGC REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${BOEHMGC_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${BOEHMGC_LIBRARIES}) +add_definitions(${BOEHMGC_DEFINITIONS}) + +if(ENABLE_POPPLER) + find_package(PopplerCairo) + if(POPPLER_FOUND) + set(HAVE_POPPLER ON) + if(ENABLE_POPPLER_CAIRO) + if(POPPLER_CAIRO_FOUND AND POPPLER_GLIB_FOUND) + set(HAVE_POPPLER_CAIRO ON) + endif() + endif() + else() + set(ENABLE_POPPLER_CAIRO OFF) + endif() +else() + set(HAVE_POPPLER OFF) + set(ENABLE_POPPLER_CAIRO OFF) +endif() + +list(APPEND INKSCAPE_INCS_SYS ${POPPLER_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${POPPLER_LIBRARIES}) +add_definitions(${POPPLER_DEFINITIONS}) + +if(WITH_LIBWPG) + find_package(LibWPG) + if(LIBWPG_FOUND) + set(WITH_LIBWPG02 ${LIBWPG-0.2_FOUND}) + set(WITH_LIBWPG03 ${LIBWPG-0.3_FOUND}) + list(APPEND INKSCAPE_INCS_SYS ${LIBWPG_INCLUDE_DIRS}) + list(APPEND INKSCAPE_LIBS ${LIBWPG_LIBRARIES}) + add_definitions(${LIBWPG_DEFINITIONS}) + else() + set(WITH_LIBWPG OFF) + endif() +endif() + +if(WITH_LIBVISIO) + find_package(LibVisio) + if(LIBVISIO_FOUND) + set(WITH_LIBVISIO01 ${LIBVISIO-0.1_FOUND}) + list(APPEND INKSCAPE_INCS_SYS ${LIBVISIO_INCLUDE_DIRS}) + list(APPEND INKSCAPE_LIBS ${LIBVISIO_LIBRARIES}) + add_definitions(${LIBVISIO_DEFINITIONS}) + else() + set(WITH_LIBVISIO OFF) + endif() +endif() + +if(WITH_LIBCDR) + find_package(LibCDR) + if(LIBCDR_FOUND) + set(WITH_LIBCDR01 ${LIBCDR-0.1_FOUND}) + list(APPEND INKSCAPE_INCS_SYS ${LIBCDR_INCLUDE_DIRS}) + list(APPEND INKSCAPE_LIBS ${LIBCDR_LIBRARIES}) + add_definitions(${LIBCDR_DEFINITIONS}) + else() + set(WITH_LIBCDR OFF) + endif() +endif() + +FIND_PACKAGE(JPEG) +IF(JPEG_FOUND) + list(APPEND INKSCAPE_INCS_SYS ${JPEG_INCLUDE_DIR}) + list(APPEND INKSCAPE_LIBS ${JPEG_LIBRARIES}) + set(HAVE_JPEG ON) +ENDIF() + +find_package(PNG REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${PNG_PNG_INCLUDE_DIR}) +list(APPEND INKSCAPE_LIBS ${PNG_LIBRARY}) + +find_package(Potrace REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${POTRACE_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${POTRACE_LIBRARIES}) + + +if(WITH_DBUS) + pkg_check_modules(DBUS dbus-1 dbus-glib-1) + if(DBUS_FOUND) + sanitize_ldflags_for_libs(DBUS_LDFLAGS) + list(APPEND INKSCAPE_LIBS ${DBUS_LDFLAGS}) + list(APPEND INKSCAPE_INCS_SYS ${DBUS_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/src/extension/dbus/) + add_definitions(${DBUS_CFLAGS_OTHER}) + else() + set(WITH_DBUS OFF) + endif() +endif() + +if(WITH_SVG2) + add_definitions(-DWITH_MESH -DWITH_CSSBLEND -DWITH_CSSCOMPOSITE -DWITH_SVG2) +else() + add_definitions(-UWITH_MESH -UWITH_CSSBLEND -UWITH_CSSCOMPOSITE -UWITH_SVG2) +endif() + +if(APPLE) + pkg_check_modules(MacIntegration REQUIRED gtk-mac-integration-gtk3) + list(APPEND INKSCAPE_INCS_SYS ${MacIntegration_INCLUDE_DIRS}) + sanitize_ldflags_for_libs(MacIntegration_LDFLAGS) + list(APPEND INKSCAPE_LIBS ${MacIntegration_LDFLAGS}) +endif() + +# ---------------------------------------------------------------------------- +# CMake's builtin +# ---------------------------------------------------------------------------- + +# Include dependencies: + +pkg_check_modules( + GTK3 + REQUIRED + gtkmm-3.0>=3.22 + gdkmm-3.0>=3.22 + gtk+-3.0>=3.22 + gdk-3.0>=3.22 + gdl-3.0>=3.4 + ) +list(APPEND INKSCAPE_CXX_FLAGS ${GTK3_CFLAGS_OTHER}) +list(APPEND INKSCAPE_INCS_SYS ${GTK3_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${GTK3_LIBRARIES}) +link_directories(${GTK3_LIBRARY_DIRS}) + +pkg_check_modules(GDL_3_6 gdl-3.0>=3.6) +if("${GDL_3_6_FOUND}") + message(STATUS "Using GDL 3.6 or higher") + set (WITH_GDL_3_6 ON) +endif() + +pkg_check_modules(GTKSPELL3 gtkspell3-3.0) +if("${GTKSPELL3_FOUND}") + message(STATUS "Using GtkSpell 3") + list(APPEND INKSCAPE_INCS_SYS ${GTKSPELL3_INCLUDE_DIRS}) + sanitize_ldflags_for_libs(GTKSPELL3_LDFLAGS) + list(APPEND INKSCAPE_LIBS ${GTKSPELL3_LDFLAGS}) + set(WITH_GTKSPELL ON) +else() + set(WITH_GTKSPELL OFF) +endif() + +find_package(Boost 1.19.0 REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${Boost_INCLUDE_DIRS}) +# list(APPEND INKSCAPE_LIBS ${Boost_LIBRARIES}) + +find_package(ASPELL) +if(ASPELL_FOUND) + list(APPEND INKSCAPE_INCS_SYS ${ASPELL_INCLUDE_DIR}) + list(APPEND INKSCAPE_LIBS ${ASPELL_LIBRARIES}) + add_definitions(${ASPELL_DEFINITIONS}) + set(HAVE_ASPELL TRUE) +endif() + +#find_package(OpenSSL) +#list(APPEND INKSCAPE_INCS_SYS ${OPENSSL_INCLUDE_DIR}) +#list(APPEND INKSCAPE_LIBS ${OPENSSL_LIBRARIES}) + +find_package(LibXslt REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${LIBXSLT_INCLUDE_DIR}) +list(APPEND INKSCAPE_LIBS ${LIBXSLT_LIBRARIES}) +add_definitions(${LIBXSLT_DEFINITIONS}) + +find_package(LibXml2 REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${LIBXML2_INCLUDE_DIR}) +list(APPEND INKSCAPE_LIBS ${LIBXML2_LIBRARIES}) +add_definitions(${LIBXML2_DEFINITIONS}) + +if(WITH_OPENMP) + find_package(OpenMP) + if(OPENMP_FOUND) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + list(APPEND INKSCAPE_CXX_FLAGS ${OpenMP_CXX_FLAGS}) + if(APPLE) + list(APPEND INKSCAPE_LIBS "-lomp") + endif() + mark_as_advanced(OpenMP_C_FLAGS) + mark_as_advanced(OpenMP_CXX_FLAGS) + # '-fopenmp' is in OpenMP_C_FLAGS, OpenMP_CXX_FLAGS and implies '-lgomp' + # uncomment explicit linking below if still needed: + set(HAVE_OPENMP ON) + #list(APPEND INKSCAPE_LIBS "-lgomp") # FIXME + else() + set(HAVE_OPENMP OFF) + set(WITH_OPENMP OFF) + endif() +endif() + +find_package(ZLIB REQUIRED) +list(APPEND INKSCAPE_INCS_SYS ${ZLIB_INCLUDE_DIRS}) +list(APPEND INKSCAPE_LIBS ${ZLIB_LIBRARIES}) + +if(WITH_IMAGE_MAGICK) + # we want "<" but pkg_check_modules only offers "<=" for some reason; let's hope nobody actually has 7.0.0 + pkg_check_modules(MAGICK ImageMagick++<=7) + if(MAGICK_FOUND) + set(WITH_GRAPHICS_MAGICK OFF) # prefer ImageMagick for now and disable GraphicsMagick if found + else() + set(WITH_IMAGE_MAGICK OFF) + endif() +endif() +if(WITH_GRAPHICS_MAGICK) + pkg_check_modules(MAGICK GraphicsMagick++) + if(NOT MAGICK_FOUND) + set(WITH_GRAPHICS_MAGICK OFF) + endif() +endif() +if(MAGICK_FOUND) + sanitize_ldflags_for_libs(MAGICK_LDFLAGS) + list(APPEND INKSCAPE_LIBS ${MAGICK_LDFLAGS}) + add_definitions(${MAGICK_CFLAGS_OTHER}) + list(APPEND INKSCAPE_INCS_SYS ${MAGICK_INCLUDE_DIRS}) + + set(WITH_MAGICK ON) # enable 'Extensions > Raster' +endif() + +set(ENABLE_NLS OFF) +if(WITH_NLS) + find_package(Gettext) + if(GETTEXT_FOUND) + message(STATUS "Found gettext + msgfmt to convert language files. Translation enabled") + set(ENABLE_NLS ON) + else(GETTEXT_FOUND) + message(STATUS "Cannot find gettext + msgfmt to convert language file. Translation won't be enabled") + set(WITH_NLS OFF) + endif(GETTEXT_FOUND) + find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) + if(GETTEXT_XGETTEXT_EXECUTABLE) + message(STATUS "Found xgettext. inkscape.pot will be re-created if missing.") + else() + message(STATUS "Did not find xgetttext. inkscape.pot can't be re-created.") + endif() +endif(WITH_NLS) + +pkg_check_modules(SIGC++ REQUIRED sigc++-2.0 ) +sanitize_ldflags_for_libs(SIGC++_LDFLAGS) +list(APPEND INKSCAPE_LIBS ${SIGC++_LDFLAGS}) +list(APPEND INKSCAPE_CXX_FLAGS ${SIGC++_CFLAGS_OTHER}) + +# Some linkers, like gold, don't find symbols recursively. So we have to link against X11 explicitly +find_package(X11) +if(X11_FOUND) + list(APPEND INKSCAPE_INCS_SYS ${X11_INCLUDE_DIRS}) + list(APPEND INKSCAPE_LIBS ${X11_LIBRARIES}) +endif(X11_FOUND) + +# end Dependencies + + + +# Set include directories and CXX flags +# (INKSCAPE_LIBS are set as target_link_libraries for inkscape_base in src/CMakeLists.txt) + +foreach(flag ${INKSCAPE_CXX_FLAGS}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") +endforeach() +foreach(flag ${INKSCAPE_CXX_FLAGS_DEBUG}) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${flag}") +endforeach() + +list(REMOVE_DUPLICATES INKSCAPE_LIBS) +list(REMOVE_DUPLICATES INKSCAPE_INCS_SYS) + +include_directories(${INKSCAPE_INCS}) +include_directories(SYSTEM ${INKSCAPE_INCS_SYS}) + +include(${CMAKE_CURRENT_LIST_DIR}/ConfigChecks.cmake) # TODO: Check if this needs to be "hidden" here + +unset(INKSCAPE_INCS) +unset(INKSCAPE_INCS_SYS) +unset(INKSCAPE_CXX_FLAGS) +unset(INKSCAPE_CXX_FLAGS_DEBUG) -- cgit v1.2.3