You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
13 KiB
393 lines
13 KiB
cmake_minimum_required(VERSION 3.10) |
|
|
|
project ("Xournal++" CXX C) |
|
|
|
## Project related Variables |
|
## Also update changelog in debian folder! |
|
set (CPACK_PACKAGE_VERSION_MAJOR "1") |
|
set (CPACK_PACKAGE_VERSION_MINOR "1") |
|
set (CPACK_PACKAGE_VERSION_PATCH "0") |
|
set (CPACK_DEBIAN_PACKAGE_RELEASE 1) |
|
set (VERSION_SUFFIX "+dev") |
|
set (PROJECT_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${VERSION_SUFFIX}") |
|
set (PROJECT_PACKAGE "xournalpp") |
|
set (PROJECT_STRING "${PROJECT_NAME} ${PROJECT_VERSION}") |
|
set (PROJECT_URL "https://github.com/xournalpp/xournalpp") |
|
|
|
## CMAKE_Variables |
|
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find" "${PROJECT_SOURCE_DIR}/cmake/include") |
|
set(CMAKE_CXX_STANDARD 17) |
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
|
set(CMAKE_CXX_EXTENSIONS OFF) |
|
set_directory_properties(PROPERTIES EP_BASE "${PROJECT_BINARY_DIR}/external") |
|
|
|
add_definitions(-D_USE_MATH_DEFINES) |
|
|
|
# package version |
|
include (Version) |
|
core_find_git_rev(RELEASE_IDENTIFIER) |
|
string(TIMESTAMP PACKAGE_TIMESTAMP "%Y%m%d.%H%M" UTC) |
|
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}~git${PACKAGE_TIMESTAMP}-${RELEASE_IDENTIFIER}-${DISTRO_CODENAME}) |
|
|
|
include(TargetArch) |
|
target_architecture(PACKAGE_ARCH) |
|
|
|
configure_file(cmake/VERSION.in VERSION) |
|
|
|
configure_file ( |
|
cmake/postinst.in |
|
cmake/postinst |
|
@ONLY |
|
) |
|
|
|
include (FindPkgConfig) |
|
|
|
set (PACKAGE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share") |
|
|
|
# Git repo info |
|
include (GitRepo) |
|
|
|
################################ |
|
# CMake os-fixups |
|
# this section should decrease in size for newer CMake versions. |
|
################################ |
|
|
|
################################ |
|
# Project compiler flags |
|
################################ |
|
set(xournalpp_CXX_FLAGS ${CMAKE_CXX_FLAGS}) |
|
|
|
if (MSVC) |
|
set(xournalpp_CXX_FLAGS ${xournalpp_CXX_FLAGS} -DNOMINMAX -DWIN32_LEAN_AND_MEAN) |
|
else () |
|
set(LIB_ENDING "so") |
|
endif () |
|
|
|
## For touch workaround, may need to be disabled for a Wayland Build |
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") |
|
set (xournalpp_LDFLAGS ${xournalpp_LDFLAGS} "-lX11 -lXi") |
|
endif () |
|
|
|
## Libraries ## |
|
|
|
macro(add_includes_ldflags LDFLAGS INCLUDES) |
|
set(xournalpp_LDFLAGS ${xournalpp_LDFLAGS} "${LDFLAGS}") |
|
include_directories(SYSTEM ${INCLUDES}) |
|
# Do not add system headers and external libraries to the additional include paths |
|
# set(xournalpp_INCLUDE_DIRS ${xournalpp_INCLUDE_DIRS} "${INCLUDES}") |
|
endmacro (add_includes_ldflags LDFLAGS INCLUDES) |
|
|
|
find_package(CXX17 REQUIRED COMPONENTS optional) |
|
find_package(Filesystem REQUIRED COMPONENTS ghc Final Experimental) |
|
|
|
# libexec |
|
if (WIN32) |
|
set(xournalpp_LDFLAGS ${xournalpp_LDFLAGS} "-mwindows") |
|
else () |
|
find_package(Backtrace REQUIRED) |
|
add_includes_ldflags("${Backtrace_LIBRARIES}" "${Backtrace_INCLUDE_DIRS}") |
|
endif () |
|
|
|
# GLIB |
|
pkg_check_modules (Glib REQUIRED "glib-2.0 >= 2.32.0") |
|
add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32) |
|
add_includes_ldflags ("${Glib_LDFLAGS}" "${Glib_INCLUDE_DIRS}") |
|
|
|
# GTK+ |
|
pkg_check_modules (GTK REQUIRED "gtk+-3.0 >= 3.18.9") |
|
add_definitions (-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_18) |
|
add_includes_ldflags ("${GTK_LDFLAGS}" "${GTK_INCLUDE_DIRS}") |
|
|
|
# GThread |
|
pkg_check_modules (GThread REQUIRED "gthread-2.0 >= 2.4.0") |
|
add_includes_ldflags ("${GThread_LDFLAGS}" "${GThread_INCLUDE_DIRS}") |
|
|
|
# LibXML |
|
pkg_check_modules (Libxml REQUIRED "libxml-2.0 >= 2.0.0") |
|
add_includes_ldflags ("${Libxml_LDFLAGS}" "${Libxml_INCLUDE_DIRS}") |
|
|
|
# Poppler |
|
pkg_check_modules (PopplerGlib REQUIRED "poppler-glib >= 0.41.0") |
|
add_includes_ldflags ("${PopplerGlib_LDFLAGS}" "${PopplerGlib_INCLUDE_DIRS}") |
|
set(POPPLER_INCLUDE_DIR, "${PopplerGlib_INCLUDE_DIRS}") |
|
|
|
# zlib |
|
find_package (ZLIB REQUIRED) |
|
add_includes_ldflags ("${ZLIB_LIBRARIES}" "${ZLIB_INCLUDE_DIRS}") |
|
|
|
# libzip |
|
pkg_check_modules (ZIP REQUIRED "libzip >= 1.0.1") |
|
add_includes_ldflags ("${ZIP_LDFLAGS}" "${ZIP_INCLUDE_DIRS}") |
|
|
|
# pthreads |
|
find_package (Threads REQUIRED) |
|
set (xournalpp_LDFLAGS ${xournalpp_LDFLAGS} ${CMAKE_THREAD_LIBS_INIT}) |
|
|
|
# portaudio |
|
pkg_check_modules(PORTAUDIOCPP REQUIRED "portaudiocpp >= 12") |
|
add_includes_ldflags ("${PORTAUDIOCPP_LDFLAGS}" "${PORTAUDIOCPP_INCLUDE_DIRS}") |
|
|
|
# sndfile |
|
pkg_check_modules(SNDFILE REQUIRED "sndfile >= 1.0.25") |
|
add_includes_ldflags ("${SNDFILE_LDFLAGS}" "${SNDFILE_INCLUDE_DIRS}") |
|
|
|
## Additional features ## |
|
|
|
# CppUnit |
|
option (ENABLE_CPPUNIT "Build CppUnit test instead of xournalpp application" OFF) |
|
if (ENABLE_CPPUNIT) |
|
pkg_check_modules(CppUnit REQUIRED "cppunit >= 1.12-0") |
|
enable_testing() |
|
endif (ENABLE_CPPUNIT) |
|
|
|
# Mac integration |
|
pkg_check_modules (MacIntegration "gtk-mac-integration") |
|
if (MacIntegration_FOUND) |
|
message("Enable Mac integration") |
|
add_includes_ldflags ("${MacIntegration_LDFLAGS}" "${MacIntegration_INCLUDE_DIRS}") |
|
add_definitions (-DMAC_INTEGRATION) |
|
endif () |
|
|
|
# Plugins / scripting |
|
pkg_check_modules (Lua "lua5.3") |
|
if (NOT Lua_FOUND) |
|
pkg_check_modules (Lua "lua >= 5.3") |
|
endif() |
|
|
|
if (Lua_FOUND) |
|
message("Enable Xournal++ Plugins") |
|
add_includes_ldflags("${Lua_LDFLAGS}" "${Lua_INCLUDE_DIRS}") |
|
set(ENABLE_PLUGINS "true") |
|
endif () |
|
|
|
unset(add_includes_ldflags) |
|
|
|
# |
|
# DO NOT INCLUDE LIBRARIES WITH pkg_check_modules AFTER THIS LINE!!! |
|
# |
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
|
# Fix linker flag handling for MacOS builds where frameworks are separated from their flag |
|
string(REPLACE "-framework;" "-framework " xournalpp_LDFLAGS "${xournalpp_LDFLAGS}") |
|
endif() |
|
|
|
configure_file( |
|
src/config-features.h.in |
|
src/config-features.h |
|
ESCAPE_QUOTES @ONLY |
|
) |
|
configure_file ( |
|
src/filesystem.h.in |
|
src/filesystem.h |
|
) |
|
|
|
## I18n ## |
|
add_subdirectory (po) |
|
|
|
## Configuration headers and developement options ## |
|
|
|
# Development options |
|
option (DEV_CALL_LOG "Call log" OFF) |
|
|
|
# Debug options |
|
option (DEBUG_INPUT "Input debugging, e.g. eraser events etc" OFF) |
|
option (DEBUG_INPUT_PRINT_ALL_MOTION_EVENTS "Input debugging, print all motion events" OFF) |
|
option (DEBUG_INPUT_GDK_PRINT_EVENTS "Input debugging, print all GDK events" OFF) |
|
option (DEBUG_RECOGNIZER "Shape recognizer debug: output score etc" OFF) |
|
option (DEBUG_SHEDULER "Scheduler debug: show jobs etc" OFF) |
|
option (DEBUG_SHOW_ELEMENT_BOUNDS "Draw a surrounding border to all elements" OFF) |
|
option (DEBUG_SHOW_REPAINT_BOUNDS "Draw a border around all repaint rects" OFF) |
|
option (DEBUG_SHOW_PAINT_BOUNDS "Draw a border around all painted rects" OFF) |
|
mark_as_advanced (FORCE |
|
DEBUG_INPUT DEBUG_RECOGNIZER DEBUG_SHEDULER DEBUG_SHOW_ELEMENT_BOUNDS DEBUG_SHOW_REPAINT_BOUNDS DEBUG_SHOW_PAINT_BOUNDS |
|
) |
|
|
|
# Advanced development config |
|
set (DEV_TOOLBAR_CONFIG "toolbar.ini" CACHE STRING "Toolbar config file name") |
|
set (DEV_SETTINGS_XML_FILE "settings.xml" CACHE STRING "Settings file name") |
|
set (DEV_PRINT_CONFIG_FILE "print-config.ini" CACHE STRING "Print config file name") |
|
set (DEV_METADATA_FILE "metadata.ini" CACHE STRING "Metadata file name") |
|
set (DEV_METADATA_MAX_ITEMS 50 CACHE STRING "Maximal amount of metadata elements") |
|
set (DEV_ERRORLOG_DIR "errorlogs" CACHE STRING "Directory where errorlogfiles will be placed") |
|
set (DEV_FILE_FORMAT_VERSION 4 CACHE STRING "File format version" FORCE) |
|
|
|
option(DEV_ENABLE_GCOV "Build with gcov support" OFF) # Enabel gcov support – expanded in src/ |
|
option (DEV_CHECK_GTK3_COMPAT "Adds a few compiler flags to check basic GTK3 upgradeability support (still compiles for GTK2!)") |
|
if (DEV_CHECK_GTK3_COMPAT) |
|
add_definitions(-DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE) |
|
endif () |
|
|
|
mark_as_advanced (FORCE |
|
DEV_TOOLBAR_CONFIG DEV_SETTINGS_XML_FILE DEV_PRINT_CONFIG_FILE DEV_METADATA_FILE DEV_METADATA_MAX_ITEMS |
|
DEV_ENABLE_GCOV DEV_CHECK_GTK3_COMPAT |
|
) |
|
|
|
configure_file( |
|
src/config.h.in |
|
src/config.h |
|
ESCAPE_QUOTES @ONLY |
|
) |
|
|
|
configure_file( |
|
src/config-debug.h.in |
|
src/config-debug.h |
|
ESCAPE_QUOTES @ONLY |
|
) |
|
|
|
configure_file( |
|
src/config-dev.h.in |
|
src/config-dev.h |
|
ESCAPE_QUOTES @ONLY |
|
) |
|
|
|
configure_file( |
|
src/config-paths.h.in |
|
src/config-paths.h |
|
ESCAPE_QUOTES @ONLY |
|
) |
|
|
|
option(xournalpp_LINT "enable lint (clang-tidy) target" OFF) |
|
if (xournalpp_LINT) |
|
include(clang-tidy) |
|
endif () |
|
|
|
## Source building ## |
|
add_subdirectory (src) |
|
|
|
## Final targets and installing ## |
|
|
|
# Install resources |
|
install (DIRECTORY ui |
|
DESTINATION "share/xournalpp" |
|
COMPONENT xournalpp |
|
) |
|
install (DIRECTORY plugins |
|
DESTINATION "share/xournalpp" |
|
COMPONENT xournalpp |
|
) |
|
install (DIRECTORY resources |
|
DESTINATION "share/xournalpp" |
|
COMPONENT xournalpp |
|
) |
|
|
|
# Install desktop shortcuts for Linux |
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") |
|
message ("Installing desktop files") |
|
|
|
# Install icons |
|
install(FILES ui/pixmaps/com.github.xournalpp.xournalpp.svg |
|
DESTINATION share/icons/hicolor/scalable/apps) |
|
|
|
# Symlink are not easy to use with CMake, therefor simple install a copy... |
|
install(FILES ui/pixmaps/application-x-xopp.svg |
|
DESTINATION share/icons/hicolor/scalable/mimetypes/) |
|
install(FILES ui/pixmaps/application-x-xopt.svg |
|
DESTINATION share/icons/hicolor/scalable/mimetypes/) |
|
install(FILES ui/pixmaps/application-x-xojpp.svg |
|
DESTINATION share/icons/hicolor/scalable/mimetypes/) |
|
|
|
install(FILES ui/pixmaps/gnome-mime-application-x-xopp.svg |
|
DESTINATION share/icons/hicolor/scalable/mimetypes/) |
|
install(FILES ui/pixmaps/gnome-mime-application-x-xopt.svg |
|
DESTINATION share/icons/hicolor/scalable/mimetypes/) |
|
|
|
install(FILES desktop/com.github.xournalpp.xournalpp.xml |
|
DESTINATION share/mime/packages) |
|
install(FILES desktop/com.github.xournalpp.xournalpp.desktop |
|
DESTINATION share/applications) |
|
install(FILES desktop/x-xojpp.desktop |
|
DESTINATION share/mimelnk/application) |
|
install(FILES desktop/x-xopp.desktop |
|
DESTINATION share/mimelnk/application) |
|
install(FILES desktop/x-xopt.desktop |
|
DESTINATION share/mimelnk/application) |
|
|
|
install(FILES desktop/com.github.xournalpp.xournalpp.thumbnailer |
|
DESTINATION share/thumbnailers) |
|
|
|
install(FILES desktop/com.github.xournalpp.xournalpp.appdata.xml |
|
DESTINATION share/metainfo) |
|
endif () |
|
|
|
# Uninstall target |
|
configure_file ( |
|
cmake/cmake_uninstall.cmake.in |
|
cmake/cmake_uninstall.cmake |
|
@ONLY |
|
) |
|
|
|
add_custom_target(uninstall |
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake |
|
|
|
COMMENT "Uninstall entire Xournal++" |
|
) |
|
|
|
message(" |
|
Configuration: |
|
Compiler: ${CMAKE_CXX_COMPILER} |
|
CppUnit enabled: ${ENABLE_CPPUNIT} |
|
Filesystem library: ${CXX_FILESYSTEM_NAMESPACE} |
|
") |
|
|
|
option(CMAKE_DEBUG_INCLUDES_LDFLAGS "List include dirs and ldflags for xournalpp target" OFF) |
|
mark_as_advanced (FORCE CMAKE_DEBUG_INCLUDES_LDFLAGS) |
|
if (CMAKE_DEBUG_INCLUDES_LDFLAGS) |
|
message("Include directories: ${xournalpp_INCLUDE_DIRS}") |
|
message("LDFLAGS/LIBRARIES: ${xournalpp_LDFLAGS}") |
|
endif (CMAKE_DEBUG_INCLUDES_LDFLAGS) |
|
|
|
|
|
# Packaging options |
|
set (CPACK_OUTPUT_FILE_PREFIX packages) |
|
set (CPACK_PACKAGE_NAME "${PROJECT_PACKAGE}") |
|
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Xournal++ - Open source hand note-taking program") |
|
set (CPACK_DEBIAN_PACKAGE_DESCRIPTION |
|
"Xournal++ is a hand note taking software written in C++ with the target of |
|
flexibility, functionality and speed. Stroke recognizer and other parts are |
|
based on Xournal Code, which you can find at sourceforge. |
|
It supports Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. |
|
Supports pen input from devices such as Wacom Tablets. |
|
|
|
Xournal++ features: |
|
|
|
- Support for Pen preassure, e.g. Wacom Tablet |
|
- Support for annotating PDFs |
|
- Fill shape functionality |
|
- PDF Export (with and without paper style) |
|
- PNG Export (with and without transparent background) |
|
- Allows maping different tools/colors etc. to stylus/mouse buttons |
|
- Sidebar with Page Previews with page sorting, PDF Bookmarks and Layers |
|
- Enhanced support for image insertion |
|
- Eraser with multiple configurations |
|
- LaTeX support (requires a working LaTeX install) |
|
- Bug reporting, autosave, and auto backup tools |
|
- Customizeable toolbar, with multiple configurations |
|
- Page Template definitions |
|
- Shape drawing (line, arrow, circle, rect) |
|
- Shape resizing and rotation |
|
- Rotation snapping every 45 degrees |
|
- Rect snapping to grid |
|
- Audio recording and playback alongside with handwritten notes |
|
- Multi Language Support, English, German, Italian ... |
|
- Plugins using LUA Scripting") |
|
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") |
|
set (CPACK_PACKAGE_INSTALL_DIRECTORY "Xournal++") |
|
set (CPACK_PACKAGE_FILE_NAME "xournalpp-${PROJECT_VERSION}-${DISTRO_NAME}-${DISTRO_CODENAME}-${PACKAGE_ARCH}") |
|
|
|
# .deb package options |
|
set (CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PROJECT_VERSION}") |
|
set (CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PACKAGE_URL}) |
|
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "Andreas Butti <andreasbutti@gmail.com>") |
|
set (CPACK_DEBIAN_PACKAGE_SECTION "graphics") |
|
set (CPACK_DEBIAN_PACKAGE_DEPENDS |
|
"libglib2.0-0 (>= 2.32), libgtk-3-0 (>= 3.18), libpoppler-glib8 (>= 0.41.0), libxml2 (>= 2.0.0), libportaudiocpp0 (>= 12), libsndfile1 (>= 1.0.25), liblua5.3-0, libzip4 (>= 1.0.1) | libzip5, zlib1g, libc6") |
|
set (CPACK_DEBIAN_PACKAGE_SUGGESTS "texlive-base, texlive-latex-extra") # Latex tool |
|
# Use debian's arch scheme; we only care about x86/amd64 for now but feel free to add more |
|
if (${PACKAGE_ARCH} STREQUAL "x86_64") |
|
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") |
|
endif() |
|
|
|
if (NOT DEFINED CPACK_GENERATOR) |
|
set(CPACK_GENERATOR "TGZ") |
|
endif () |
|
|
|
include(CPack)
|
|
|