/usr/lib/x86_64-linux-gnu/cmake/KF5CoreAddons/KF5CoreAddonsMacros.cmake is in libkf5coreaddons-dev 5.28.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #
# kcoreaddons_desktop_to_json(target desktopfile
# DEFAULT_SERVICE_TYPE | SERVICE_TYPES <file> [<file> [...]]
# [OUTPUT_DIR dir] [COMPAT_MODE])
#
# This macro uses desktoptojson to generate a json file from a plugin
# description in a .desktop file. The generated file can be compiled
# into the plugin using the K_PLUGIN_FACTORY_WITH_JSON (cpp) macro.
#
# All files in SERVICE_TYPES will be parsed by desktoptojson to ensure that the generated
# json uses the right data type (string, string list, int, double or bool) for all of the
# properties. If your application does not have any custom properties defined you should pass
# DEFAULT_SERVICE_TYPE instead. It is an error if neither of these arguments is given.
# This is done in order to ensure that all applications explicitly choose the right service
# type and don't have runtime errors because of the data being wrong (QJsonValue does not
# perform any type conversions).
#
# If COMPAT_MODE is passed as an argument the generated JSON file will be compatible with
# the metadata format used by KPluginInfo (from KService), otherwise it will default to
# the new format that is used by KPluginMetaData (from KCoreAddons).
#
# If OUTPUT_DIR is set the generated file will be created inside <dir> instead of in
# ${CMAKE_CURRENT_BINARY_DIR}
#
# Example:
#
# kcoreaddons_desktop_to_json(plasma_engine_time plasma-dataengine-time.desktop
# SERVICE_TYPES plasma-dataengine.desktop)
function(kcoreaddons_desktop_to_json target desktop)
get_filename_component(desktop_basename ${desktop} NAME_WE) # allow passing an absolute path to the .desktop
cmake_parse_arguments(DESKTOP_TO_JSON "COMPAT_MODE;DEFAULT_SERVICE_TYPE" "OUTPUT_DIR" "SERVICE_TYPES" ${ARGN})
if(DESKTOP_TO_JSON_OUTPUT_DIR)
set(json "${DESKTOP_TO_JSON_OUTPUT_DIR}/${desktop_basename}.json")
else()
set(json "${CMAKE_CURRENT_BINARY_DIR}/${desktop_basename}.json")
endif()
if(CMAKE_VERSION VERSION_LESS 2.8.12.20140127 OR "${target}" STREQUAL "")
_desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
return()
elseif(MSVC_IDE AND CMAKE_VERSION VERSION_LESS 3.0)
# autogen dependencies for visual studio generator are broken until cmake commit 2ed0d06
_desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
return()
endif()
set(command KF5::desktoptojson -i ${desktop} -o ${json})
if(DESKTOP_TO_JSON_COMPAT_MODE)
list(APPEND command -c)
endif()
if(DESKTOP_TO_JSON_SERVICE_TYPES)
foreach(type ${DESKTOP_TO_JSON_SERVICE_TYPES})
if (EXISTS ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
set(type ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
endif()
list(APPEND command -s ${type})
endforeach()
elseif(NOT DESKTOP_TO_JSON_DEFAULT_SERVICE_TYPE)
message(DEPRECATION "Calling kcoreaddons_desktop_to_json() without DEFAULT_SERVICE_TYPE or SERVICE_TYPES is deprecated!")
endif()
add_custom_command(
OUTPUT ${json}
COMMAND ${command}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${desktop}
)
set_property(TARGET ${target} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
endfunction()
function(_desktop_to_json_cmake28 desktop json compat)
# This function runs desktoptojson at *configure* time, ie, when CMake runs.
# This is necessary with CMake < 3.0.0 because the .json file must be
# generated before moc is run, and there was no way until CMake 3.0.0 to
# define a target as a dependency of the automoc target.
message("Using CMake 2.8 way to call desktoptojson")
get_target_property(DESKTOPTOJSON_LOCATION KF5::desktoptojson LOCATION)
if(compat)
execute_process(
COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json} -c
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
else()
execute_process(
COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json}
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
if (NOT result EQUAL 0)
message(FATAL_ERROR "Generating ${json} failed")
endif()
endfunction()
#
# kcoreaddons_add_plugin(plugin_name SOURCES... [JSON "pluginname.json"] [INSTALL_NAMESPACE "servicename"])
#
# This macro helps simplifying the creation of plugins for KPluginFactory
# based systems.
# It will create a plugin given the SOURCES list, the name of the JSON file
# that will define the plugin's metadata and the INSTALL_NAMESPACE so that
# the plugin is installed with the rest of the plugins from the same sub-system,
# within ${PLUGIN_INSTALL_DIR}.
#
# Example:
# kcoreaddons_add_plugin(kdeconnect_share JSON kdeconnect_share.json SOURCES ${kdeconnect_share_SRCS})
#
# Since 5.10.0
function(kcoreaddons_add_plugin plugin)
set(options)
set(oneValueArgs JSON INSTALL_NAMESPACE)
set(multiValueArgs SOURCES)
cmake_parse_arguments(KCA_ADD_PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT KCA_ADD_PLUGIN_SOURCES)
message(FATAL_ERROR "kcoreaddons_add_plugin called without SOURCES parameter")
endif()
get_filename_component(json "${KCA_ADD_PLUGIN_JSON}" REALPATH)
# ensure we recompile the corresponding object files when the json file changes
set(dependent_sources )
foreach(source ${KCA_ADD_PLUGIN_SOURCES})
get_filename_component(source "${source}" REALPATH)
if(EXISTS "${source}")
file(STRINGS "${source}" match REGEX "K_PLUGIN_FACTORY_WITH_JSON")
if(match)
list(APPEND dependent_sources "${source}")
endif()
endif()
endforeach()
if(NOT dependent_sources)
# fallback to all sources - better safe than sorry...
set(dependent_sources ${KCA_ADD_PLUGIN_SOURCES})
endif()
set_property(SOURCE ${dependent_sources} APPEND PROPERTY OBJECT_DEPENDS ${json})
add_library(${plugin} MODULE ${KCA_ADD_PLUGIN_SOURCES})
set_property(TARGET ${plugin} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
if (NOT KCA_ADD_PLUGIN_INSTALL_NAMESPACE)
message(FATAL_ERROR "Must specify INSTALL_NAMESPACE for ${plugin}")
endif()
install(TARGETS ${plugin} DESTINATION ${PLUGIN_INSTALL_DIR}/${KCA_ADD_PLUGIN_INSTALL_NAMESPACE})
endfunction()
|