Triggering rebuild after changing a *.json file
Milian Wolff
mail at milianw.de
Sun Nov 23 03:36:30 GMT 2014
Hey all,
in my quest for better *.json support in KF5 based applications, I noticed
that we currently do not rebuild properly on changes to the *.desktop or
*.json files.
For KDevelop, I'm thus playing around with something like this currently:
~~~~~~~~~~~~~~~+
function(kdevplatform_add_plugin plugin)
set(options )
set(oneValueArgs JSON)
set(multiValueArgs SOURCES)
cmake_parse_arguments(KDEV_ADD_PLUGIN "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
string(REGEX REPLACE "\\.cmake$" "" json_out ${KDEV_ADD_PLUGIN_JSON})
configure_file(${KDEV_ADD_PLUGIN_JSON}
${CMAKE_CURRENT_BINARY_DIR}/${json_out})
# ensure we recompile the corresponding object files when the json file
changes
set(dependent_sources )
foreach(header ${KDEV_ADD_PLUGIN_SOURCES})
file(STRINGS "${header}" match REGEX "K_PLUGIN_FACTORY_WITH_JSON")
if(match)
list(APPEND dependent_sources "${header}")
endif()
endforeach()
if(NOT dependent_sources)
# fallback to all sources - better safe than sorry...
set(dependent_sources ${KDEV_ADD_PLUGIN_SOURCES})
endif()
set_property(SOURCE ${dependent_sources} APPEND PROPERTY OBJECT_DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/${json_out})
add_library(${plugin} MODULE ${KDEV_ADD_PLUGIN_SOURCES})
set_property(TARGET ${plugin} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/${json_out})
endfunction()
~~~~~~~~~~~~~~~+
To be used like this:
kdevplatform_add_plugin(kdevgit JSON kdevgit.json.cmake SOURCES
${kdevgit_PART_SRCS})
This does trigger a rebuild, but the strings are still not updated properly.
I'm quite confused actually, does anyone know where the code comes from that
is embedded into the *.o that uses Q_PLUGIN_METADATA? I suspect CMake AUTOGEN?
But where does that put its generated binary JSON representation? How can I
make sure that it gets updated properly when the source file changes?
To reproduce this, you can just change any *.desktop file that is piped
through desktop_to_json. The change will be picked up by CMake and a
reconfigure is triggered, which is pretty slow as well. But nothing is
rebuilt. With the macro above, I trigger the build but still, the *.o file
that uses K_PLUGIN_FACTORY_WITH_JSON is still containing the "old" strings...
I'm at loss - can someone help me please?
Thanks
--
Milian Wolff
mail at milianw.de
http://milianw.de
More information about the kde-core-devel
mailing list