From d6c3173c3d10d4d74873602231763fe1e9231bca Mon Sep 17 00:00:00 2001 From: Alf Gaida Date: Fri, 14 Oct 2016 23:07:19 +0200 Subject: [PATCH] Adding upstream version 0.1.0. Signed-off-by: Alf Gaida --- AUTHORS | 27 ++ BSD-3-Clause | 25 ++ CHANGELOG | 185 ++++++++++++ CMakeLists.txt | 55 ++++ README.md | 20 ++ cmake/find-modules/FindXdgUserDirs.cmake | 56 ++++ cmake/modules/LXQtAppTranslationLoader.cpp.in | 15 + cmake/modules/LXQtCompilerSettings.cmake | 150 ++++++++++ cmake/modules/LXQtCreatePkgConfigFile.cmake | 252 ++++++++++++++++ cmake/modules/LXQtCreatePortableHeaders.cmake | 110 +++++++ cmake/modules/LXQtLibTranslationLoader.cpp.in | 15 + .../LXQtPluginTranslationLoader.cpp.in | 23 ++ cmake/modules/LXQtTranslate.cmake | 32 ++ cmake/modules/LXQtTranslateDesktop.cmake | 107 +++++++ cmake/modules/LXQtTranslateTs.cmake | 281 ++++++++++++++++++ cmake/modules/LXQtTranslationLoader.cmake | 73 +++++ .../Qt5PatchedLinguistToolsMacros.cmake | 112 +++++++ cmake/modules/Qt5TranslationLoader.cmake | 47 +++ cmake/modules/Qt5TranslationLoader.cpp.in | 33 ++ debian/changelog | 4 +- lxqt-build-tools-config.cmake.in | 9 + 21 files changed, 1629 insertions(+), 2 deletions(-) create mode 100644 AUTHORS create mode 100644 BSD-3-Clause create mode 100644 CHANGELOG create mode 100644 CMakeLists.txt create mode 100644 README.md create mode 100644 cmake/find-modules/FindXdgUserDirs.cmake create mode 100644 cmake/modules/LXQtAppTranslationLoader.cpp.in create mode 100644 cmake/modules/LXQtCompilerSettings.cmake create mode 100644 cmake/modules/LXQtCreatePkgConfigFile.cmake create mode 100644 cmake/modules/LXQtCreatePortableHeaders.cmake create mode 100644 cmake/modules/LXQtLibTranslationLoader.cpp.in create mode 100644 cmake/modules/LXQtPluginTranslationLoader.cpp.in create mode 100644 cmake/modules/LXQtTranslate.cmake create mode 100644 cmake/modules/LXQtTranslateDesktop.cmake create mode 100644 cmake/modules/LXQtTranslateTs.cmake create mode 100644 cmake/modules/LXQtTranslationLoader.cmake create mode 100644 cmake/modules/Qt5PatchedLinguistToolsMacros.cmake create mode 100644 cmake/modules/Qt5TranslationLoader.cmake create mode 100644 cmake/modules/Qt5TranslationLoader.cpp.in create mode 100644 lxqt-build-tools-config.cmake.in diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..d4546b4 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,27 @@ +Upstream Authors: + LXQt team: http://lxqt.org + Razor team: http://razor-qt.org + Luís Pereira + Alexander Sokolov + Hong Jen Yee (PCMan) + Palo Kisa + Petr Vanek + Alec Moskvin + Jerome Leclanche + Paulo Lieuthier + Alf Gaida + Bartosz Taczala + Julien Lavergne + Helio Chissini de Castro + Kuzma Shapran + Veeti Paananen + Anssi Hannula + Christian Surlykke + Hong Hao + Ivailo Monev + Ludger Krämer + Thomas Viehweger + kinabcd + +License: BSD-3-Clause +The full text of the licenses can be found in the 'BSD-3-Clause' file. diff --git a/BSD-3-Clause b/BSD-3-Clause new file mode 100644 index 0000000..887371d --- /dev/null +++ b/BSD-3-Clause @@ -0,0 +1,25 @@ +License: BSD-3-Clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..b126ac1 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,185 @@ + +lxqt-build-tools-0.1.0 / 2016-10-14 +=================================== + + * Adds LXQtCreatePortableHeaders module + * Authors and license (#2) + * Add README.md + * Make lxqt-build-tools be usable + +0.0.0 / 2016-09-30 +================== + + * Remove cpack (#107) + * Bump version ot 0.11.0 (#105) + * Settings: Add "homemade" XDG_CONFIG_DIRS support + * translations: Change default translations repository + * Don't lock the screen when it's already locked. + * LXQtTranslateTs.cmake: Enable PULL_TRANSLATIONS by default + * LXQtTranslateTs.cmake: Use/update template in remote repo + * .gitignore: Cleanup + * build: Use external translations + * translations: Fix external translations logic + * translations: Add external translations support + * Adds CMAKE_INSTALL_PREFIX to the LXQt Theme search paths + * LXQtCompilerSettings: Add QT_USE_QSTRINGBUILDER to the compile definitions + * TranslateDesktopTs: Adds UPDATE_OPTIONS options + * TranslateDesktop: Remove lupdate absolute option + * TranslateDesktop: Use -a switch in grep commands + * Use CMAKE_INSTALL_FULL_DATAROOTDIR + * Add LXQT_GRAPHICS_DIR directory definition + * Adds FindXdgUserDirs CMake find_package module + * Release 0.10.0 + * pluginTranslation: removed using QStringLiteral as it was causing SEGFAULT in static finalization time + * pluginTranslation: add some symbol for referencing (for file to be not stripped out in static linking time) + * Adds "automatic" plugin translations loader support + * Rename LxQt to LXQt everywhere + * Handles CMake policy CMP0063 + * Adds an lxqt_enable_target_exceptions() CMake function + * Adds LXQtCompilerSettings CMake module + * LXQtCreatePkgConfigFile.cmake: Makes install COMPONENT configurable + * LXQtTranslateTs.cmake Adds install COMPONENT option + * Adds Runtime install COMPONENT + * Fixes an SuperBuild/NormalBuild FTBFS + * CMake: Use CMAKE_AUTOUIC, drop qt5_wrap() + * CMake: Quote variables + * CMake: Removes unused variables + * Removes LIB_INSTALL_DIR CACHE PATH variable + * Use relative paths in install DESTINATION + * Marks link libraries as PUBLIC + * Use target_compile_definitions() instead of add_definitions() + * Make Release the default build type + * Simplifies build type matching + * lxqt-config.cmake.in: Use find_dependency() + * Updates the build system to the Targets infrastructure + * Sort .desktop translations. Fix typos in the comments. Remove local dir artifact. + * pkg-config: Adds Qt5Xdg to the required dependencies + * Updates lxqt_create_pkgconfig_file() + * Stops using Qt5Xdg dropped stuff + * Adds LXQT_DATA_DIR configuration variable + * Moves the about dialog to lxqt-about + * debug: showing qDebug()/qWarning() only in "debug" build + * debug: strip debug messages in "release" build + * Remove AddPluginDialog as it is no longer used + * Add KDevelop4 project type to .gitignore + * require c++11 support + * Release 0.9.0 + * - Remove KF5 from prefix. This will fix compilation when KDE framework headers are not in standard paths. + * i18n/i10n: Updates documentation and behavior + * remove lxqtleave from liblxqt + * lxqt_translate_desktop: pass -h instead of --no-filename to grep which is compatible with Busybox + * add executable to handle leave actions + * lxqt_translate_desktop: Updates code to cope with the cmake-policy CMP0054 + * - Use simple approach to data dir. Current setup of code not allows both qt4 and qt5 cohexists, and data files are same for both libraries. If a different data dir is required for specifics reason, is possible to set in cmake run -DLXQT_LIBRARY_NAME:STRING="string" + * Adds the LxQt::SingleApplication class. + * CMakeLists.txt maintenaince + * Fixes yet another translations install dir mistake + * Fixes translations install dir + * Use the new LXQtTranslate modules. + * Fixes Qt5LinguistToolsMacros file extension bug + * Copied Qt5LinguistToolsMacros.cmake + * Removes cmake commented code + * Removes duplicates add_definitions() + * Removes lxqt_translate_desktop() from the _use.cnake + * Adds Qt5TranslationLoader cmake module + * Fix HtmlDelegate and move it to its own file. Also get rid of X11 on CMakeLists.txt. + * Delete XfitMan class. Fixes lxde/lxde-qt#226 + * Don't update (extract) translations by default. + * Includes all LXQt translation modules + * Adds automatic translations loaders for LXQt libs and apps + * Adds LXQtTranslateDesktop module + * Adds the LXQtranslateTs cmake module + * Clean up CMakeLists.txt and drop Qt 4 support + * Release v0.8.0 + * Updates translations installation and search paths + * Generate source.ts when updating translations + * Don't translate uic generated files + * Add -locations absolute option to lupdate so our *.ts files can contain informations about the source lines. + * Add code to update the *.ts files when the UPDATE_TRANSLATIONS option is turned on. + * remove magic from cmake. USE_QT5 should be the only trigger + * Use the "new" CMake FIND_PACKAGE case policy + * Add include(${QTXDG_USE_FILE}) to Qt5 also. + * Use the "new" CMake FIND_PACKAGE case policy + * Adds missing libqtxdg dependency + * Don't allow #include + * Updates the Qt4 and Qt5 library names and related stuff + * Use the same header namespace everywhere + * Don't use undefined variables + * Find liblxqt dependencies automatically + * Removes another duplicated installation of a file + * Removes duplicate installation of a file + * Fixes extra misleading slashes in path names + * Cleans commented unneeded stuff + * Fix a typo in variable name + * Fix broken build of qt4 version + * Use newer version of cmake 2.8.9 + * Detect the path of qmake correctly for Qt5. + * Fix after merging from master, by removing dupplicated items + * Merge branch 'master' of https://github.com/lxde/liblxqt into qt5 + * Update qt5 porting + * Install pkgconfig file to /usr/local/libdata/pkgconfig when FreeBSD is detected. + * Set link directories properly + * Release 0.7.0 + * Release 0.6.99 (0.7.0pre alpha) + * Add CPack rules for creating tarball + * Don't append library suffix to library path and use it by default + * CMakeLists.txt: Adds quotes to the lib string + * Respect standard LIB_INSTALL_DIR + * Reformats CMakeLists.txt to fit in an 80x24 terminal + * Removes blank lines + * Use cmake export functionality. + * Retain old CMAKE_CXX_FLAGS while adding visibility stuff. Add -Wl,-no-undefined -Wall flags to ensure correctness. + * Use gcc visibility feature to decrease number of exported symbols to half. + * Qt5 support (step 1) + * Fix renaming bugs, replacing lxqt-qt with lxde-qt + * Finish the crazy razor=>lxqt renaming tasks. + * Intree build + * Rename razor to lxqt and fix XdgDir header inclusion. + * Fix namespace for LxQt::xFitMan() to avoid undefined reference when linking with liblxqt. + * The Translatator class added, all translations moved to /usr//share/lxde/transalations + * Descriptions for translators + * Simplify translations script + * Simplify translations script + * All public files has lxqt prefix + * Razorsettings => LxQt::Settings + * RazorPluginInfo => LxQt::PluginInfo + * RazorNotification => LxQt::Notification + * RazorGridLayout => LxQt::GridLayout + * RazorAutostartEntry => LxQt::AutostartEntry + * RazorApplication => LxQt::Application + * RazorConfigDialog=>LxQt::ConfigDialog + * RazorAboutDlg => LxQt::AboutDialog + * RazorPower => LxQt::Power + * Cmake find_package files + * Fix broken CMakeLists.txt and make the lib compile again. + * Make liblxqt (original librazorqt) compiles independently. + * Old files removed + * Rotated widget added + * libraries: Removes unneeded include(RazorLibSuffix) + * ProgramFinder: a set of functions to check if programs are installed + * Improved razorpanellayout and new razorgridlayout. + * Add autostart entry API into the library + * Added "Copy to clipboard" button to razor-about->technical information. + * Fix components missing translations + * Translators info & refactoring of the About dialog + * Fixed librazorqt.qm directory + * Translations for librazorqt + * Implement new RazorNotification class + * Remove RazorNotification classes (no license/copyright) + * fixed #277 cmake installs private class + * Remove custom settings, use razor ones + * Moving notification client library to razorqt + * Revert "Global shortcuts now based on PSI code." + * Global shortcuts now based on PSI code + * RazorApplication class implemented; all modules ported to this class + * Create a "standardized" configuration dialog + * XdgAutoStart rewriten (lgpl2+) + * menus are adopted to the new backends; old code removed; check for running razor-session to allow/disallow "logout" item + * New power engine & razor-power program + * SVK translation finalized + * implemented #70: pkg-config for libs + * razorqt: add find_package(X11) as ${X11_X11_LIB} is used + * New doxygen ifrastructure + * missing translations in CMakeLists + * XdgDesktopFile is implicitly shared + * huge refactoring of the libraries build organization diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..abb848d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,55 @@ +cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) + +project(lxqt-build-tools) + +set(LXQT_BUILD_TOOLS_MAJOR_VERSION 0) +set(LXQT_BUILD_TOOLS_MINOR_VERSION 1) +set(LXQT_BUILD_TOOLS_PATCH_VERSION 0) +set(LXQT_BUILD_TOOLS_VERSION ${LXQT_BUILD_TOOLS_MAJOR_VERSION}.${LXQT_BUILD_TOOLS_MINOR_VERSION}${LXQT_BUILD_TOOLS_PATCH_VERSION}) + +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) # Standard directories for installation + +set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/lxqt-build-tools/") +set(FIND_MODULES_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/lxqt-build-tools/find-modules/") +set(MODULES_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/lxqt-build-tools/modules/") + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/lxqt-build-tools-config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/install/lxqt-build-tools-config.cmake" + INSTALL_DESTINATION "${CMAKECONFIG_INSTALL_DIR}" + PATH_VARS + MODULES_INSTALL_DIR + FIND_MODULES_INSTALL_DIR +) + +write_basic_package_version_file( + "${CMAKE_BINARY_DIR}/lxqt-build-tools-config-version.cmake" + VERSION ${LXQT_BUILD_TOOLS_VERSION} + COMPATIBILITY AnyNewerVersion +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/install/lxqt-build-tools-config.cmake" + "${CMAKE_BINARY_DIR}/lxqt-build-tools-config-version.cmake" + DESTINATION "${CMAKECONFIG_INSTALL_DIR}" +) + +file(GLOB toInstallFindModules + "${PROJECT_SOURCE_DIR}/cmake/find-modules/*.cmake" +) + +install( + FILES ${toInstallFindModules} + DESTINATION "${FIND_MODULES_INSTALL_DIR}" +) + +file(GLOB toInstallModules + "${PROJECT_SOURCE_DIR}/cmake/modules/*.cmake" + "${PROJECT_SOURCE_DIR}/cmake/modules/*.in" +) + +install( + FILES ${toInstallModules} + DESTINATION "${MODULES_INSTALL_DIR}" +) diff --git a/README.md b/README.md new file mode 100644 index 0000000..599a54f --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# lxqt-build-tools + +## Introduction + +This repository is providing several tools needed to build LXQt itself as well as other components maintained by the LXQt project. + +These tools used to be spread over the repositories of various other components and were summarized to ease dependency management. So far many components, in particular [liblxqt](https://github.com/lxde/liblxqt), were representing a build dependency without being needed themselves but only because their repository was providing a subset of the tools which are now summarized here. So the use of this repository will reduce superfluous and bloated dependencies. + +## Installation + +### Compiling sources + +The repository's build dependencies are CMake, Qt Base / Tools / X11 Extras, [libqtxdg](https://github.com/lxde/libqtxdg) and KWindowSystem. In order to pull VCS checkouts Git is needed as well. Runtime dependencies do not exist. + +Code configuration is handled by CMake. CMake variable `CMAKE_INSTALL_PREFIX` has to be set to `/usr` on most operating systems. +To build run `make`, to install `make install` which accepts variable `DESTDIR` as usual. (Strictly speaking `make` isn't even needed right now. On the other hand it doesn't hurt so packagers may just include it in case it'll be needed one day.) + +### Binary packages + +The repository was introduced in September 2016 and binary packages are rare so far. On Arch Linux an [AUR](https://aur.archlinux.org/) package [lxqt-build-tools-git](https://aur.archlinux.org/packages/lxqt-build-tools-git/) can be used to build current checkouts of branch `master`. diff --git a/cmake/find-modules/FindXdgUserDirs.cmake b/cmake/find-modules/FindXdgUserDirs.cmake new file mode 100644 index 0000000..298c0bb --- /dev/null +++ b/cmake/find-modules/FindXdgUserDirs.cmake @@ -0,0 +1,56 @@ +#============================================================================= +# Copyright 2015 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +# FindXdgUserDirs +# +# Try to find xdg-user-dirs-update. +# +# If the xdg-user-dirs-update executable is not in your PATH, you can provide +# an alternative name or full path location with the +# `XdgUserDirsUpdate_EXECUTABLE` variable. +# +# This will define the following variables: +# +# `XdgUserDirs_FOUND` +# True if xdg-user-dirs-update is available. +# +# `XdgUserDirsUpdate_EXECUTABLE` +# The xdg-user-dirs-update executable. +# + +# Find xdg-user-dirs-update +find_program(XdgUserDirsUpdate_EXECUTABLE NAMES xdg-user-dirs-update) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(XdgUserDirs + FOUND_VAR + XdgUserDirs_FOUND + REQUIRED_VARS + XdgUserDirsUpdate_EXECUTABLE +) + +mark_as_advanced(XdgUserDirsUpdate_EXECUTABLE) diff --git a/cmake/modules/LXQtAppTranslationLoader.cpp.in b/cmake/modules/LXQtAppTranslationLoader.cpp.in new file mode 100644 index 0000000..cf2c8c2 --- /dev/null +++ b/cmake/modules/LXQtAppTranslationLoader.cpp.in @@ -0,0 +1,15 @@ +/* This file has been generated by the CMake lxqt_app_translation_loader(). + * It loads LXQt application translations. + * + * Attention: All changes will be overwritten!!! + */ + +#include +#include + +static void loadAppTranslation() +{ + LXQt::Translator::translateApplication(QStringLiteral("@catalog_name@")); +} + +Q_COREAPP_STARTUP_FUNCTION(loadAppTranslation) diff --git a/cmake/modules/LXQtCompilerSettings.cmake b/cmake/modules/LXQtCompilerSettings.cmake new file mode 100644 index 0000000..43f9485 --- /dev/null +++ b/cmake/modules/LXQtCompilerSettings.cmake @@ -0,0 +1,150 @@ +#============================================================================= +# Copyright 2015 Luís Pereira +# Copyright 2015 Palo Kisa +# Copyright 2013 Hong Jen Yee (PCMan) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +#----------------------------------------------------------------------------- +# Honor visibility properties for all target types. +# +# The ``_VISIBILITY_PRESET`` and +# ``VISIBILITY_INLINES_HIDDEN`` target properties affect visibility +# of symbols during dynamic linking. When first introduced these properties +# affected compilation of sources only in shared libraries, module libraries, +# and executables with the ``ENABLE_EXPORTS`` property set. This +# was sufficient for the basic use cases of shared libraries and executables +# with plugins. However, some sources may be compiled as part of static +# libraries or object libraries and then linked into a shared library later. +# CMake 3.3 and above prefer to honor these properties for sources compiled +# in all target types. This policy preserves compatibility for projects +# expecting the properties to work only for some target types. +# +# The ``OLD`` behavior for this policy is to ignore the visibility properties +# for static libraries, object libraries, and executables without exports. +# The ``NEW`` behavior for this policy is to honor the visibility properties +# for all target types. +# +# This policy was introduced in CMake version 3.3. CMake version +# 3.3.0 warns when the policy is not set and uses ``OLD`` behavior. Use +# the ``cmake_policy()`` command to set it to ``OLD`` or ``NEW`` +# explicitly. +#----------------------------------------------------------------------------- +if(COMMAND CMAKE_POLICY) + if (POLICY CMP0063) + cmake_policy(SET CMP0063 NEW) + endif() +endif() + +include(CheckCXXCompilerFlag) + + +#----------------------------------------------------------------------------- +# Global definitions +#----------------------------------------------------------------------------- +add_definitions( + -DQT_USE_QSTRINGBUILDER +) + + +#----------------------------------------------------------------------------- +# Detect Clang compiler +#----------------------------------------------------------------------------- +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(LXQT_COMPILER_IS_CLANGCXX 1) +endif() + + +#----------------------------------------------------------------------------- +# Set visibility to hidden to hide symbols, unless they're exported manually +# in the code +#----------------------------------------------------------------------------- +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) + + +#----------------------------------------------------------------------------- +# Disable exceptions +#----------------------------------------------------------------------------- +if (CMAKE_COMPILER_IS_GNUCXX OR LXQT_COMPILER_IS_CLANGCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") +endif() + + +#----------------------------------------------------------------------------- +# Common warning flags +#----------------------------------------------------------------------------- +set(__LXQT_COMMON_WARNING_FLAGS "-Wall") + + +#----------------------------------------------------------------------------- +# Warning flags +#----------------------------------------------------------------------------- +if (CMAKE_COMPILER_IS_GNUCXX OR LXQT_COMPILER_IS_CLANGCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${__LXQT_COMMON_WARNING_FLAGS}") +endif() + + +#----------------------------------------------------------------------------- +# Linker flags +# Do not allow undefined symbols +#----------------------------------------------------------------------------- +if (CMAKE_COMPILER_IS_GNUCXX OR LXQT_COMPILER_IS_CLANGCXX) + set(CMAKE_SHARED_LINKER_FLAGS + "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}" + ) + set(CMAKE_MODULE_LINKER_FLAGS + "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}" + ) +endif() + + +#----------------------------------------------------------------------------- +# CXX11 and CXX0X requirements +#----------------------------------------------------------------------------- +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(FATAL "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. C++11 support is required") +endif() + + +#----------------------------------------------------------------------------- +# Enable exceptions for an target +# +# lxqt_enable_target_exceptions( +# +# ) +# +#----------------------------------------------------------------------------- +function(lxqt_enable_target_exceptions target mode) + target_compile_options(${target} ${mode} + "$<$,$>:-fexceptions>" + ) +endfunction() diff --git a/cmake/modules/LXQtCreatePkgConfigFile.cmake b/cmake/modules/LXQtCreatePkgConfigFile.cmake new file mode 100644 index 0000000..f7993b7 --- /dev/null +++ b/cmake/modules/LXQtCreatePkgConfigFile.cmake @@ -0,0 +1,252 @@ +#============================================================================= +# Copyright 2015 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#=============================================================================# + +# lxqt_create_pkgconfig_file(PACKAGE_NAME +# VERSION +# [PREFIX ] +# [EXEC_PREFIX ] +# [INCLUDEDIR_PREFIX ] +# [INCLUDEDIRS ... ] +# [LIBDIR_PREFIX ] +# [DESCRIPTIVE_NAME ] +# [DESCRIPTION ] +# [URL ] +# [REQUIRES ... ] +# [REQUIRES_PRIVATE ... ] +# [LIB_INSTALLDIR ] +# [CFLAGS ] +# [PATH ] +# [INSTALL] +# [COMPONENT] component) +# +# +# PACKAGE_NAME and VERSION are mandatory. Everything else is optional + +include(CMakeParseArguments) +include(GNUInstallDirs) + +function(lxqt_create_pkgconfig_file) + set(options INSTALL) + set(oneValueArgs + PACKAGE_NAME + PREFIX + EXEC_PREFIX + INCLUDEDIR_PREFIX + LIBDIR_PREFIX + DESCRIPTIVE_NAME + DESCRIPTION + URL + VERSION + PATH + COMPONENT + ) + set(multiValueArgs + INCLUDEDIRS + REQUIRES + REQUIRES_PRIVATE + CONFLICTS + CFLAGS + LIBS + LIBS_PRIVATE + ) + + cmake_parse_arguments(USER "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (USER_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to create_pkgconfig_file(): \"${USER_UNPARSED_ARGUMENTS}\"") + endif() + + # Check for mandatory args. Abort if not set + if (NOT DEFINED USER_PACKAGE_NAME) + message(FATAL_ERROR "Required argument PACKAGE_NAME missing in generate_pkgconfig_file() call") + else() + set(_PKGCONFIG_PACKAGE_NAME "${USER_PACKAGE_NAME}") + endif() + + if (NOT DEFINED USER_VERSION) + message(FATAL_ERROR "Required argument VERSION missing in generate_pkgconfig_file() call") + else() + set(_PKGCONFIG_VERSION "${USER_VERSION}") + endif() + + + # Optional args + if (NOT DEFINED USER_PREFIX) + set(_PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") + endif() + + if (NOT DEFINED USER_EXEC_PREFIX) + set(_PKGCONFIG_EXEC_PREFIX "\${prefix}") + endif() + + if (NOT DEFINED USER_INCLUDEDIR_PREFIX) + set(_PKGCONFIG_INCLUDEDIR_PREFIX "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") + endif() + + if (NOT DEFINED USER_LIBDIR_PREFIX) + set(_PKGCONFIG_LIBDIR_PREFIX "\${prefix}/${CMAKE_INSTALL_LIBDIR}") + endif() + + if (NOT DEFINED USER_DESCRIPTIVE_NAME) + set(_PKGCONFIG_DESCRIPTIVE_NAME "") + else() + set(_PKGCONFIG_DESCRIPTIVE_NAME "${USER_DESCRIPTIVE_NAME}") + endif() + + if (DEFINED USER_INCLUDEDIRS) + set(tmp "") + foreach(dir ${USER_INCLUDEDIRS}) + if (NOT IS_ABSOLUTE "${dir}") + list(APPEND tmp "-I\${includedir}/${dir}") + endif() + endforeach() + string(REPLACE ";" " " _INCLUDEDIRS "${tmp}") + endif() + + if (DEFINED USER_REQUIRES) + string(REPLACE ";" ", " _PKGCONFIG_REQUIRES "${USER_REQUIRES}") + endif() + + if (DEFINED USER_REQUIRES_PRIVATE) + string(REPLACE ";" ", " _PKGCONFIG_REQUIRES_PRIVATE "${USER_REQUIRES_PRIVATE}") + else() + set(_PKGCONFIG_REQUIRES_PRIVATE "") + endif() + + if (NOT DEFINED USER_CFLAGS) + set(_PKGCONFIG_CFLAGS "-I\${includedir} ${_INCLUDEDIRS}") + endif() + + if (NOT DEFINED USER_LIBS) + set(_PKGCONFIG_LIBS "-L\${libdir}") + else() + set(tmp "-L\${libdir}") + set(_libs "${USER_LIBS}") + foreach(lib ${_libs}) + list(APPEND tmp "-l${lib}") + endforeach() + string(REPLACE ";" " " _PKGCONFIG_LIBS "${tmp}") + endif() + + if (NOT DEFINED USER_LIBS_PRIVATE) + set(PKGCONFIG_LIBS "-L\${libdir}") + else() + set(tmp "") + set(_libs "${USER_LIBS_PRIVATE}") + foreach(lib ${_libs}) + list(APPEND tmp "-l${lib}") + endforeach() + string(REPLACE ";" " " _PKGCONFIG_LIBS_PRIVATE "${tmp}") + endif() + + if (DEFINED USER_DESCRIPTION) + set(_PKGCONFIG_DESCRIPTION "${USER_DESCRIPTION}") + else() + set(_PKGCONFIG_DESCRIPTION "") + endif() + + if (DEFINED USER_URL) + set(_PKFCONFIG_URL "${USER_URL}") + else() + set(_PKGCONFIG_URL "") + endif() + + if (NOT DEFINED USER_PATH) + set(_PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${_PKGCONFIG_PACKAGE_NAME}.pc") + else() + if (IS_ABSOLUTE "${USER_PATH}") + set(_PKGCONFIG_FILE "${USER_PATH}/${_PKGCONFIG_PACKAGE_NAME}.pc") + else() + set(_PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${USER_PATH}/${_PKGCONFIG_PACKAGE_NAME}.pc") + endif() + endif() + + # Write the .pc file + FILE(WRITE "${_PKGCONFIG_FILE}" + "# file generated by create_pkgconfig_file()\n" + "prefix=${_PKGCONFIG_PREFIX}\n" + "exec_prefix=${_PKGCONFIG_EXEC_PREFIX}\n" + "libdir=${_PKGCONFIG_LIBDIR_PREFIX}\n" + "includedir=${_PKGCONFIG_INCLUDEDIR_PREFIX}\n" + "\n" + "Name: ${_PKGCONFIG_DESCRIPTIVE_NAME}\n" + ) + + if (NOT "${_PKGCONFIG_DESCRIPTION}" STREQUAL "") + FILE(APPEND ${_PKGCONFIG_FILE} + "Description: ${_PKGCONFIG_DESCRIPTION}\n" + ) + endif() + + if (NOT "${_PKGCONFIG_URL}" STREQUAL "") + FILE(APPEND ${_PKGCONFIG_FILE} "URL: ${_PKGCONFIG_URL}\n") + endif() + + FILE(APPEND ${_PKGCONFIG_FILE} "Version: ${_PKGCONFIG_VERSION}\n") + + if (NOT "${_PKGCONFIG_REQUIRES}" STREQUAL "") + FILE(APPEND ${_PKGCONFIG_FILE} "Requires: ${_PKGCONFIG_REQUIRES}\n") + endif() + + if (NOT "${_PKGCONFIG_REQUIRES_PRIVATE}" STREQUAL "") + FILE(APPEND ${_PKGCONFIG_FILE} + "Requires.private: ${_PKGCONFIG_REQUIRES_PRIVATE}\n" + ) + endif() + + + FILE(APPEND ${_PKGCONFIG_FILE} + "Cflags: ${_PKGCONFIG_CFLAGS}\n" + "Libs: ${_PKGCONFIG_LIBS}\n" + ) + + if (NOT "${_PKGCONFIG_LIBS_PRIVATE}" STREQUAL "") + FILE(APPEND ${_PKGCONFIG_FILE} + "Libs.private: ${_PKGCONFIG_REQUIRES_PRIVATE}\n" + ) + endif() + + if (DEFINED USER_INSTALL) + # FreeBSD loves to install files to different locations + # http://www.freebsd.org/doc/handbook/dirstructure.html + if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + set(_PKGCONFIG_INSTALL_DESTINATION "libdata/pkgconfig") + else() + set(_PKGCONFIG_INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() + + if (DEFINED USER_COMPONENT) + set(_COMPONENT "${USER_COMPONENT}") + else() + set(_COMPONENT "Devel") + endif() + + install(FILES "${_PKGCONFIG_FILE}" + DESTINATION "${_PKGCONFIG_INSTALL_DESTINATION}" + COMPONENT "${_COMPONENT}") + endif() +endfunction() diff --git a/cmake/modules/LXQtCreatePortableHeaders.cmake b/cmake/modules/LXQtCreatePortableHeaders.cmake new file mode 100644 index 0000000..26622d6 --- /dev/null +++ b/cmake/modules/LXQtCreatePortableHeaders.cmake @@ -0,0 +1,110 @@ +#============================================================================= +# Copyright 2015 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +# lxqt_create_portable_headers( +# HEADER_NAMES [ [...]] +# [OUTPUT_DIR ] +# ) +# +# Creates portable headers; e.g.: +# Creates XdgAction from xdgaction.h +# XdgAction contents: +# #include "xdgaction.h" +# +# Output: +# portable_headers File locations of the created headers +# +# Input: +# HEADER_NAMES Header CamelCaseNames. An CamelCaseName header will be created +# that includes camelcasename.h file +# +# OUTPUT_DIR Specifies where the files will be created. Defaults to +# ``${CMAKE_CURRENT_BINARY_DIR}``. If the value is an relative path, it +# will be appended to ``${CMAKE_CURRENT_BINARY_DIR}``. +# +# Use: +# set(PUBLIC_CLASSES MyClass YourClass) +# lxqt_create_portable_headers(PORTABLE_HEADERS ${PUBLIC_CLASSES}) +# PORTABLE_HEADER is an return value that contains the full name of the +# generated headers. + +function(lxqt_create_portable_headers outfiles) + set(options) + set(oneValueArgs OUTPUT_DIR PATH_PREFIX NAME_PREFIX) + set(multiValueArgs HEADER_NAMES) + + cmake_parse_arguments(USER "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (USER_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to lxqt_create_portable_headers(): \"${USER_UNPARSED_ARGUMENTS}\"") + endif() + + if (NOT DEFINED USER_HEADER_NAMES) + message(FATAL_ERROR "Required argument HEADER_NAMES missing in lxqt_create_portable_headers() call") + else() + set(_HEADER_NAMES "${USER_HEADER_NAMES}") + endif() + + if (NOT DEFINED USER_OUTPUT_DIR) + set(_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") + else() + if (IS_ABSOLUTE "${USER_OUTPUT_DIR}") + set(_OUTPUT_DIR "${USER_OUTPUT_DIR}") + else() + set(_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${USER_OUTPUT_DIR}") + endif() + endif() + + if (NOT DEFINED USER_PATH_PREFIX) + set(_PATH_PREFIX "") + else() + set(_PATH_PREFIX "${USER_PATH_PREFIX}") + endif() + + if (NOT DEFINED USER_NAME_PREFIX) + set(_NAME_PREFIX "") + else() + set(_NAME_PREFIX "${USER_NAME_PREFIX}") + endif() + + + set(class_list ${_HEADER_NAMES}) + foreach(f ${class_list}) + string(TOLOWER "${f}.h" _filename) + if ("${_PATH_PREFIX}" STREQUAL "") + file(WRITE "${_OUTPUT_DIR}/${f}" + "#include \"${_NAME_PREFIX}${_filename}\"") + else() + file(WRITE "${_OUTPUT_DIR}/${f}" + "#include \"${_PATH_PREFIX}${_NAME_PREFIX}/${_filename}\"") + endif() + + list(APPEND ${outfiles} "${_OUTPUT_DIR}/${f}") + endforeach() + + set(${outfiles} ${${outfiles}} PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/LXQtLibTranslationLoader.cpp.in b/cmake/modules/LXQtLibTranslationLoader.cpp.in new file mode 100644 index 0000000..d7a0c7b --- /dev/null +++ b/cmake/modules/LXQtLibTranslationLoader.cpp.in @@ -0,0 +1,15 @@ +/* This file has been generated by the CMake lxqt_app_translation_loader(). + * It loads LXQt libraries translations. + * + * Attention: All changes will be overwritten!!! + */ + +#include +#include + +static void loadLibTranslation() +{ + LXQt::Translator::translateLibrary(QStringLiteral("@catalog_name@")); +} + +Q_COREAPP_STARTUP_FUNCTION(loadLibTranslation) diff --git a/cmake/modules/LXQtPluginTranslationLoader.cpp.in b/cmake/modules/LXQtPluginTranslationLoader.cpp.in new file mode 100644 index 0000000..a337eac --- /dev/null +++ b/cmake/modules/LXQtPluginTranslationLoader.cpp.in @@ -0,0 +1,23 @@ +/* This file has been generated by the CMake lxqt_plugin_translation_loader(). + * It loads LXQt plugin translations. + * + * Attention: All changes will be overwritten!!! + */ + +#include +#include + +/* Dummy helper symbol for referencing. + * In case plugin is linked as static (lib*.a) unreferenced objects are stripped in linking time + * => we need to reference some symbol from this file to be not stripped as a whole. + */ +void * loadPluginTranslation_@catalog_name@_helper = nullptr; + +static void loadPluginTranslation() +{ + //XXX: we don't use the QStringLiteral here because it causes SEGFAULT in static finalization time + // (the string is stored in static QHash and it's destructor can reference already deleted static QString (generated by QStringLiteral)) + LXQt::Translator::translatePlugin("@catalog_name@", "@plugin_type@"); +} + +Q_COREAPP_STARTUP_FUNCTION(loadPluginTranslation) diff --git a/cmake/modules/LXQtTranslate.cmake b/cmake/modules/LXQtTranslate.cmake new file mode 100644 index 0000000..6a1f5af --- /dev/null +++ b/cmake/modules/LXQtTranslate.cmake @@ -0,0 +1,32 @@ +#============================================================================= +# Copyright 2014 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +# +# An convenience module that loads all the LXQt translations modules at once. + +include(LXQtTranslateTs) +include(LXQtTranslateDesktop) +include(LXQtTranslationLoader) \ No newline at end of file diff --git a/cmake/modules/LXQtTranslateDesktop.cmake b/cmake/modules/LXQtTranslateDesktop.cmake new file mode 100644 index 0000000..217400a --- /dev/null +++ b/cmake/modules/LXQtTranslateDesktop.cmake @@ -0,0 +1,107 @@ +#============================================================================= +# The lxqt_translate_desktop() function was copied from the +# LXQt LXQtTranslate.cmake +# +# Original Author: Alexander Sokolov +# +# funtion lxqt_translate_desktop(_RESULT +# SOURCES +# [TRANSLATION_DIR] translation_directory +# ) +# Output: +# _RESULT The generated .desktop (.desktop) files +# +# Input: +# +# SOURCES List of input desktop files (.destktop.in) to be translated +# (merged), relative to the CMakeList.txt. +# +# TRANSLATION_DIR Optional path to the directory with the .ts files, +# relative to the CMakeList.txt. Defaults to +# "translations". +# +#============================================================================= + +function(lxqt_translate_desktop _RESULT) + # Parse arguments *************************************** + set(oneValueArgs TRANSLATION_DIR) + set(multiValueArgs SOURCES) + + cmake_parse_arguments(_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # check for unknown arguments + set(_UNPARSED_ARGS ${_ARGS_UNPARSED_ARGUMENTS}) + if (NOT ${_UNPARSED_ARGS} STREQUAL "") + MESSAGE(FATAL_ERROR + "Unknown arguments '${_UNPARSED_ARGS}'.\n" + "See lxqt_translate_desktop() documentation for more information.\n" + ) + endif() + + if (NOT DEFINED _ARGS_SOURCES) + set(${_RESULT} "" PARENT_SCOPE) + return() + else() + set(_sources ${_ARGS_SOURCES}) + endif() + + if (NOT DEFINED _ARGS_TRANSLATION_DIR) + set(_translationDir "translations") + else() + set(_translationDir ${_ARGS_TRANSLATION_DIR}) + endif() + + + get_filename_component (_translationDir ${_translationDir} ABSOLUTE) + + foreach (_inFile ${_sources}) + get_filename_component(_inFile ${_inFile} ABSOLUTE) + get_filename_component(_fileName ${_inFile} NAME_WE) + #Extract the real extension ............ + get_filename_component(_fileExt ${_inFile} EXT) + string(REPLACE ".in" "" _fileExt ${_fileExt}) + #....................................... + set(_outFile "${CMAKE_CURRENT_BINARY_DIR}/${_fileName}${_fileExt}") + + file(GLOB _translations + ${_translationDir}/${_fileName}_*${_fileExt} + ) + + set(_pattern "'\\[.*]\\s*='") + if (_translations) + list(SORT _translations) + add_custom_command(OUTPUT ${_outFile} + COMMAND grep -v -a "'#TRANSLATIONS_DIR='" ${_inFile} > ${_outFile} + COMMAND grep -h -a ${_pattern} ${_translations} >> ${_outFile} + COMMENT "Generating ${_fileName}${_fileExt}" + ) + else() + add_custom_command(OUTPUT ${_outFile} + COMMAND grep -v -a "'#TRANSLATIONS_DIR='" ${_inFile} > ${_outFile} + COMMENT "Generating ${_fileName}${_fileExt}" + ) + endif() + + set(__result ${__result} ${_outFile}) + + + # TX file *********************************************** + set(_txFile "${CMAKE_BINARY_DIR}/tx/${_fileName}${_fileExt}.tx.sh") + string(REPLACE "${CMAKE_SOURCE_DIR}/" "" _tx_translationDir ${_translationDir}) + string(REPLACE "${CMAKE_SOURCE_DIR}/" "" _tx_inFile ${_inFile}) + string(REPLACE "." "" _fileType ${_fileExt}) + + file(WRITE ${_txFile} + "[ -f ${_inFile} ] || exit 0\n" + "echo '[lxde-qt.${_fileName}_${_fileType}]'\n" + "echo 'type = DESKTOP'\n" + "echo 'source_lang = en'\n" + "echo 'source_file = ${_tx_inFile}'\n" + "echo 'file_filter = ${_tx_translationDir}/${_fileName}_${_fileExt}'\n" + "echo ''\n" + ) + + endforeach() + + set(${_RESULT} ${__result} PARENT_SCOPE) +endfunction(lxqt_translate_desktop) diff --git a/cmake/modules/LXQtTranslateTs.cmake b/cmake/modules/LXQtTranslateTs.cmake new file mode 100644 index 0000000..514d9a8 --- /dev/null +++ b/cmake/modules/LXQtTranslateTs.cmake @@ -0,0 +1,281 @@ +#============================================================================= +# Copyright 2014 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +# +# funtion lxqt_translate_ts(qmFiles +# [USE_QT5 [Yes | No]] +# [UPDATE_TRANSLATIONS [Yes | No]] +# SOURCES +# [UPDATE_OPTIONS] update_options +# [TEMPLATE] translation_template +# [TRANSLATION_DIR] translation_directory +# [INSTALL_DIR] install_directory +# [COMPONENT] component +# [PULL_TRANSLATIONS [Yes | No]] +# [CLEAN_TRANSLATIONS [Yes | No]] +# [REPO_SUBDIR] repository_subdirectory +# [TRANSLATIONS_REPO] remote_translation_repo +# [TRANSLATIONS_REFSPEC] translations_remote_branch +# ) +# Output: +# qmFiles The generated compiled translations (.qm) files +# +# Input: +# USE_QT5 Optional flag to choose between Qt4 and Qt5. Defaults to Qt5 +# +# UPDATE_TRANSLATIONS Optional flag. Setting it to Yes, extracts and +# compiles the translations. Setting it No, only +# compiles them. +# +# UPDATE_OPTIONS Optional options to lupdate when UPDATE_TRANSLATIONS +# is True. +# +# TEMPLATE Optional translations files base name. Defaults to +# ${PROJECT_NAME}. An .ts extensions is added. +# +# TRANSLATION_DIR Optional path to the directory with the .ts files, +# relative to the CMakeList.txt. Defaults to +# "translations". +# +# INSTALL_DIR Optional destination of the file compiled files (qmFiles). +# If not present no installation is performed +# +# COMPONENT Optional install component. Only effective if INSTALL_DIR +# present. Defaults to "Runtime". +# +# PULL_TRANSLATIONS Optional flag. If set, the translations are pulled +# from external repository in cmake phase (not in build/make time) +# into directory "${TRANSLATION_DIR}/${REPO_SUBDIR}". +# +# CLEAN_TRANSLATIONS Optional flag. If set, the externally pulled +# translations are removed. +# +# REPO_SUBDIR Optional path in the "translations repository" to directory +# with translations. Only effective if PULL_TRANSLATIONS enabled. +# Defaults to "${TEMPLATE}". +# +# TRANSLATIONS_REPO External git repository with translations - only the ${TEMPLATE} directory +# is pulled (using the "sparse checkout"). +# Optional (defaults to "https://github.com/lxde/lxqt-l10n.git"). +# +# TRANSLATIONS_REFSPEC Optional refspec of external repository. Used in git pull. +# Defaults to "master". + +# CMake v2.8.3 needed to use the CMakeParseArguments module +cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) + +# We use our patched version to round a annoying bug. +include(Qt5PatchedLinguistToolsMacros) + +option(PULL_TRANSLATIONS "Pull translations" Yes) +option(CLEAN_TRANSLATIONS "Clean translations" No) + +function(lxqt_translate_ts qmFiles) + set(oneValueArgs + USE_QT5 + UPDATE_TRANSLATIONS + TEMPLATE + TRANSLATION_DIR + INSTALL_DIR + COMPONENT + PULL_TRANSLATIONS + CLEAN_TRANSLATIONS + REPO_SUBDIR + TRANSLATIONS_REPO + TRANSLATIONS_REFSPEC + ) + set(multiValueArgs SOURCES UPDATE_OPTIONS) + cmake_parse_arguments(TR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT DEFINED TR_UPDATE_TRANSLATIONS) + set(TR_UPDATE_TRANSLATIONS "No") + endif() + + if (NOT DEFINED TR_UPDATE_OPTIONS) + set(TR_UPDATE_OPTIONS "") + endif() + + if (NOT DEFINED TR_USE_QT5) + set(TR_USE_QT5 "Yes") + endif() + + if(NOT DEFINED TR_TEMPLATE) + set(TR_TEMPLATE "${PROJECT_NAME}") + endif() + + if (NOT DEFINED TR_TRANSLATION_DIR) + set(TR_TRANSLATION_DIR "translations") + endif() + get_filename_component(TR_TRANSLATION_DIR "${TR_TRANSLATION_DIR}" ABSOLUTE) + + if (NOT DEFINED TR_CLEAN_TRANSLATIONS) + set(TR_CLEAN_TRANSLATIONS "No") + endif() + if (NOT DEFINED TR_PULL_TRANSLATIONS) + set(TR_PULL_TRANSLATIONS "No") + endif() + if (NOT DEFINED TR_REPO_SUBDIR) + set(TR_REPO_SUBDIR "${TR_TEMPLATE}") + endif() + + if (NOT DEFINED TR_TRANSLATIONS_REPO) + set(TR_TRANSLATIONS_REPO "https://github.com/lxde/lxqt-l10n.git") + endif() + + if (NOT DEFINED TR_TRANSLATIONS_REFSPEC) + set(TR_TRANSLATIONS_REFSPEC "master") + endif() + + if (TR_CLEAN_TRANSLATIONS) + message(STATUS "Cleaning translations dir '${TR_TRANSLATION_DIR}' ...") + set(DIR_TO_REMOVE "${TR_TRANSLATION_DIR}/${TR_REPO_SUBDIR}") + get_filename_component(PARENT_DIR "${DIR_TO_REMOVE}" DIRECTORY) + while (NOT "${PARENT_DIR}" STREQAL "${TR_TRANSLATION_DIR}") + set(DIR_TO_REMOVE "${PARENT_DIR}") + get_filename_component(PARENT_DIR "${DIR_TO_REMOVE}" DIRECTORY) + endwhile () + #TODO: is there a way to check successfulness of file command !?! + file(REMOVE_RECURSE "${TR_TRANSLATION_DIR}/.git" "${DIR_TO_REMOVE}") + endif () + + if (TR_PULL_TRANSLATIONS) + find_package(Git REQUIRED) + if (NOT (GIT_FOUND AND GIT_VERSION_STRING VERSION_GREATER "1.7.0")) + message(FATAL_ERROR "Git > 1.7.0 is needed For pulling translations!") + endif () + if (NOT EXISTS "${TR_TRANSLATION_DIR}/${TR_REPO_SUBDIR}") + message(STATUS "Setting git repository in the translations dir '${TR_TRANSLATION_DIR}' ...") + if (EXISTS "${TR_TRANSLATION_DIR}/.git") + execute_process(COMMAND rm -Rf .git + WORKING_DIRECTORY "${TR_TRANSLATION_DIR}" + RESULT_VARIABLE ex_result + ) + + if (NOT "${ex_result}" EQUAL 0) + message(FATAL_ERROR "Initialization(cleanup) of translations dir failed!") + endif () + endif() + + # make sure the dir exist, otherwise git init will fail + file(MAKE_DIRECTORY "${TR_TRANSLATION_DIR}") + + execute_process(COMMAND "${GIT_EXECUTABLE}" init + WORKING_DIRECTORY "${TR_TRANSLATION_DIR}" + RESULT_VARIABLE ex_result + ) + if (NOT "${ex_result}" EQUAL 0) + message(FATAL_ERROR "Initialization(init) of translations dir failed!") + endif () + + execute_process(COMMAND "${GIT_EXECUTABLE}" remote add origin "${TR_TRANSLATIONS_REPO}" + WORKING_DIRECTORY "${TR_TRANSLATION_DIR}" + RESULT_VARIABLE ex_result + ) + if (NOT "${ex_result}" EQUAL 0) + message(FATAL_ERROR "Initialization(remote) of translations dir failed!") + endif () + + execute_process(COMMAND "${GIT_EXECUTABLE}" config core.sparseCheckout true + WORKING_DIRECTORY "${TR_TRANSLATION_DIR}" + RESULT_VARIABLE ex_result + ) + if (NOT "${ex_result}" EQUAL 0) + message(FATAL_ERROR "Initialization(config) of translations dir failed!") + endif () + + file(WRITE "${TR_TRANSLATION_DIR}/.git/info/sparse-checkout" "${TR_REPO_SUBDIR}") + endif () + + message(STATUS "Pulling the translations...") + execute_process(COMMAND "${GIT_EXECUTABLE}" pull origin "${TR_TRANSLATIONS_REFSPEC}" + WORKING_DIRECTORY "${TR_TRANSLATION_DIR}" + RESULT_VARIABLE ex_result + ) + if (NOT "${ex_result}" EQUAL 0) + message(FATAL_ERROR "Pulling translations failed!") + endif () + endif () + + #project/module can use it's own translations (not from external) + if (EXISTS "${TR_TRANSLATION_DIR}/${TR_REPO_SUBDIR}/") + file(GLOB tsFiles "${TR_TRANSLATION_DIR}/${TR_REPO_SUBDIR}/*_*.ts") + set(templateFile "${TR_TRANSLATION_DIR}/${TR_REPO_SUBDIR}/${TR_TEMPLATE}.ts") + else () + file(GLOB tsFiles "${TR_TRANSLATION_DIR}/${TR_TEMPLATE}_*.ts") + set(templateFile "${TR_TRANSLATION_DIR}/${TR_TEMPLATE}.ts") + endif () + + if(TR_USE_QT5) + # Qt5 + if (TR_UPDATE_TRANSLATIONS) + qt5_patched_create_translation(QMS + ${TR_SOURCES} + ${templateFile} + OPTIONS ${TR_UPDATE_OPTIONS} + ) + qt5_patched_create_translation(QM + ${TR_SOURCES} + ${tsFiles} + OPTIONS ${TR_UPDATE_OPTIONS} + ) + else() + qt5_patched_add_translation(QM ${tsFiles}) + endif() + else() + # Qt4 + if(TR_UPDATE_TRANSLATIONS) + qt4_create_translation(QMS + ${TR_SOURCES} + ${templateFile} + OPTIONS ${TR_UPDATE_OPTIONS} + ) + qt4_create_translation(QM + ${TR_SOURCES} + ${tsFiles} + OPTIONS ${TR_UPDATE_OPTIONS} + ) + else() + qt4_add_translation(QM ${tsFiles}) + endif() + endif() + + if(TR_UPDATE_TRANSLATIONS) + add_custom_target("update_${TR_TEMPLATE}_ts" ALL DEPENDS ${QMS}) + endif() + + if(DEFINED TR_INSTALL_DIR) + if(NOT DEFINED TR_COMPONENT) + set(TR_COMPONENT "Runtime") + endif() + + install(FILES ${QM} + DESTINATION "${TR_INSTALL_DIR}" + COMPONENT "${TR_COMPONENT}" + ) + endif() + + set(${qmFiles} ${QM} PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/LXQtTranslationLoader.cmake b/cmake/modules/LXQtTranslationLoader.cmake new file mode 100644 index 0000000..b29bdaf --- /dev/null +++ b/cmake/modules/LXQtTranslationLoader.cmake @@ -0,0 +1,73 @@ +#============================================================================= +# Copyright 2014 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +# +# These functions enables "automatic" translation loading in LXQt Qt5 apps +# and libs. They generate a .cpp file that takes care of everything. The +# user doesn't have to do anything in the source code. +# +# Typical use: +# include(LXQtTranslationLoader) +# lxqt_app_translation_loader(lxqt-app_QM_LOADER ${PROJECT_NAME}) +# add_executable(${PROJECT_NAME} +# ${lxqt-app_QM_LOADER} +# ... +# ) + + +# lxqt_app_translation_loader( ) +# The generated .cpp file is added to +# Translations catalog to be loaded +function(lxqt_app_translation_loader source_files catalog_name) + configure_file( + ${LXQT_CMAKE_MODULES_DIR}/LXQtAppTranslationLoader.cpp.in + LXQtAppTranslationLoader.cpp @ONLY + ) + set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/LXQtAppTranslationLoader.cpp PARENT_SCOPE) +endfunction() + +# lxqt_lib_translation_loader( ) +# The generated .cpp file is added to +# Translations catalog to be loaded +function(lxqt_lib_translation_loader source_files catalog_name) + configure_file( + ${LXQT_CMAKE_MODULES_DIR}/LXQtLibTranslationLoader.cpp.in + LXQtLibTranslationLoader.cpp @ONLY + ) + set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/LXQtLibTranslationLoader.cpp PARENT_SCOPE) +endfunction() + +# lxqt_plugin_translation_loader( ) +# The generated .cpp file is added to +# Translations catalog to be loaded +# Plugin type. Example: lxqt-panel +function(lxqt_plugin_translation_loader source_files catalog_name plugin_type) + configure_file( + ${LXQT_CMAKE_MODULES_DIR}/LXQtPluginTranslationLoader.cpp.in + LXQtPluginTranslationLoader.cpp @ONLY + ) + set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/LXQtPluginTranslationLoader.cpp PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/Qt5PatchedLinguistToolsMacros.cmake b/cmake/modules/Qt5PatchedLinguistToolsMacros.cmake new file mode 100644 index 0000000..e5c2f5c --- /dev/null +++ b/cmake/modules/Qt5PatchedLinguistToolsMacros.cmake @@ -0,0 +1,112 @@ +#============================================================================= +# Copyright 2005-2011 Kitware, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Kitware, Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +include(CMakeParseArguments) + +function(QT5_PATCHED_CREATE_TRANSLATION _qm_files) + set(options) + set(oneValueArgs) + set(multiValueArgs OPTIONS) + + cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS}) + set(_lupdate_options ${_LUPDATE_OPTIONS}) + + set(_my_sources) + set(_my_tsfiles) + foreach(_file ${_lupdate_files}) + get_filename_component(_ext ${_file} EXT) + get_filename_component(_abs_FILE ${_file} ABSOLUTE) + if(_ext MATCHES "ts") + list(APPEND _my_tsfiles ${_abs_FILE}) + else() + list(APPEND _my_sources ${_abs_FILE}) + endif() + endforeach() + foreach(_ts_file ${_my_tsfiles}) + if(_my_sources) + # make a list file to call lupdate on, so we don't make our commands too + # long for some systems +# get_filename_component(_ts_name ${_ts_file} NAME_WE) + + get_filename_component(_name ${_ts_file} NAME) + string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _ts_name ${_name}) + + set(_ts_lst_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lst_file") + set(_lst_file_srcs) + foreach(_lst_file_src ${_my_sources}) + set(_lst_file_srcs "${_lst_file_src}\n${_lst_file_srcs}") + endforeach() + + get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES) + foreach(_pro_include ${_inc_DIRS}) + get_filename_component(_abs_include "${_pro_include}" ABSOLUTE) + set(_lst_file_srcs "-I${_pro_include}\n${_lst_file_srcs}") + endforeach() + + file(WRITE ${_ts_lst_file} "${_lst_file_srcs}") + endif() + add_custom_command(OUTPUT ${_ts_file} + COMMAND ${Qt5_LUPDATE_EXECUTABLE} + ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file} + DEPENDS ${_my_sources} ${_ts_lst_file} VERBATIM) + endforeach() + qt5_patched_add_translation(${_qm_files} ${_my_tsfiles}) + set(${_qm_files} ${${_qm_files}} PARENT_SCOPE) +endfunction() + + +function(QT5_PATCHED_ADD_TRANSLATION _qm_files) + foreach(_current_FILE ${ARGN}) + get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE) +# get_filename_component(qm ${_abs_FILE} NAME_WE) + + get_filename_component(_name ${_abs_FILE} NAME) + string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" qm ${_name}) + + get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION) + if(output_location) + file(MAKE_DIRECTORY "${output_location}") + set(qm "${output_location}/${qm}.qm") + else() + set(qm "${CMAKE_CURRENT_BINARY_DIR}/${qm}.qm") + endif() + + add_custom_command(OUTPUT ${qm} + COMMAND ${Qt5_LRELEASE_EXECUTABLE} + ARGS ${_abs_FILE} -qm ${qm} + DEPENDS ${_abs_FILE} VERBATIM + ) + list(APPEND ${_qm_files} ${qm}) + endforeach() + set(${_qm_files} ${${_qm_files}} PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/Qt5TranslationLoader.cmake b/cmake/modules/Qt5TranslationLoader.cmake new file mode 100644 index 0000000..4278e78 --- /dev/null +++ b/cmake/modules/Qt5TranslationLoader.cmake @@ -0,0 +1,47 @@ +#============================================================================= +# Copyright 2014 Luís Pereira +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +# +# These functions enables "automatic" translation loading in Qt5 apps +# and libs. They generate a .cpp file that takes care of everything. The +# user doesn't have to do anything in the source code. +# +# qt5_translation_loader( ) +# +# Output: +# Appends the generated file to this variable. +# +# Input: +# Full path name to the translations dir. +# Translation catalog to be loaded. + +function(qt5_translation_loader source_files translations_dir catalog_name) + configure_file( + ${LXQT_CMAKE_MODULES_DIR}/Qt5TranslationLoader.cpp.in + Qt5TranslationLoader.cpp @ONLY + ) + set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/Qt5TranslationLoader.cpp PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/Qt5TranslationLoader.cpp.in b/cmake/modules/Qt5TranslationLoader.cpp.in new file mode 100644 index 0000000..ffdfcb4 --- /dev/null +++ b/cmake/modules/Qt5TranslationLoader.cpp.in @@ -0,0 +1,33 @@ +/* This file has been generated by the CMake qt_translation_loader(). + * It loads Qt application translations. + * + * Attention: All changes will be overwritten!!! + */ + +#include +#include +#include +#include + +static void loadQtTranslation() +{ + QString locale = QLocale::system().name(); + QTranslator *qtTranslator = new QTranslator(qApp); + + if (qtTranslator->load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { + qApp->installTranslator(qtTranslator); + } else { + delete qtTranslator; + } + + QTranslator *appTranslator = new QTranslator(qApp); + if (appTranslator->load(QString("@translations_dir@/@catalog_name@_%1.qm").arg(locale))) { + QCoreApplication::installTranslator(appTranslator); + } else if (locale == QLatin1String("C") || + locale.startsWith(QLatin1String("en"))) { + // English is the default. It's translated anyway. + delete appTranslator; + } +} + +Q_COREAPP_STARTUP_FUNCTION(loadQtTranslation) diff --git a/debian/changelog b/debian/changelog index 6c60f09..34f780e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ lxqt-build-tools (0.1.0-1) unstable; urgency=medium - * Initial release (Closes: #) + * Initial release (Closes: #839943) - -- Alf Gaida Thu, 06 Oct 2016 23:21:53 +0200 + -- Alf Gaida Fri, 14 Oct 2016 23:05:03 +0200 diff --git a/lxqt-build-tools-config.cmake.in b/lxqt-build-tools-config.cmake.in new file mode 100644 index 0000000..848c497 --- /dev/null +++ b/lxqt-build-tools-config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +set(LXQT_CMAKE_MODULES_DIR "@PACKAGE_MODULES_INSTALL_DIR@") +set(LXQT_CMAKE_FIND_MODULES_DIR "@PACKAGE_FIND_MODULES_INSTALL_DIR@") + +list(APPEND CMAKE_MODULE_PATH + "${LXQT_CMAKE_MODULES_DIR}" + "${LXQT_CMAKE_FIND_MODULES_DIR}" +)