diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/CMakeLists.txt @@ -0,0 +1,73 @@ +project (kmymoney-and-all-its-deps) + +# +# Build all dependencies for KMyMoney and finally KMyMoney itself. +# Parameters: EXTERNALS_DOWNLOAD_DIR place to download all packages +# INSTALL_ROOT place to install everything to +# +# Example usage: cmake ..\kmymoneydep -DEXTERNALS_DOWNLOAD_DIR=/dev2/d -DINSTALL_ROOT=/dev2/i + + +cmake_minimum_required(VERSION 2.8.6) + +if(NOT SUBMAKE_JOBS) + set(SUBMAKE_JOBS 1) +endif() + +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "Compiling in the source directory is not supported. Use for example 'mkdir build; cd build; cmake ..'.") +endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + +# Tools must be obtained to work with: +include (ExternalProject) + +# allow specification of a directory with pre-downloaded +# requirements +if(NOT IS_DIRECTORY ${EXTERNALS_DOWNLOAD_DIR}) + message(FATAL_ERROR "No externals download dir set. Use -DEXTERNALS_DOWNLOAD_DIR") +endif() + +if(NOT IS_DIRECTORY ${INSTALL_ROOT}) + message(FATAL_ERROR "No install dir set. Use -DINSTALL_ROOT") +endif() + +set(TOP_INST_DIR ${INSTALL_ROOT}) +set(EXTPREFIX "${TOP_INST_DIR}") +set(CMAKE_PREFIX_PATH "${EXTPREFIX}") + +message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}") + +set(GLOBAL_BUILD_TYPE RelWithDebInfo) +set(GLOBAL_PROFILE ${GLOBAL_PROFILE} -DBUILD_TESTING=false) + +set(SECURITY_EXE_LINKER_FLAGS "") +set(SECURITY_SHARED_LINKER_FLAGS "") +set(SECURITY_MODULE_LINKER_FLAGS "") + +if (DEFINED EP_PREFIX) + set_directory_properties(PROPERTIES EP_PREFIX ${EP_PREFIX}) +endif () + + +if (UNIX AND NOT APPLE) + set(LINUX true) + set(PATCH_COMMAND patch) +endif () + +# this list must be dependency-ordered +add_subdirectory( ext_iconv ) +add_subdirectory( ext_gettext ) +add_subdirectory( ext_zlib ) +add_subdirectory( ext_boost ) +add_subdirectory( ext_png ) +add_subdirectory( ext_xml ) +add_subdirectory( ext_xslt ) +add_subdirectory( ext_lzma ) +add_subdirectory( ext_fontconfig) +add_subdirectory( ext_freetype) +add_subdirectory( ext_qt ) +add_subdirectory( ext_frameworks ) +add_subdirectory( ext_gmp ) +add_subdirectory( ext_alkimia ) +add_subdirectory( ext_kdiagram ) +add_subdirectory( ext_icu ) diff --git a/3rdparty/README.md b/3rdparty/README.md new file mode 100644 --- /dev/null +++ b/3rdparty/README.md @@ -0,0 +1,3 @@ += CMake external projects to build KMyMoney's dependencies on Linux = + +Base for this work was https://cgit.kde.org/krita.git/tree/3rdparty/README.md diff --git a/3rdparty/ext_alkimia/CMakeLists.txt b/3rdparty/ext_alkimia/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_alkimia/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_alkimia "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_alkimia + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL https://download.kde.org/stable/alkimia/7.0.2/alkimia-7.0.2.tar.xz + URL_MD5 d826e092f56e528c70c00748a04e4957 + + INSTALL_DIR ${PREFIX_ext_alkimia} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_alkimia} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" +) diff --git a/3rdparty/ext_boost/CMakeLists.txt b/3rdparty/ext_boost/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_boost/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_boost "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_boost + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/boost_1_61_0.tar.bz2 + URL_MD5 6095876341956f65f9d35939ccea1a9f + + CONFIGURE_COMMAND /bootstrap.sh --prefix=${PREFIX_ext_boost} --with-libraries=system + BUILD_COMMAND /b2 -j${SUBMAKE_JOBS} install + INSTALL_COMMAND "" + INSTALL_DIR ${PREFIX_ext_boost} + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_fontconfig/CMakeLists.txt b/3rdparty/ext_fontconfig/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_fontconfig/CMakeLists.txt @@ -0,0 +1,14 @@ +SET(PREFIX_ext_fontconfig "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_fontconfig + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/fontconfig-2.12.0.tar.gz + URL_MD5 d8b056231abcb6257db6dc6d745360b2 + + CONFIGURE_COMMAND /configure --prefix=${PREFIX_ext_fontconfig} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" +) diff --git a/3rdparty/ext_frameworks/CMakeLists.txt b/3rdparty/ext_frameworks/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/CMakeLists.txt @@ -0,0 +1,523 @@ +SET(EXTPREFIX_frameworks "${EXTPREFIX}" ) +# +# All needed frameworks: +# Tier 1 +# Archive +# Codecs +# Config +# CoreAddons +# DBusAddons +# GuiAddons +# I18n +# ItemModels +# ItemViews +# WidgetsAddons +# WindowSystem +# Solid +# Sonnet +# Tier 2 +# Auth +# Completion +# Crash +# JobWidgets +# Notifications +# Package +# Tier 3 +# ConfigWidgets +# IconThemes +# Service +# TextWidgets +# XmlGui +# Bookmarks +# GlobalAccel +# KIO +# Declarative +# KCMUtils +# Wallet + +ExternalProject_Add( + ext_extra_cmake_modules + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/extra-cmake-modules-5.44.0.zip + URL_MD5 74aa8fc501e27024390b01c81f2925eb + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/ecm_install_to_share.diff + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" +) + +ExternalProject_Add( + ext_karchive + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/karchive-5.44.0.zip + URL_MD5 c60a8e22b88cc7328610041638459689 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kcodecs + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kcodecs-5.44.0.zip + URL_MD5 786f4a1870825c7df5934da35374b51c + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kconfig + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kconfig-5.44.0.zip + URL_MD5 d0223ea471bbf463ec42c2a2355a5183 + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kconfig.diff + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kdbusaddons + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kdbusaddons-5.44.0.zip + URL_MD5 bee1d8ac4e6e87e3fe17ac7adba40b76 + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/desktoptojson.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kcoreaddons + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kcoreaddons-5.44.0.zip + URL_MD5 16a7379f3e2941d1c19d6f80939f15e8 + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/desktoptojson.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kguiaddons + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kguiaddons-5.44.0.zip + URL_MD5 440eefbf5abcafc492dcf857f7e4eaf5 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_ki18n + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/ki18n-5.44.0.zip + URL_MD5 333ab0a3f65a298e928d746144d4dc8e + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/ki18n-appdatalocation.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kitemmodels + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kitemmodels-5.44.0.zip + URL_MD5 ea43a5e2cc7033eb672796b108d7403b + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kitemviews + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kitemviews-5.44.0.zip + URL_MD5 8b15c703313c7a790c7db897ef17de7d + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kwidgetsaddons + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kwidgetsaddons-5.44.0.zip + URL_MD5 a9911d8d0f8aaf7a7afd84c41c8f80a1 + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kwidgetsaddons.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kwindowsystem + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kwindowsystem-5.44.0.zip + URL_MD5 75329f47cf8cd413fa1d15a57c298563 + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kwindowsystem-x11.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_solid + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/solid-5.44.0.zip + URL_MD5 2697e1633428a63c6dc1ce1a26dc5485 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_sonnet + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/sonnet-5.44.0.zip + URL_MD5 6c59ade0268bffdb5af93af340aef5ee + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules +) + +ExternalProject_Add( + ext_kauth + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kauth-5.44.0.zip + URL_MD5 b77ecf084b227f0ac3118f6af775299c + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kcoreaddons +) + +ExternalProject_Add( + ext_kcompletion + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kcompletion-5.44.0.zip + URL_MD5 0647885a702c338a1b656eb4f311ad16 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kwidgetsaddons ext_kconfig +) + +ExternalProject_Add( + ext_kcrash + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kcrash-5.44.0.zip + URL_MD5 61adc0e125c65288968d958acf25f4aa + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kcoreaddons ext_kwindowsystem +) + +ExternalProject_Add( + ext_kjobwidgets + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kjobwidgets-5.44.0.zip + URL_MD5 0297d9655c85309bc85c0f7ff50fdb72 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kcoreaddons ext_kwidgetsaddons +) + +ExternalProject_Add( + ext_knotifications + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/knotifications-5.44.0.zip + URL_MD5 c94e747cb1184f91aa084047e5c41d61 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kwindowsystem ext_kconfig ext_kcodecs ext_kcoreaddons +) + +ExternalProject_Add( + ext_kpackage + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kpackage-5.44.0.zip + URL_MD5 bab368ead50a516cd4f2dce1157415af + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_karchive ext_ki18n ext_kcoreaddons +) + +ExternalProject_Add( + ext_kconfigwidgets + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kconfigwidgets-5.44.0.zip + URL_MD5 46e2c1b755b6ee4f932a609451f32b42 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kauth ext_kcoreaddons ext_kcodecs ext_kconfig ext_kguiaddons ext_ki18n ext_kwidgetsaddons +) + +ExternalProject_Add( + ext_kiconthemes + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kiconthemes-5.44.0.zip + URL_MD5 080541d989b2a816c17a41339b9d35b3 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_karchive ext_ki18n ext_kcoreaddons ext_kconfigwidgets ext_kwidgetsaddons ext_kitemviews +) + +ExternalProject_Add( + ext_kservice + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kservice-5.44.0.zip + URL_MD5 62950b073eee9ad99a9eb73d2439b655 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kconfig ext_kcoreaddons ext_kcrash ext_kdbusaddons ext_ki18n +) + +ExternalProject_Add( + ext_ktextwidgets + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/ktextwidgets-5.44.0.zip + URL_MD5 d5e7f26038efeec17069ad7a231f2e13 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules ext_kcompletion ext_kconfig ext_kconfigwidgets ext_ki18n ext_kiconthemes ext_kservice ext_kwidgetsaddons ext_kwindowsystem ext_sonnet +) + +ExternalProject_Add( + ext_kxmlgui + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kxmlgui-5.44.0.zip + URL_MD5 b89499ffee5c768e87d4db20829467bd + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kcoreaddons ext_kitemviews ext_kconfig ext_kconfigwidgets ext_ki18n ext_kiconthemes ext_ktextwidgets ext_kwidgetsaddons ext_kwindowsystem +) + +ExternalProject_Add( + ext_kbookmarks + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kbookmarks-5.44.0.zip + URL_MD5 fd78c7fd52c324b919c878a7a3d0d887 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kconfig ext_kcoreaddons ext_kcodecs ext_kconfigwidgets ext_kiconthemes ext_kwidgetsaddons ext_kxmlgui +) + +ExternalProject_Add( + ext_kglobalaccel + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kglobalaccel-5.44.0.zip + URL_MD5 dabfff26dbed4494754f7327fadd3cf0 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kconfig ext_kcoreaddons ext_kcrash ext_kdbusaddons ext_kwindowsystem +) + +ExternalProject_Add( + ext_kio + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kio-5.44.0.zip + URL_MD5 44b6d7eaa9d56a0dd171e7c1f8cf7efe + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_extra_cmake_modules ext_karchive ext_kconfig ext_kcoreaddons ext_kdbusaddons ext_ki18n ext_kservice ext_solid ext_ki18n ext_kwindowsystem ext_kwidgetsaddons ext_kcompletion ext_kconfigwidgets ext_kiconthemes ext_kitemviews ext_kjobwidgets ext_kbookmarks +) + +ExternalProject_Add( + ext_kdeclarative + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kdeclarative-5.44.0.zip + URL_MD5 1b66d349365c586d4b67ceaf5fa35071 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kconfig ext_ki18n ext_kiconthemes ext_kio ext_kwidgetsaddons ext_kwindowsystem ext_kglobalaccel ext_kguiaddons ext_kpackage +) + +ExternalProject_Add( + ext_kcmutils + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kcmutils-5.44.0.zip + URL_MD5 920c1922396592be54002f84b4f1a816 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kitemviews ext_kconfigwidgets ext_kcoreaddons ext_ki18n ext_kiconthemes ext_kservice ext_kxmlgui ext_kdeclarative +) + +ExternalProject_Add( + ext_kwallet + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kwallet-5.44.0.zip + URL_MD5 7d8022a521208ece7d4d6ec8291ea377 + INSTALL_DIR ${EXTPREFIX_frameworks} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kcoreaddons ext_kconfig ext_kwindowsystem ext_ki18n +) + +ExternalProject_Add( + ext_kimageformats + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.kde.org/stable/frameworks/5.44/kimageformats-5.44.0.zip + URL_MD5 02a98b682f9cb655592148d7ebcc05e7 + INSTALL_DIR ${EXTPREFIX_frameworks} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kimageformats.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" + DEPENDS ext_kitemviews +) diff --git a/3rdparty/ext_frameworks/desktoptojson.diff b/3rdparty/ext_frameworks/desktoptojson.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/desktoptojson.diff @@ -0,0 +1,11 @@ +diff --git a/src/desktoptojson/CMakeLists.txt b/src/desktoptojson/CMakeLists.txt +index dd668a4..424d14c 100644 +--- a/src/desktoptojson/CMakeLists.txt ++++ b/src/desktoptojson/CMakeLists.txt +@@ -11,5 +11,5 @@ ecm_mark_nongui_executable(desktoptojson) + + target_link_libraries(desktoptojson Qt5::Core) + target_compile_definitions(desktoptojson PRIVATE BUILDING_DESKTOPTOJSON_TOOL=1) +- ++set_target_properties(desktoptojson PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/bin") + install(TARGETS desktoptojson EXPORT KF5CoreAddonsToolingTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/3rdparty/ext_frameworks/ecm_install_to_share.diff b/3rdparty/ext_frameworks/ecm_install_to_share.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/ecm_install_to_share.diff @@ -0,0 +1,32 @@ +commit a4170399404bf32e874e35d35f8a66703b2fff92 +Author: Boudewijn Rempt +Date: Sat Jul 30 14:33:10 2016 +0200 + + Revert "Use "${BIN_INSTALL_DIR}/data" for DATAROOTDIR on Windows." + + This reverts commit 2503481e4537b88d76b4a596f519cb3311e1ca2a. + +diff --git a/kde-modules/KDEInstallDirs.cmake b/kde-modules/KDEInstallDirs.cmake +index e84c0b3..1773706 100644 +--- a/kde-modules/KDEInstallDirs.cmake ++++ b/kde-modules/KDEInstallDirs.cmake +@@ -489,15 +489,10 @@ _define_absolute(SHAREDSTATEDIR "com" + + + +-if (WIN32) +- _define_relative(DATAROOTDIR BINDIR "data" +- "read-only architecture-independent data root" +- SHARE_INSTALL_PREFIX) +-else() +- _define_absolute(DATAROOTDIR "share" +- "read-only architecture-independent data root" +- SHARE_INSTALL_PREFIX) +-endif() ++ ++_define_absolute(DATAROOTDIR "share" ++ "read-only architecture-independent data root" ++ SHARE_INSTALL_PREFIX) + + _define_relative(DATADIR DATAROOTDIR "" + "read-only architecture-independent data" diff --git a/3rdparty/ext_frameworks/kconfig.diff b/3rdparty/ext_frameworks/kconfig.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/kconfig.diff @@ -0,0 +1,144 @@ +diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp +index 3e0578f..6c4408d 100644 +--- a/autotests/kconfigtest.cpp ++++ b/autotests/kconfigtest.cpp +@@ -587,7 +587,7 @@ void KConfigTest::testPathQtHome() + qunsetenv("QT_CACHE_HOME"); + qunsetenv("QT_CONFIG_HOME"); + QVERIFY(group.hasKey("dataDir")); +- QCOMPARE(group.readEntry("dataDir", QString()), QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation).append(QStringLiteral("/kconfigtest"))); ++ QCOMPARE(group.readEntry("dataDir", QString()), QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append(QStringLiteral("/kconfigtest"))); + QVERIFY(group.hasKey("cacheDir")); + QCOMPARE(group.readEntry("cacheDir", QString()), QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation).append(QStringLiteral("/kconfigtest"))); + QVERIFY(group.hasKey("configDir")); +diff --git a/autotests/kdesktopfiletest.cpp b/autotests/kdesktopfiletest.cpp +index fd4a5c9..db08f22 100644 +--- a/autotests/kdesktopfiletest.cpp ++++ b/autotests/kdesktopfiletest.cpp +@@ -222,7 +222,7 @@ void KDesktopFileTest::testIsAuthorizedDesktopFile() + QVERIFY(QFile::exists(fileName)); + QVERIFY(!KDesktopFile::isAuthorizedDesktopFile(fileName)); + +- const QString installedFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("/kservices5/http_cache_cleaner.desktop")); ++ const QString installedFile = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("/kservices5/http_cache_cleaner.desktop")); + if (!installedFile.isEmpty()) { + QVERIFY(KDesktopFile::isAuthorizedDesktopFile(installedFile)); + } else { +@@ -281,8 +281,8 @@ void KDesktopFileTest::testLocateLocal_data() + { + QString systemConfigLocation = QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation).last(); + QString writableConfigLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); +- QString systemDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last(); +- QString writableDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); ++ QString systemDataLocation = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).last(); ++ QString writableDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + + QTest::addColumn("path"); + QTest::addColumn("result"); +diff --git a/autotests/test_kconf_update.cpp b/autotests/test_kconf_update.cpp +index 3353061..a80ae1e 100644 +--- a/autotests/test_kconf_update.cpp ++++ b/autotests/test_kconf_update.cpp +@@ -625,7 +625,7 @@ void TestKConfUpdate::testScript() + + QSharedPointer updFile(writeUpdFile(updContent)); + +- const QString scriptDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/kconf_update"; ++ const QString scriptDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/kconf_update"; + QVERIFY(QDir().mkpath(scriptDir)); + QString scriptPath = scriptDir + "/test.sh"; + writeFile(scriptPath, updScript); +diff --git a/docs/options.md b/docs/options.md +index fab22e1..8823818 100644 +--- a/docs/options.md ++++ b/docs/options.md +@@ -96,4 +96,4 @@ They are: + + * `$QT_CACHE_HOME` - QStandardPaths::GenericCacheLocation + * `$QT_CONFIG_HOME` - QStandardPaths::GenericConfigLocation +-* `$QT_DATA_HOME` - QStandardPaths::GenericDataLocation ++* `$QT_DATA_HOME` - QStandardPaths::AppDataLocation +diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp +index c8eb90a..18d1b69 100644 +--- a/src/core/kconfig.cpp ++++ b/src/core/kconfig.cpp +@@ -229,7 +229,7 @@ QString KConfigPrivate::expandString(const QString &value) + env = QString::fromLocal8Bit(pEnv.constData()); + } else { + if (aVarName == QStringLiteral("QT_DATA_HOME")) { +- env = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); ++ env = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + } else if (aVarName == QStringLiteral("QT_CONFIG_HOME")) { + env = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); + } else if (aVarName == QStringLiteral("QT_CACHE_HOME")) { +diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp +index b0b6a87..daddd54 100644 +--- a/src/core/kdesktopfile.cpp ++++ b/src/core/kdesktopfile.cpp +@@ -88,7 +88,7 @@ QString KDesktopFile::locateLocal(const QString &path) + } + } + // Relative to xdg data dir? (much more common) +- Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { ++ Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)) { + if (path.startsWith(dir + plus)) { + relativePath = path.mid(dir.length() + 1); + } +@@ -97,7 +97,7 @@ QString KDesktopFile::locateLocal(const QString &path) + // What now? The desktop file doesn't come from XDG_DATA_DIRS. Use filename only and hope for the best. + relativePath = path.mid(path.lastIndexOf(QLatin1Char('/')) + 1); + } +- return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + relativePath; ++ return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1Char('/') + relativePath; + } + + bool KDesktopFile::isDesktopFile(const QString &path) +@@ -134,7 +134,7 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) + } + } + const QString servicesDir = QStringLiteral("kservices5/"); // KGlobal::dirs()->xdgDataRelativePath("services") +- Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { ++ Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)) { + if (QDir(xdgDataPrefix).exists()) { + const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); + if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) { +diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp +index ab7d946..eeaf6ca 100644 +--- a/src/kconf_update/kconf_update.cpp ++++ b/src/kconf_update/kconf_update.cpp +@@ -125,7 +125,7 @@ KonfUpdate::KonfUpdate(QCommandLineParser *parser) + m_bUseConfigInfo = false; + if (parser->isSet(QStringLiteral("check"))) { + m_bUseConfigInfo = true; +- const QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kconf_update/" + parser->value(QStringLiteral("check"))); ++ const QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, "kconf_update/" + parser->value(QStringLiteral("check"))); + if (file.isEmpty()) { + qWarning("File '%s' not found.", parser->value(QStringLiteral("check")).toLocal8Bit().data()); + log() << "File '" << parser->value(QStringLiteral("check")) << "' passed on command line not found" << endl; +@@ -177,7 +177,7 @@ KonfUpdate::log() + { + if (!m_textStream) { + #if 0 +- QString dir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + "kconf_update/log"; ++ QString dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1Char('/') + "kconf_update/log"; + QDir().mkpath(dir); + QString file = dir + "/update.log"; + m_file = new QFile(file); +@@ -206,7 +206,7 @@ QStringList KonfUpdate::findUpdateFiles(bool dirtyOnly) + { + QStringList result; + +- const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kconf_update"), QStandardPaths::LocateDirectory); ++ const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral("kconf_update"), QStandardPaths::LocateDirectory); + Q_FOREACH (const QString &d, dirs) { + const QDir dir(d); + +@@ -760,7 +760,7 @@ void KonfUpdate::gotScript(const QString &_script) + return; + } + +- QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kconf_update/") + script); ++ QString path = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("kconf_update/") + script); + if (path.isEmpty()) { + if (interpreter.isEmpty()) { + path = CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/kconf_update_bin/" + script; diff --git a/3rdparty/ext_frameworks/ki18n-appdatalocation.diff b/3rdparty/ext_frameworks/ki18n-appdatalocation.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/ki18n-appdatalocation.diff @@ -0,0 +1,22 @@ +diff --git a/src/kcatalog.cpp b/src/kcatalog.cpp +index c18d40f..b0ed09d 100644 +--- a/src/kcatalog.cpp ++++ b/src/kcatalog.cpp +@@ -128,7 +128,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, + } + } + +- QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, ++ QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, + QStringLiteral("locale/") + relpath); + QString localeDir; + if (file.isEmpty()) { +@@ -143,7 +143,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, + QSet KCatalog::availableCatalogLanguages(const QByteArray &domain_) + { + QString domain = QFile::decodeName(domain_); +- QStringList localeDirPaths = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, ++ QStringList localeDirPaths = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, + QStringLiteral("locale"), + QStandardPaths::LocateDirectory); + diff --git a/3rdparty/ext_frameworks/ki18n.diff b/3rdparty/ext_frameworks/ki18n.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/ki18n.diff @@ -0,0 +1,62 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 178117e..497395d 100755 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -54,11 +54,11 @@ if(MSVC) + endif() + + add_definitions(-DTRANSLATION_DOMAIN=\"ki18n5\") +-if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") +- ki18n_install(po) +-endif() ++#if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ++# ki18n_install(po) ++#endif() + add_subdirectory(src) +-add_subdirectory(autotests) ++#add_subdirectory(autotests) + + # create a Config.cmake and a ConfigVersion.cmake file and install them + set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5I18n") +diff --git a/cmake/KF5I18NMacros.cmake b/cmake/KF5I18NMacros.cmake +index 53ba812..db8ea98 100755 +--- a/cmake/KF5I18NMacros.cmake ++++ b/cmake/KF5I18NMacros.cmake +@@ -25,14 +25,9 @@ + # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + +-find_package(Gettext REQUIRED) +-find_package(PythonInterp REQUIRED) +- +-set(_ki18n_pmap_compile_script ${CMAKE_CURRENT_LIST_DIR}/ts-pmap-compile.py) +-set(_ki18n_uic_script ${CMAKE_CURRENT_LIST_DIR}/kf5i18nuic.cmake) +- + #create the implementation files from the ui files and add them to the list of sources + #usage: KI18N_WRAP_UI(foo_SRCS ${ui_files}) ++set(_ki18n_uic_script ${CMAKE_CURRENT_LIST_DIR}/kf5i18nuic.cmake) + macro (KI18N_WRAP_UI _sources ) + foreach (_current_FILE ${ARGN}) + +@@ -57,6 +52,13 @@ macro (KI18N_WRAP_UI _sources ) + endforeach (_current_FILE) + endmacro (KI18N_WRAP_UI) + ++find_package(Gettext) ++find_package(PythonInterp) ++ ++if (Gettext_FOUND AND PythonInterp_FOUND) ++ ++set(_ki18n_pmap_compile_script ${CMAKE_CURRENT_LIST_DIR}/ts-pmap-compile.py) ++ + #install the scripts for a given language in the target folder + #usage: KI18N_INSTALL_TS_FILES("ja" ${scripts_dir}) + function(KI18N_INSTALL_TS_FILES lang scripts_dir) +@@ -225,3 +227,7 @@ function(_KI18N_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name) + set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} ) + endfunction() + # End of CMake copied code #################################################### ++ ++else() ++ message("Warning: Python and Gettext are needed for some functionality.") ++endif() # Python and gettext found diff --git a/3rdparty/ext_frameworks/kimageformats.diff b/3rdparty/ext_frameworks/kimageformats.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/kimageformats.diff @@ -0,0 +1,14 @@ +diff --git a/src/imageformats/CMakeLists.txt b/src/imageformats/CMakeLists.txt +index 0db2ae8..e78b55d 100644 +--- a/src/imageformats/CMakeLists.txt ++++ b/src/imageformats/CMakeLists.txt +@@ -28,6 +28,9 @@ if(OpenEXR_FOUND) + add_library(kimg_exr MODULE exr.cpp) + target_link_libraries(kimg_exr Qt5::Gui OpenEXR::IlmImf) + kde_target_enable_exceptions(kimg_exr PRIVATE) ++ if (WIN32) ++ add_definitions(-DOPENEXR_DLL) ++ endif() + + install(TARGETS kimg_exr DESTINATION ${KDE_INSTALL_QTPLUGINDIR}/imageformats/) + install(FILES exr.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/qimageioplugins/) diff --git a/3rdparty/ext_frameworks/kwidgetsaddons.diff b/3rdparty/ext_frameworks/kwidgetsaddons.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/kwidgetsaddons.diff @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index f7eb931..3f0f6d6 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -39,8 +39,8 @@ if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") + endif() + + add_subdirectory(src) +-add_subdirectory(autotests) +-add_subdirectory(tests) ++#add_subdirectory(autotests) ++#add_subdirectory(tests) + + # create a Config.cmake and a ConfigVersion.cmake file and install them + set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5WidgetsAddons") diff --git a/3rdparty/ext_frameworks/kwindowsystem-x11.diff b/3rdparty/ext_frameworks/kwindowsystem-x11.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_frameworks/kwindowsystem-x11.diff @@ -0,0 +1,53 @@ +diff --git a/src/kstartupinfo.cpp b/src/kstartupinfo.cpp +index a97b8b5..0ae7e5b 100644 +--- a/src/kstartupinfo.cpp ++++ b/src/kstartupinfo.cpp +@@ -493,7 +493,7 @@ bool KStartupInfo::sendStartupX(Display *disp_P, const KStartupInfoId &id_P, + #ifdef KSTARTUPINFO_ALL_DEBUG + qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; + #endif +- return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); ++ return true; // KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + #else + Q_UNUSED(disp_P) + Q_UNUSED(data_P) +@@ -548,7 +548,7 @@ bool KStartupInfo::sendChangeX(Display *disp_P, const KStartupInfoId &id_P, + #ifdef KSTARTUPINFO_ALL_DEBUG + qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; + #endif +- return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); ++ return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + #else + Q_UNUSED(disp_P) + Q_UNUSED(data_P) +@@ -580,7 +580,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P) + #ifdef KSTARTUPINFO_ALL_DEBUG + qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; + #endif +- return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); ++ return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + #else + Q_UNUSED(disp_P) + return true; +@@ -615,7 +615,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P, + #ifdef KSTARTUPINFO_ALL_DEBUG + qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; + #endif +- return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); ++ return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + #else + Q_UNUSED(disp_P) + Q_UNUSED(id_P) +diff --git a/src/platforms/xcb/kwindowsystem.cpp b/src/platforms/xcb/kwindowsystem.cpp +index 9d28704..603d9b2 100644 +--- a/src/platforms/xcb/kwindowsystem.cpp ++++ b/src/platforms/xcb/kwindowsystem.cpp +@@ -196,7 +196,7 @@ bool NETEventFilter::nativeEventFilter(xcb_generic_event_t *ev) + int old_number_of_desktops = numberOfDesktops(); + bool old_showing_desktop = showingDesktop(); + unsigned long m[ 5 ]; +- NETRootInfo::event(ev, m, 5); ++ //NETRootInfo::event(ev, m, 5); + + if ((m[ PROTOCOLS ] & CurrentDesktop) && currentDesktop() != old_current_desktop) { + emit s_q->currentDesktopChanged(currentDesktop()); diff --git a/3rdparty/ext_freetype/CMakeLists.txt b/3rdparty/ext_freetype/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_freetype/CMakeLists.txt @@ -0,0 +1,14 @@ +SET(PREFIX_ext_freetype "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_freetype + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/freetype-2.6.5.tar.gz + URL_MD5 31b2276515d9ee1c7f37d9c9f4f3145a + + CONFIGURE_COMMAND /configure --prefix=${PREFIX_ext_freetype} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" +) diff --git a/3rdparty/ext_gettext/CMakeLists.txt b/3rdparty/ext_gettext/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_gettext/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_gettext "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_gettext + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/gettext-0.19.8.tar.gz + URL_MD5 e4fffc004f21596becd1055cf36be31d + + INSTALL_DIR ${PREFIX_ext_gettext} + CONFIGURE_COMMAND /configure --prefix=${PREFIX_ext_gettext} --disable-java ${GLOBAL_AUTOMAKE_PROFILE} --disable-native-java + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + DEPENDS ext_iconv +) diff --git a/3rdparty/ext_gmp/CMakeLists.txt b/3rdparty/ext_gmp/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_gmp/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_gmp "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_gmp + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2 + URL_MD5 8ddbb26dc3bd4e2302984debba1406a5 + + INSTALL_DIR ${PREFIX_ext_gmp} + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_gmp} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_iconv/CMakeLists.txt b/3rdparty/ext_iconv/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_iconv/CMakeLists.txt @@ -0,0 +1,17 @@ +SET(PREFIX_ext_iconv "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_iconv + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/libiconv-1.14.tar.gz + URL_MD5 e34509b1623cec449dfeb73d7ce9c6c6 + + INSTALL_DIR ${PREFIX_ext_iconv} + PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/iconv.diff + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_iconv} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_iconv/iconv.diff b/3rdparty/ext_iconv/iconv.diff new file mode 100644 --- /dev/null +++ b/3rdparty/ext_iconv/iconv.diff @@ -0,0 +1,13 @@ +diff --git a/srclib/stdio.in.h b/srclib/stdio.in.h +index 473c84c..2990bef 100644 +--- a/srclib/stdio.in.h ++++ b/srclib/stdio.in.h +@@ -695,7 +695,7 @@ _GL_CXXALIASWARN (gets); + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++//_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); + #endif + + diff --git a/3rdparty/ext_icu/CMakeLists.txt b/3rdparty/ext_icu/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_icu/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_icu "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_icu + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://download.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz + URL_MD5 490ad9d920158e0314e10ba74ae9a150 + + INSTALL_DIR ${PREFIX_ext_icu} + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_icu} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_kdiagram/CMakeLists.txt b/3rdparty/ext_kdiagram/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_kdiagram/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_kdiagram "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_kdiagram + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL https://download.kde.org/stable/kdiagram/2.6.1/kdiagram-2.6.1.tar.xz + URL_MD5 d0f8624a2decad2ba6a871e13799da23 + + INSTALL_DIR ${PREFIX_ext_kdiagram} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_kdiagram} + -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} + ${GLOBAL_PROFILE} + -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} + -DBUILD_TESTING=false + UPDATE_COMMAND "" +) diff --git a/3rdparty/ext_lzma/CMakeLists.txt b/3rdparty/ext_lzma/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_lzma/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_lzma "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_lzma + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://tukaani.org/xz/xz-5.2.3.tar.xz + URL_MD5 60fb79cab777e3f71ca43d298adacbd5 + + INSTALL_DIR ${PREFIX_ext_lzma} + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_lzma} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_png/CMakeLists.txt b/3rdparty/ext_png/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_png/CMakeLists.txt @@ -0,0 +1,12 @@ +SET(PREFIX_ext_png "${EXTPREFIX}" ) + +ExternalProject_Add( ext_png + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/libpng-1.6.34.tar.gz + URL_MD5 03fbc5134830240104e96d3cda648e71 + + INSTALL_DIR ${PREFIX_ext_png} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_png} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DPNG_TESTS=OFF + + UPDATE_COMMAND "" +) diff --git a/3rdparty/ext_qt/CMakeLists.txt b/3rdparty/ext_qt/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_qt/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(EXTPREFIX_qt "${EXTPREFIX}") + +ExternalProject_Add( + ext_qt + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL https://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.tar.xz + URL_MD5 c5e275ab0ed7ee61d0f4b82cd471770d + + CONFIGURE_COMMAND /configure -prefix ${EXTPREFIX_qt} -opensource -confirm-license -verbose -nomake examples -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtenginio -skip qtgraphicaleffects -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtandroidextras -skip qtserialport -skip qtdatavis3d -skip qtvirtualkeyboard -skip qtspeech -skip qtsensors -skip qtgamepad -skip qtscxml -skip qtremoteobjects -skip qtxmlpatterns -skip qtnetworkauth -skip qtcharts -skip qtdatavis3d -skip qtgamepad -skip qtpurchasing -skip qtscxml -skip qtserialbus -skip qtspeech -skip qtvirtualkeyboard + INSTALL_DIR ${EXTPREFIX_qt} + + BUILD_COMMAND $(MAKE) + INSTALL_COMMAND $(MAKE) install + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_xml/CMakeLists.txt b/3rdparty/ext_xml/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_xml/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_xml "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_xml + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL ftp://xmlsoft.org/libxslt/libxml2-2.9.7.tar.gz + URL_MD5 896608641a08b465098a40ddf51cefba + + INSTALL_DIR ${PREFIX_ext_xml} + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_xml} --without-python + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_xslt/CMakeLists.txt b/3rdparty/ext_xslt/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_xslt/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(PREFIX_ext_xslt "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_xslt + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL ftp://xmlsoft.org/libxslt/libxslt-1.1.32.tar.gz + URL_MD5 1fc72f98e98bf4443f1651165f3aa146 + + INSTALL_DIR ${PREFIX_ext_xslt} + CONFIGURE_COMMAND ./configure --prefix=${PREFIX_ext_xslt} ${GLOBAL_AUTOMAKE_PROFILE} + BUILD_COMMAND make + INSTALL_COMMAND make install + + UPDATE_COMMAND "" + BUILD_IN_SOURCE 1 +) diff --git a/3rdparty/ext_zlib/CMakeLists.txt b/3rdparty/ext_zlib/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/3rdparty/ext_zlib/CMakeLists.txt @@ -0,0 +1,12 @@ +SET(PREFIX_ext_zlib "${EXTPREFIX}" ) + +ExternalProject_Add( + ext_zlib + DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} + URL http://files.kde.org/krita/build/dependencies/zlib-1.2.11.tar.gz + URL_MD5 1c9f62f0778697a09d36121ead88e08e + + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_zlib} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} + + UPDATE_COMMAND "" +) diff --git a/packaging/linux/appimage/build-deps.sh b/packaging/linux/appimage/build-deps.sh new file mode 100644 --- /dev/null +++ b/packaging/linux/appimage/build-deps.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# Build all KMyMoney's dependencies on Ubuntu 14.04. +# +# Prerequisites: cmake git build-essential libxcb-keysyms1-dev plus all deps for Qt5 +# + +# Halt on errors and be verbose about what we are doing +set -e +set -x + +# Read in our parameters +export BUILD_PREFIX=$1 +export KMYMONEY_SOURCES=$2 + +# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. +# That's not always the case, so make sure it is +export LC_ALL=en_US.UTF-8 +export LANG=en_us.UTF-8 + +# We want to use $prefix/deps/usr/ for all our dependencies +export DEPS_INSTALL_PREFIX=$BUILD_PREFIX/deps/usr/ +export DOWNLOADS_DIR=$BUILD_PREFIX/downloads/ + +# Setup variables needed to help everything find what we build +export LD_LIBRARY_PATH=$DEPS_INSTALL_PREFIX/lib:$LD_LIBRARY_PATH +export PATH=$DEPS_INSTALL_PREFIX/bin:$PATH +export PKG_CONFIG_PATH=$DEPS_INSTALL_PREFIX/share/pkgconfig:$DEPS_INSTALL_PREFIX/lib/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH +export CMAKE_PREFIX_PATH=$DEPS_INSTALL_PREFIX:$CMAKE_PREFIX_PATH + +# A kmymoney build layout looks like this: +# kmymoney/ -- the source directory +# downloads/ -- downloads of the dependencies from files.kde.org +# deps-build/ -- build directory for the dependencies +# deps/ -- the location for the built dependencies +# build/ -- build directory for kmymoney itself +# kmymoney.appdir/ -- install directory for kmymoney and the dependencies + +# Make sure our downloads directory exists +if [ ! -d $DOWNLOADS_DIR ] ; then + mkdir -p $DOWNLOADS_DIR +fi + +# Make sure our build directory exists +if [ ! -d $BUILD_PREFIX/deps-build/ ] ; then + mkdir -p $BUILD_PREFIX/deps-build/ +fi + +# The 3rdparty dependency handling in KMyMoney also requires the install directory to be pre-created +if [ ! -d $DEPS_INSTALL_PREFIX ] ; then + mkdir -p $DEPS_INSTALL_PREFIX +fi + +# Switch to our build directory as we're basically ready to start building... +cd $BUILD_PREFIX/deps-build/ + +# Configure the dependencies for building +cmake $KMYMONEY_SOURCES/3rdparty -DCMAKE_INSTALL_PREFIX=$DEPS_INSTALL_PREFIX -DINSTALL_ROOT=$DEPS_INSTALL_PREFIX -DEXTERNALS_DOWNLOAD_DIR=$DOWNLOADS_DIR + +# Now start building everything we need, in the appropriate order +cmake --build . --config RelWithDebInfo --target ext_iconv +cmake --build . --config RelWithDebInfo --target ext_gettext +cmake --build . --config RelWithDebInfo --target ext_zlib +cmake --build . --config RelWithDebInfo --target ext_boost +cmake --build . --config RelWithDebInfo --target ext_png +cmake --build . --config RelWithDebInfo --target ext_xml +cmake --build . --config RelWithDebInfo --target ext_xslt +cmake --build . --config RelWithDebInfo --target ext_lzma +cmake --build . --config RelWithDebInfo --target ext_fontconfig +cmake --build . --config RelWithDebInfo --target ext_freetype +cmake --build . --config RelWithDebInfo --target ext_qt +cmake --build . --config RelWithDebInfo --target ext_frameworks +cmake --build . --config RelWithDebInfo --target ext_gmp +cmake --build . --config RelWithDebInfo --target ext_alkimia +cmake --build . --config RelWithDebInfo --target ext_kdiagram +cmake --build . --config RelWithDebInfo --target ext_icu diff --git a/packaging/linux/appimage/build-image.sh b/packaging/linux/appimage/build-image.sh new file mode 100644 --- /dev/null +++ b/packaging/linux/appimage/build-image.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# Halt on errors and be verbose about what we are doing +set -e +set -x + +# Read in our parameters +export BUILD_PREFIX=$1 +export KMYMONEY_SOURCES=$2 + +# Save some frequently referenced locations in variables for ease of use / updating +export APPDIR=$BUILD_PREFIX/kmymoney.appdir +export PLUGINS=$APPDIR/usr/lib/plugins/kmymoney/ + +# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. +# That's not always the case, so make sure it is +export LC_ALL=en_US.UTF-8 +export LANG=en_us.UTF-8 + +# We want to use $prefix/deps/usr/ for all our dependencies +export DEPS_INSTALL_PREFIX=$BUILD_PREFIX/deps/usr/ +export DOWNLOADS_DIR=$BUILD_PREFIX/downloads/ + +# Setup variables needed to help everything find what we built +export LD_LIBRARY_PATH=$DEPS_INSTALL_PREFIX/lib/:$DEPS_INSTALL_PREFIX/lib/x86_64-linux-gnu/:$APPDIR/usr/lib/:$LD_LIBRARY_PATH +export PATH=$DEPS_INSTALL_PREFIX/bin/:$PATH +export PKG_CONFIG_PATH=$DEPS_INSTALL_PREFIX/share/pkgconfig/:$DEPS_INSTALL_PREFIX/lib/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH +export CMAKE_PREFIX_PATH=$DEPS_INSTALL_PREFIX:$CMAKE_PREFIX_PATH + +# Switch over to our build prefix +cd $BUILD_PREFIX + +# +# Now we can get the process started! +# + +# Step 0: place the translations where ki18n and Qt look for them +if [ -d $APPDIR/usr/share/locale ] ; then + mv $APPDIR/usr/share/locale $APPDIR/usr/share/kmymoney +fi + +# Step 1: Copy over all the resources provided by dependencies that we need +cp -r $DEPS_INSTALL_PREFIX/share/locale $APPDIR/usr/share/kmymoney +cp -r $DEPS_INSTALL_PREFIX/share/kf5 $APPDIR/usr/share +cp -r $DEPS_INSTALL_PREFIX/share/mime $APPDIR/usr/share +cp -r $DEPS_INSTALL_PREFIX/translations $APPDIR/usr/ + +# Step 2: Relocate x64 binaries from the architecture specific directory as required for Appimages +mv $APPDIR/usr/lib/x86_64-linux-gnu/* $APPDIR/usr/lib +rm -rf $APPDIR/usr/lib/x86_64-linux-gnu/ + +# Step 3: Update the rpath in the various plugins we have to make sure they'll be loadable in an Appimage context +for lib in $PLUGINS/*.so*; do + patchelf --set-rpath '$ORIGIN/..' $lib; +done + +# Step 4: Build the image!!! +linuxdeployqt $APPDIR/usr/share/applications/org.kde.kmymoney.desktop \ + -executable=$APPDIR/usr/bin/kmymoney \ + -qmldir=$DEPS_INSTALL_PREFIX/qml \ + -verbose=2 \ + -bundle-non-qt-libs \ + -appimage + +# Step 5: Find out what version of KMyMoney we built and give the Appimage a proper name +cd $BUILD_PREFIX/kmymoney-build +KMYMONEY_VERSION=$(grep "KMyMoney VERSION" CMakeLists.txt | cut -d '"' -f 2) + +# Also find out the revision of Git we built +# Then use that to generate a combined name we'll distribute +cd $KMYMONEY_SOURCES +if [[ -d .git ]]; then + GIT_REVISION=$(git rev-parse --short HEAD) + VERSION=$KMYMONEY_VERSION-$GIT_REVISION +else + VERSION=$KMYMONEY_VERSION +fi + +# Return to our build root +cd $BUILD_PREFIX + +# Generate a new name for the Appimage file and rename it accordingly +APPIMAGE=kmymoney-"$VERSION"-x86_64.appimage +mv KMyMoney-x86_64.AppImage $APPIMAGE diff --git a/packaging/linux/appimage/build-kmymoney.sh b/packaging/linux/appimage/build-kmymoney.sh new file mode 100644 --- /dev/null +++ b/packaging/linux/appimage/build-kmymoney.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Halt on errors and be verbose about what we are doing +set -e +set -x + +# Read in our parameters +export BUILD_PREFIX=$1 +export KMYMONEY_SOURCES=$2 + +# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. +# That's not always the case, so make sure it is +export LC_ALL=en_US.UTF-8 +export LANG=en_us.UTF-8 + +# We want to use $prefix/deps/usr/ for all our dependencies +export DEPS_INSTALL_PREFIX=$BUILD_PREFIX/deps/usr/ +export DOWNLOADS_DIR=$BUILD_PREFIX/downloads/ + +# Setup variables needed to help everything find what we build +export LD_LIBRARY_PATH=$DEPS_INSTALL_PREFIX/lib:$LD_LIBRARY_PATH +export PATH=$DEPS_INSTALL_PREFIX/bin:$PATH +export PKG_CONFIG_PATH=$DEPS_INSTALL_PREFIX/share/pkgconfig:$DEPS_INSTALL_PREFIX/lib/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH +export CMAKE_PREFIX_PATH=$DEPS_INSTALL_PREFIX:$CMAKE_PREFIX_PATH + +# Make sure our build directory exists +if [ ! -d $BUILD_PREFIX/kmymoney-build/ ] ; then + mkdir -p $BUILD_PREFIX/kmymoney-build/ +fi + +# Now switch to it +cd $BUILD_PREFIX/kmymoney-build/ + +# Determine how many CPUs we have +CPU_COUNT=`grep processor /proc/cpuinfo | wc -l` + +# Configure KMyMoney +cmake $KMYMONEY_SOURCES \ + -DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX/kmymoney.appdir/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TESTING=FALSE + +# Build and Install KMyMoney (ready for the next phase) +make -j$CPU_COUNT install