Add cppgir support
This commit is contained in:
parent
fecdffbbf4
commit
dee3777ffd
7 changed files with 176 additions and 30 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "external/glib/cppgir"]
|
||||
path = external/glib/cppgir
|
||||
url = https://gitlab.com/mnauw/cppgir.git
|
||||
38
external/glib/CMakeLists.txt
vendored
38
external/glib/CMakeLists.txt
vendored
|
|
@ -7,33 +7,21 @@
|
|||
add_library(external_glib INTERFACE IMPORTED GLOBAL)
|
||||
add_library(desktop-app::external_glib ALIAS external_glib)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GLIB2 REQUIRED IMPORTED_TARGET glib-2.0)
|
||||
pkg_check_modules(GOBJECT REQUIRED IMPORTED_TARGET gobject-2.0)
|
||||
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
|
||||
pkg_check_modules(GIO_UNIX REQUIRED IMPORTED_TARGET gio-unix-2.0)
|
||||
function(add_cppgir) # isolate scope
|
||||
set(BUILD_TESTING OFF)
|
||||
set(BUILD_DOC OFF)
|
||||
set(CMAKE_DISABLE_FIND_PACKAGE_Qt5Core ON)
|
||||
add_subdirectory(cppgir)
|
||||
endfunction()
|
||||
add_cppgir()
|
||||
|
||||
include(generate_cppgir.cmake)
|
||||
generate_cppgir(external_glib Gio-2.0)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GLIB2 REQUIRED IMPORTED_TARGET glib-2.0 gobject-2.0 gio-2.0 gio-unix-2.0)
|
||||
|
||||
if (DESKTOP_APP_USE_PACKAGED)
|
||||
target_link_libraries(external_glib
|
||||
INTERFACE
|
||||
PkgConfig::GIO_UNIX
|
||||
PkgConfig::GIO
|
||||
PkgConfig::GOBJECT
|
||||
PkgConfig::GLIB2
|
||||
)
|
||||
else()
|
||||
target_include_directories(external_glib SYSTEM
|
||||
INTERFACE
|
||||
${GIO_UNIX_INCLUDE_DIRS}
|
||||
${GIO_INCLUDE_DIRS}
|
||||
${GOBJECT_INCLUDE_DIRS}
|
||||
${GLIB2_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(external_glib
|
||||
INTERFACE
|
||||
gio-2.0
|
||||
gobject-2.0
|
||||
glib-2.0
|
||||
)
|
||||
endif()
|
||||
|
|
|
|||
1
external/glib/cppgir
vendored
Submodule
1
external/glib/cppgir
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit bb2b437760a707fde6d4f51a7679fc4cc6410c3c
|
||||
43
external/glib/generate_cppgir.cmake
vendored
Normal file
43
external/glib/generate_cppgir.cmake
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# This file is part of Desktop App Toolkit,
|
||||
# a set of libraries for developing nice desktop applications.
|
||||
#
|
||||
# For license and copyright information please follow this link:
|
||||
# https://github.com/desktop-app/legal/blob/master/LEGAL
|
||||
|
||||
function(generate_cppgir target_name gir)
|
||||
# cppgir generates all the dependent headers everytime, better to have a global folder
|
||||
set(gen_dst ${CMAKE_BINARY_DIR}/gen)
|
||||
file(MAKE_DIRECTORY ${gen_dst})
|
||||
|
||||
set(gen_timestamp ${gen_dst}/${target_name}_cppgir.timestamp)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${gen_timestamp}
|
||||
COMMAND
|
||||
cppgir
|
||||
--class
|
||||
--expected
|
||||
--ignore
|
||||
${cmake_helpers_loc}/external/glib/cppgir/data/cppgir.ignore:${cmake_helpers_loc}/external/glib/cppgir/data/cppgir_unix.ignore
|
||||
--output
|
||||
${gen_dst}
|
||||
${gir}
|
||||
COMMAND
|
||||
echo 1> ${gen_timestamp}
|
||||
COMMENT "Generating C++ wrapper for ${gir} (${target_name})"
|
||||
DEPENDS
|
||||
cppgir
|
||||
$<$<PATH:IS_ABSOLUTE,${gir}>:${gir}>
|
||||
)
|
||||
generate_target(${target_name} cppgir ${gen_timestamp} "" ${gen_dst})
|
||||
|
||||
get_target_property(target_type ${target_name} TYPE)
|
||||
if (${target_type} STREQUAL "INTERFACE_LIBRARY")
|
||||
target_link_libraries(${target_name} INTERFACE gi)
|
||||
target_compile_definitions(${target_name} INTERFACE GI_INLINE GI_OBJECT_NEWV)
|
||||
else()
|
||||
target_link_libraries(${target_name} PUBLIC gi)
|
||||
target_compile_definitions(${target_name} PUBLIC GI_INLINE GI_OBJECT_NEWV)
|
||||
endif()
|
||||
endfunction()
|
||||
61
external/glib/generate_dbus.cmake
vendored
Normal file
61
external/glib/generate_dbus.cmake
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# This file is part of Desktop App Toolkit,
|
||||
# a set of libraries for developing nice desktop applications.
|
||||
#
|
||||
# For license and copyright information please follow this link:
|
||||
# https://github.com/desktop-app/legal/blob/master/LEGAL
|
||||
|
||||
include(${cmake_helpers_loc}/external/glib/generate_gir.cmake)
|
||||
include(${cmake_helpers_loc}/external/glib/generate_cppgir.cmake)
|
||||
|
||||
function(generate_dbus target_name interface_prefix namespace interface_file)
|
||||
find_program(DESKTOP_APP_GDBUSCODEGEN gdbus-codegen REQUIRED)
|
||||
|
||||
set(gen_dst ${CMAKE_CURRENT_BINARY_DIR}/gen)
|
||||
file(MAKE_DIRECTORY ${gen_dst})
|
||||
|
||||
set(gen_timestamp ${gen_dst}/${target_name}_${namespace}_dbus.timestamp)
|
||||
set(gen_files
|
||||
${gen_dst}/${target_name}_${namespace}_dbus.c
|
||||
${gen_dst}/${target_name}_${namespace}_dbus.h
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${gen_timestamp}
|
||||
BYPRODUCTS
|
||||
${gen_files}
|
||||
COMMAND
|
||||
${DESKTOP_APP_GDBUSCODEGEN}
|
||||
--interface-prefix
|
||||
${interface_prefix}
|
||||
--generate-c-code
|
||||
${gen_dst}/${target_name}_${namespace}_dbus
|
||||
--c-namespace
|
||||
${namespace}
|
||||
--c-generate-object-manager
|
||||
${interface_file}
|
||||
COMMAND
|
||||
echo 1> ${gen_timestamp}
|
||||
COMMENT "Generating D-Bus C code for ${namespace} (${target_name})"
|
||||
DEPENDS
|
||||
${DESKTOP_APP_GDBUSCODEGEN}
|
||||
)
|
||||
|
||||
add_library(${target_name}_${namespace}_dbus STATIC)
|
||||
init_target(${target_name}_${namespace}_dbus "(gen)")
|
||||
target_link_libraries(${target_name}_${namespace}_dbus PUBLIC desktop-app::external_glib)
|
||||
generate_target(${target_name}_${namespace}_dbus timestamp ${gen_timestamp} "${gen_files}" ${gen_dst})
|
||||
|
||||
add_library(${target_name}_${namespace} INTERFACE)
|
||||
init_target_folder(${target_name}_${namespace} "(gen)")
|
||||
target_link_libraries(${target_name}_${namespace} INTERFACE ${target_name}_${namespace}_dbus)
|
||||
generate_gir(${target_name}_${namespace} ${namespace} Gio-2.0 ${target_name}_${namespace}_dbus)
|
||||
generate_cppgir(${target_name}_${namespace} ${CMAKE_CURRENT_BINARY_DIR}/gen/${target_name}_${namespace}.gir)
|
||||
|
||||
get_target_property(target_type ${target_name} TYPE)
|
||||
if (${target_type} STREQUAL "INTERFACE_LIBRARY")
|
||||
target_link_libraries(${target_name} INTERFACE ${target_name}_${namespace})
|
||||
else()
|
||||
target_link_libraries(${target_name} PUBLIC ${target_name}_${namespace})
|
||||
endif()
|
||||
endfunction()
|
||||
45
external/glib/generate_gir.cmake
vendored
Normal file
45
external/glib/generate_gir.cmake
vendored
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# This file is part of Desktop App Toolkit,
|
||||
# a set of libraries for developing nice desktop applications.
|
||||
#
|
||||
# For license and copyright information please follow this link:
|
||||
# https://github.com/desktop-app/legal/blob/master/LEGAL
|
||||
|
||||
function(generate_gir target_name namespace deps src_target_name)
|
||||
find_program(DESKTOP_APP_GIRSCANNER g-ir-scanner REQUIRED)
|
||||
|
||||
set(gen_dst ${CMAKE_CURRENT_BINARY_DIR}/gen)
|
||||
file(MAKE_DIRECTORY ${gen_dst})
|
||||
|
||||
set(gen_timestamp ${gen_dst}/${target_name}_gir.timestamp)
|
||||
set(gen_file ${gen_dst}/${target_name}.gir)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${gen_timestamp}
|
||||
BYPRODUCTS
|
||||
${gen_file}
|
||||
COMMAND
|
||||
${DESKTOP_APP_GIRSCANNER}
|
||||
-n
|
||||
${namespace}
|
||||
--nsversion
|
||||
1.0
|
||||
-l
|
||||
$<TARGET_FILE:${src_target_name}>
|
||||
--c-include
|
||||
"$<JOIN:$<FILTER:$<TARGET_PROPERTY:${src_target_name},SOURCES>,INCLUDE,\\.h$>,$<SEMICOLON>--c-include>"
|
||||
-i
|
||||
"$<JOIN:${deps},$<SEMICOLON>-i>"
|
||||
-o
|
||||
${gen_file}
|
||||
"$<TARGET_PROPERTY:${src_target_name},SOURCES>"
|
||||
COMMAND
|
||||
echo 1> ${gen_timestamp}
|
||||
COMMAND_EXPAND_LISTS
|
||||
COMMENT "Generating GIR (${target_name})"
|
||||
DEPENDS
|
||||
${DESKTOP_APP_GIRSCANNER}
|
||||
${src_target_name}
|
||||
)
|
||||
generate_target(${target_name} gir ${gen_timestamp} "${gen_file}" ${gen_dst})
|
||||
endfunction()
|
||||
|
|
@ -8,7 +8,12 @@ function(generate_target parent_name postfix generated_timestamp generated_files
|
|||
add_custom_target(${parent_name}_${postfix} DEPENDS ${generated_timestamp})
|
||||
init_target_folder(${parent_name}_${postfix} "(gen)")
|
||||
add_dependencies(${parent_name} ${parent_name}_${postfix})
|
||||
get_target_property(parent_type ${parent_name} TYPE)
|
||||
if (${parent_type} STREQUAL "INTERFACE_LIBRARY")
|
||||
target_include_directories(${parent_name} SYSTEM INTERFACE ${gen_dst})
|
||||
else()
|
||||
target_include_directories(${parent_name} SYSTEM PUBLIC ${gen_dst})
|
||||
target_sources(${parent_name} PRIVATE ${generated_files})
|
||||
target_include_directories(${parent_name} PUBLIC ${gen_dst})
|
||||
endif()
|
||||
source_group("(gen)" FILES ${generated_files})
|
||||
endfunction()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue