diff --git a/autotests/setupdatadirs.h b/autotests/setupdatadirs.h index 6bc2a23..3909c2a 100644 --- a/autotests/setupdatadirs.h +++ b/autotests/setupdatadirs.h @@ -1,37 +1,41 @@ /* This file is part of KDE Frameworks Copyright 2018 David Faure This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License or ( at your option ) version 3 or, at the discretion of KDE e.V. ( which shall act as a proxy as in section 14 of the GPLv3 ), any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SETUP_DATA_DIRS_H #define SETUP_DATA_DIRS_H #include #include #include #include static void setupDataDirs() { const QByteArray defaultDataDirs = qEnvironmentVariableIsSet("XDG_DATA_DIRS") ? qgetenv("XDG_DATA_DIRS") : QByteArray("/usr/local/share:/usr/share"); const QByteArray modifiedDataDirs = QFile::encodeName(QCoreApplication::applicationDirPath()) + "/data:" + defaultDataDirs; qputenv("XDG_DATA_DIRS", modifiedDataDirs); + + const QByteArray defaultConfigDirs = qEnvironmentVariableIsSet("XDG_CONFIG_DIRS") ? qgetenv("XDG_CONFIG_DIRS") : QByteArray("/etc/xdg"); + const QByteArray modifiedConfigDirs = QFile::encodeName(QCoreApplication::applicationDirPath()) + "/data:" + defaultConfigDirs; + qputenv("XDG_CONFIG_DIRS", modifiedConfigDirs); } #endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fc4a68c..18f02d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,200 +1,209 @@ include(CheckSymbolExists) include(CheckFunctionExists) check_function_exists(mmap HAVE_MMAP) check_symbol_exists(posix_madvise "sys/mman.h" HAVE_MADVISE) configure_file(config-ksycoca.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-ksycoca.h ) set(kservice_SRCS kdeinit/ktoolinvocation.cpp services/kautostart.cpp services/kmimetypefactory.cpp services/kmimetypetrader.cpp services/kservice.cpp services/kserviceaction.cpp services/kservicefactory.cpp services/kservicegroup.cpp services/kservicegroupfactory.cpp services/kserviceoffer.cpp services/kservicetype.cpp services/kservicetypefactory.cpp services/kservicetypeprofile.cpp services/kservicetypetrader.cpp services/ktraderparse.cpp services/ktraderparsetree.cpp services/kplugininfo.cpp sycoca/ksycoca.cpp sycoca/ksycocadevices.cpp sycoca/ksycocadict.cpp sycoca/ksycocaentry.cpp sycoca/ksycocafactory.cpp sycoca/kmemfile.cpp sycoca/kbuildmimetypefactory.cpp sycoca/kbuildservicetypefactory.cpp sycoca/kbuildservicefactory.cpp sycoca/kbuildservicegroupfactory.cpp sycoca/kbuildsycoca.cpp sycoca/kctimefactory.cpp sycoca/kmimeassociations.cpp sycoca/vfolder_menu.cpp plugin/kplugintrader.cpp plugin/kdbusservicestarter.cpp ) ecm_qt_declare_logging_category(kservice_SRCS HEADER servicesdebug.h IDENTIFIER SERVICES CATEGORY_NAME kf5.kservice.services) ecm_qt_declare_logging_category(kservice_SRCS HEADER sycocadebug.h IDENTIFIER SYCOCA CATEGORY_NAME kf5.kservice.sycoca) if (WIN32) LIST(APPEND kservice_SRCS kdeinit/ktoolinvocation_win.cpp ) endif() if (UNIX) LIST(APPEND kservice_SRCS kdeinit/ktoolinvocation_x11.cpp ) endif() bison_target(TraderParser services/yacc.y ${CMAKE_CURRENT_BINARY_DIR}/yacc.c COMPILE_FLAGS "-p kiotrader -d" ) flex_target(TraderLexer services/lex.l ${CMAKE_CURRENT_BINARY_DIR}/lex.c COMPILE_FLAGS "-Pkiotrader -B -i" ) add_flex_bison_dependency(TraderLexer TraderParser) list(APPEND kservice_SRCS ${BISON_TraderParser_OUTPUTS} ${FLEX_TraderLexer_OUTPUTS}) set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/yacc.h PROPERTY SKIP_AUTOMOC TRUE) # don't run automoc on this file # kservice cannot depend on kinit (because kinit->kio->kservice), so we need a copy of org.kde.KLauncher.xml here. # And I don't want to have it here as a source file (who wants to edit dbus xml by hand), so it can be # generated from klauncher's implementation header. qt5_add_dbus_interface(kservice_SRCS kdeinit/org.kde.KLauncher.xml klauncher_iface) add_library(KF5Service ${kservice_SRCS}) if(WIN32) #unistd.h does not exist on windows target_compile_definitions(KF5Service PRIVATE YY_NO_UNISTD_H=1) endif() generate_export_header(KF5Service BASE_NAME KService) add_library(KF5::Service ALIAS KF5Service) set(kservice_includes ${CMAKE_CURRENT_BINARY_DIR}/.. # Since we publicly include kservice_version.h ${CMAKE_CURRENT_SOURCE_DIR}/services ${CMAKE_CURRENT_SOURCE_DIR}/sycoca ${CMAKE_CURRENT_SOURCE_DIR}/plugin ${CMAKE_CURRENT_SOURCE_DIR}/kdeinit ) target_include_directories(KF5Service PUBLIC "$") target_include_directories(KF5Service INTERFACE "$") target_link_libraries(KF5Service PUBLIC KF5::ConfigCore # KConfig and friends KF5::CoreAddons # KShell KPluginLoader PRIVATE KF5::I18n KF5::DBusAddons # KDEInitInterface Qt5::Xml # (for vfolder menu) QDomDocument ) set_target_properties(KF5Service PROPERTIES VERSION ${KSERVICE_VERSION_STRING} SOVERSION ${KSERVICE_SOVERSION} EXPORT_NAME Service ) ecm_generate_headers(KService_HEADERS HEADER_NAMES KPluginTrader KDBusServiceStarter RELATIVE plugin REQUIRED_HEADERS KService_HEADERS ) ecm_generate_headers(KService_HEADERS HEADER_NAMES KSycoca KSycocaEntry KSycocaType RELATIVE sycoca REQUIRED_HEADERS KService_HEADERS ) ecm_generate_headers(KService_HEADERS HEADER_NAMES KToolInvocation RELATIVE kdeinit REQUIRED_HEADERS KService_HEADERS ) ecm_generate_headers(KService_HEADERS HEADER_NAMES KAutostart KMimeTypeTrader KService KServiceAction KServiceGroup KServiceType KServiceTypeProfile KServiceTypeTrader KPluginInfo RELATIVE services REQUIRED_HEADERS KService_HEADERS ) install(FILES services/kplugininfo.desktop services/application.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR} ) # Local copy for the unittests add_custom_target(copy_servicetypes) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/data/kservicetypes5) add_custom_command(TARGET copy_servicetypes PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/services/kplugininfo.desktop ${CMAKE_CURRENT_SOURCE_DIR}/services/application.desktop ${CMAKE_BINARY_DIR}/bin/data/kservicetypes5) # not using KDE_INSTALL_KSERVICETYPES5DIR because QStandardPaths wants "data" on Windows add_dependencies(KF5Service copy_servicetypes) if (WIN32) install( FILES applications.menu DESTINATION ${KDE_INSTALL_DATAROOTDIR}/xdg/menus RENAME ${APPLICATIONS_MENU_NAME} ) else () install( FILES applications.menu DESTINATION ${KDE_INSTALL_SYSCONFDIR}/xdg/menus RENAME ${APPLICATIONS_MENU_NAME} ) endif () +# Local copy for the unittests +add_custom_target(copy_menu) +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/data/menus) +add_custom_command(TARGET copy_menu PRE_BUILD COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/applications.menu + ${CMAKE_BINARY_DIR}/bin/data/menus/${APPLICATIONS_MENU_NAME}) +add_dependencies(KF5Service copy_menu) + install(TARGETS KF5Service EXPORT KF5ServiceTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kservice_export.h" ${KService_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KService COMPONENT Devel ) if(BUILD_QCH) ecm_add_qch( KF5Service_QCH NAME KService BASE_NAME KF5Service VERSION ${KF5_VERSION} ORG_DOMAIN org.kde SOURCES # using only public headers, to cover only public API ${KService_HEADERS} MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" LINK_QCHS KF5Config_QCH KF5CoreAddons_QCH BLANK_MACROS KSERVICE_EXPORT KSERVICE_DEPRECATED KSERVICE_DEPRECATED_EXPORT TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} COMPONENT Devel ) endif() add_subdirectory(kbuildsycoca) include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KService LIB_NAME KF5Service DEPS "KConfigCore" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KService) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})