generate_dbus.cmake 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # This file is part of Desktop App Toolkit,
  2. # a set of libraries for developing nice desktop applications.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/desktop-app/legal/blob/master/LEGAL
  6. include(${cmake_helpers_loc}/external/glib/generate_gir.cmake)
  7. include(${cmake_helpers_loc}/external/glib/generate_cppgir.cmake)
  8. function(generate_dbus target_name interface_prefix namespace interface_file)
  9. find_program(DESKTOP_APP_GDBUSCODEGEN gdbus-codegen REQUIRED)
  10. set(gen_loc ${CMAKE_CURRENT_BINARY_DIR}/gen)
  11. set(gen_dst ${gen_loc}/dbus)
  12. file(MAKE_DIRECTORY ${gen_dst})
  13. set(gen_timestamp ${gen_dst}/${target_name}_${namespace}_dbus.timestamp)
  14. set(gen_files
  15. ${gen_dst}/${target_name}_${namespace}_dbus.c
  16. ${gen_dst}/${target_name}_${namespace}_dbus.h
  17. )
  18. add_custom_command(
  19. OUTPUT
  20. ${gen_timestamp}
  21. BYPRODUCTS
  22. ${gen_files}
  23. COMMAND
  24. ${DESKTOP_APP_GDBUSCODEGEN}
  25. --interface-prefix
  26. ${interface_prefix}
  27. --generate-c-code
  28. ${gen_dst}/${target_name}_${namespace}_dbus
  29. --c-namespace
  30. ${namespace}
  31. --c-generate-object-manager
  32. ${interface_file}
  33. COMMAND
  34. echo 1> ${gen_timestamp}
  35. COMMENT "Generating D-Bus C code for ${namespace} (${target_name})"
  36. DEPENDS
  37. ${DESKTOP_APP_GDBUSCODEGEN}
  38. ${interface_file}
  39. )
  40. add_library(${target_name}_${namespace}_dbus STATIC)
  41. init_target(${target_name}_${namespace}_dbus "(gen)")
  42. target_link_libraries(${target_name}_${namespace}_dbus PUBLIC desktop-app::external_glib)
  43. generate_target(${target_name}_${namespace}_dbus timestamp ${gen_timestamp} "${gen_files}" ${gen_loc})
  44. add_library(${target_name}_${namespace} INTERFACE)
  45. init_target_folder(${target_name}_${namespace} "(gen)")
  46. target_link_libraries(${target_name}_${namespace} INTERFACE ${target_name}_${namespace}_dbus)
  47. generate_gir(${target_name}_${namespace} ${namespace} Gio-2.0 ${target_name}_${namespace}_dbus)
  48. generate_cppgir(${target_name}_${namespace} ${CMAKE_CURRENT_BINARY_DIR}/gen/${target_name}_${namespace}.gir)
  49. add_dependencies(${target_name}_${namespace}_cppgir ${target_name}_${namespace}_gir)
  50. get_target_property(target_type ${target_name} TYPE)
  51. if (${target_type} STREQUAL "INTERFACE_LIBRARY")
  52. target_link_libraries(${target_name} INTERFACE ${target_name}_${namespace})
  53. else()
  54. target_link_libraries(${target_name} PUBLIC ${target_name}_${namespace})
  55. endif()
  56. endfunction()