Skip to content

Instantly share code, notes, and snippets.

@Jihadist
Last active March 28, 2023 11:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jihadist/3beb9f102e9c8162dca691d5d2e3ddde to your computer and use it in GitHub Desktop.
Save Jihadist/3beb9f102e9c8162dca691d5d2e3ddde to your computer and use it in GitHub Desktop.
Cmake libdbus-c++-1
# - Try to find libdbus-c++-1 include dirs and libraries
#
# Usage of this module as follows:
#
# find_package(DBusCXX)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
# DBusCXX_ROOT_DIR Set this variable to the root installation of
# libdbus-c++-1 if the module has problems finding the
# proper installation path.
#
find_path(DBusCXX_ROOT_DIR
NAMES include/dbus-c++-1/dbus-c++/dbus.h
Include/dbus-c++-1/dbus-c++/dbus.h
)
find_path(DBusCXX_ROOT_DIR
NAMES include/dbus-c++-1/dbus-c++/dbus.h
Include/dbus-c++-1/dbus-c++/dbus.h
)
find_path(DBusCXX_INCLUDE_DIR
NAMES dbus.h
HINTS ${DBusCXX_ROOT_DIR}/include/dbus-c++-1/dbus-c++
)
find_library(DBusCXX_LIBRARY
NAMES dbus-c++-1
HINTS ${DBusCXX_ROOT_DIR}/lib
)
find_library(DBusCXX_ECORE_LIBRARY
NAMES dbus-c++-ecore-1
HINTS ${DBusCXX_ROOT_DIR}/lib
)
find_library(DBusCXX_GLIB_LIBRARY
NAMES dbus-c++-glib-1
HINTS ${DBusCXX_ROOT_DIR}/lib
)
find_program (DBusCXX_XML2CPP
NAMES dbusxx-xml2cpp
HINTS ${DBusCXX_ROOT_DIR}/bin)
find_program (DBusCXX_INTROSPECT
NAMES dbusxx-introspect
HINTS ${DBusCXX_ROOT_DIR}/bin)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(DBusCXX DEFAULT_MSG
DBusCXX_LIBRARY
DBusCXX_ECORE_LIBRARY
DBusCXX_GLIB_LIBRARY
DBusCXX_INCLUDE_DIR
DBusCXX_XML2CPP
DBusCXX_INTROSPECT
)
mark_as_advanced(
DBusCXX_ROOT_DIR
DBusCXX_INCLUDE_DIR
DBusCXX_LIBRARY
DBusCXX_ECORE_LIBRARY
DBusCXX_GLIB_LIBRARY
DBusCXX_XML2CPP
DBusCXX_INTROSPECT
)
message(STATUS "DBusCXX_INCLUDE_DIR ${DBusCXX_INCLUDE_DIR}")
message(STATUS "DBusCXX_LIBRARY ${DBusCXX_LIBRARY}")
add_library(dbus-c++ SHARED IMPORTED)
add_library(dbus-c++::dbus-c++ ALIAS dbus-c++)
set_property(TARGET dbus-c++ PROPERTY
IMPORTED_LOCATION "${DBusCXX_LIBRARY}")
target_include_directories(dbus-c++ INTERFACE ${DBusCXX_INCLUDE_DIR} ${DBusCXX_INCLUDE_DIR}/..)
add_library(dbus-c++-ecore SHARED IMPORTED)
add_library(dbus-c++::dbus-c++-ecore ALIAS dbus-c++-ecore)
set_property(TARGET dbus-c++-ecore PROPERTY
IMPORTED_LOCATION "${DBusCXX_ECORE_LIBRARY}")
add_executable(dbus-c++::xml2cpp IMPORTED)
set_property(TARGET dbus-c++::xml2cpp PROPERTY IMPORTED_LOCATION ${DBusCXX_XML2CPP})
add_executable(dbus-c++::introspect IMPORTED)
set_property(TARGET dbus-c++::introspect PROPERTY IMPORTED_LOCATION ${DBusCXX_INTROSPECT})
function(dbus_generate)
include(CMakeParseArguments)
set(_singleargs XMLFILE XML_OUT_DIR)
cmake_parse_arguments(dbus_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")
if(NOT dbus_generate_XMLFILE)
message(SEND_ERROR "Error: dbus_generate called without any targets or source files")
return()
endif()
if(NOT dbus_generate_XML_OUT_DIR)
set(dbus_generate_XML_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
get_filename_component(_abs_file ${dbus_generate_XMLFILE} ABSOLUTE)
get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
message(STATUS "_abs_file ${_abs_file}")
message(STATUS "_abs_dir ${_abs_dir}")
get_filename_component(_file_full_name ${dbus_generate_XMLFILE} NAME)
string(FIND "${_file_full_name}" "." _file_last_ext_pos REVERSE)
string(SUBSTRING "${_file_full_name}" 0 ${_file_last_ext_pos} _basename)
message(STATUS "_file_full_name ${_file_full_name}")
message(STATUS "_basename ${_basename}")
set(_comment "Running xml2cpp compiler on ${_file_full_name}")
list(APPEND _generated_hdrs "${dbus_generate_XML_OUT_DIR}/${_basename}-proxy.h")
list(APPEND _generated_hdrs "${dbus_generate_XML_OUT_DIR}/${_basename}-adaptor.h")
message(STATUS "_generated_hdrs ${_generated_hdrs}")
add_custom_command(
OUTPUT ${_generated_hdrs}
COMMAND dbus-c++::xml2cpp
ARGS ${_abs_file} --proxy=${dbus_generate_XML_OUT_DIR}/${_basename}-proxy.h --adaptor=${dbus_generate_XML_OUT_DIR}/${_basename}-adaptor.h
COMMENT ${_comment}
VERBATIM )
add_custom_target(_generate_headers${_basename} DEPENDS ${_generated_hdrs})
set_source_files_properties(${_generated_hdrs} PROPERTIES GENERATED TRUE)
string(REPLACE "." "_" _libname ${_basename})
add_library(${_basename} INTERFACE)
add_dependencies(${_basename} _generate_headers${_basename})
add_library(dbus-c++::${_basename} ALIAS ${_basename})
target_include_directories(${_basename} INTERFACE ${dbus_generate_XML_OUT_DIR})
endfunction()
@Jihadist
Copy link
Author

Example of usage:

dbus_generate(XMLFILE org.freedesktop.DBus.xml)

target_link_libraries(dbus_test PUBLIC 
        dbus-c++::dbus-c++ 
        dbus-c++::dbus-c++-ecore 
        dbus-c++::org.freedesktop.DBus)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment