sdbus++: Fix meson dependency generation
All of the generated meson files optionally look for sdbus++ sources
that can be plumbed in to allow changes to the generator code to
correctly trigger rebuilds.
This will require adding a new variable prior to generated sources,
`sdbusplusplus_depfiles`. You can convert previous meson defitions with
the follwing.
```
sdbusplus_dep = dependency('sdbusplus')
sdbusplusplus_prog = find_program('sdbus++', native: true)
sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson', native: true)
sdbusplusplus_depfiles = files()
if sdbusplus_dep.type_name() == 'internal'
sdbusplusplus_depfiles = subproject('sdbusplus').get_variable('sdbusplusplus_depfiles')
endif
```
Change-Id: Ic2d5bafdbdd2595be8c44e0e616e590143639f21
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/example/meson.build b/example/meson.build
index 837c6f7..b338dc1 100644
--- a/example/meson.build
+++ b/example/meson.build
@@ -44,20 +44,10 @@
dependencies: asio_dep,
)
-calc_buildroot = meson.current_build_dir()
-calc_files = files(
- run_command(
- sdbusgen_prog,
- '--tool', sdbusplusplus_prog,
- '--output', calc_buildroot,
- 'net',
- check: true
- ).stdout().strip().split('\n')
-)
-
+subdir('net/poettering/Calculator')
executable(
'calculator-server',
'calculator-server.cpp',
- calc_files,
+ calculator_sources,
dependencies: sdbusplus_dep,
)
diff --git a/example/net/poettering/Calculator/meson.build b/example/net/poettering/Calculator/meson.build
new file mode 100644
index 0000000..f77fc5b
--- /dev/null
+++ b/example/net/poettering/Calculator/meson.build
@@ -0,0 +1,29 @@
+calculator_sources = []
+
+calculator_sources += custom_target(
+ 'Calculator__cpp',
+ input: '../Calculator.interface.yaml',
+ output: [ 'server.cpp', 'server.hpp', 'client.hpp' ],
+ depend_files: sdbusplusplus_depfiles,
+ command: [
+ sdbuspp_gen_meson_prog, '--command', 'cpp',
+ '--output', meson.current_build_dir(),
+ '--tool', sdbusplusplus_prog,
+ '--directory', meson.current_source_dir() / '../../..',
+ 'net/poettering/Calculator',
+ ],
+)
+
+calculator_sources += custom_target(
+ 'Calculator__errors',
+ input: '../Calculator.errors.yaml',
+ output: [ 'error.cpp', 'error.hpp' ],
+ depend_files: sdbusplusplus_depfiles,
+ command: [
+ sdbuspp_gen_meson_prog, '--command', 'cpp',
+ '--output', meson.current_build_dir(),
+ '--tool', sdbusplusplus_prog,
+ '--directory', meson.current_source_dir() / '../../..',
+ 'net/poettering/Calculator',
+ ],
+)
diff --git a/test/meson.build b/test/meson.build
index 0deeed8..64dbc0e 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -81,15 +81,22 @@
),
)
-server_buildroot = meson.current_build_dir()
-server_files = files(
- run_command(
- sdbusgen_prog,
- '--tool', sdbusplusplus_prog,
- '--output', server_buildroot,
- 'server',
- check: true
- ).stdout().strip().split('\n')
+subdir('server/Test')
+server_test_lib = static_library(
+ 'server-test',
+ server_test_sources,
+ dependencies: sdbusplus_dep,
+)
+server_test_hpp = []
+foreach f : server_test_sources.to_list()
+ if f.full_path().endswith('.hpp')
+ server_test_hpp += f
+ endif
+endforeach
+server_test_dep = declare_dependency(
+ link_with: server_test_lib,
+ dependencies: sdbusplus_dep,
+ sources: server_test_hpp,
)
test(
@@ -97,12 +104,10 @@
executable(
'test-server',
'server/object.cpp',
- server_files,
- include_directories: include_directories('server'),
dependencies: [
gmock_dep,
gtest_dep,
- sdbusplus_dep,
+ server_test_dep,
],
),
)
@@ -112,12 +117,10 @@
executable(
'test-server-message-variant',
'server/message_variant.cpp',
- server_files,
- include_directories: include_directories('server'),
dependencies: [
gmock_dep,
gtest_dep,
- sdbusplus_dep,
+ server_test_dep,
],
),
)
diff --git a/test/server/Test/meson.build b/test/server/Test/meson.build
new file mode 100644
index 0000000..37e56a5
--- /dev/null
+++ b/test/server/Test/meson.build
@@ -0,0 +1,13 @@
+server_test_sources = custom_target(
+ 'server_test__cpp',
+ input: '../Test.interface.yaml',
+ output: [ 'server.cpp', 'server.hpp', 'client.hpp' ],
+ depend_files: sdbusplusplus_depfiles,
+ command: [
+ sdbuspp_gen_meson_prog, '--command', 'cpp',
+ '--output', meson.current_build_dir(),
+ '--tool', sdbusplusplus_prog,
+ '--directory', meson.current_source_dir() / '../..',
+ 'server/Test',
+ ],
+)
diff --git a/test/server/message_variant.cpp b/test/server/message_variant.cpp
index 2ddfac4..87fe511 100644
--- a/test/server/message_variant.cpp
+++ b/test/server/message_variant.cpp
@@ -1,6 +1,5 @@
-#include "Test/server.hpp"
-
#include <sdbusplus/bus.hpp>
+#include <server/Test/server.hpp>
#include <gtest/gtest.h>
diff --git a/test/server/object.cpp b/test/server/object.cpp
index afb7ad0..13cd054 100644
--- a/test/server/object.cpp
+++ b/test/server/object.cpp
@@ -1,8 +1,7 @@
-#include "Test/server.hpp"
-
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/manager.hpp>
#include <sdbusplus/test/sdbus_mock.hpp>
+#include <server/Test/server.hpp>
#include <gtest/gtest.h>
diff --git a/tools/meson.build b/tools/meson.build
index 4fd556c..6f0e444 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -1,3 +1,29 @@
+sdbusplusplus_depfiles = files(
+ 'sdbus++',
+ 'sdbusplus/enum.py',
+ 'sdbusplus/error.py',
+ 'sdbusplus/__init__.py',
+ 'sdbusplus/interface.py',
+ 'sdbusplus/main.py',
+ 'sdbusplus/method.py',
+ 'sdbusplus/namedelement.py',
+ 'sdbusplus/property.py',
+ 'sdbusplus/renderer.py',
+ 'sdbusplus/signal.py',
+ 'sdbusplus/templates/error.cpp.mako',
+ 'sdbusplus/templates/error.hpp.mako',
+ 'sdbusplus/templates/error.md.mako',
+ 'sdbusplus/templates/interface.client.hpp.mako',
+ 'sdbusplus/templates/interface.md.mako',
+ 'sdbusplus/templates/interface.server.cpp.mako',
+ 'sdbusplus/templates/interface.server.hpp.mako',
+ 'sdbusplus/templates/method.md.mako',
+ 'sdbusplus/templates/method.prototype.hpp.mako',
+ 'sdbusplus/templates/property.md.mako',
+ 'sdbusplus/templates/property.prototype.hpp.mako',
+ 'sdbusplus/templates/signal.md.mako',
+ 'sdbusplus/templates/signal.prototype.hpp.mako',
+)
meson.override_find_program('sdbus++', files('sdbus++'))
sdbusplusplus_prog = find_program('sdbus++', native: true)
diff --git a/tools/sdbus++-gen-meson b/tools/sdbus++-gen-meson
index 549eb58..7e46f9c 100755
--- a/tools/sdbus++-gen-meson
+++ b/tools/sdbus++-gen-meson
@@ -36,7 +36,7 @@
## if a repository contains old copies of the generated meson.build files and
## needs an update. We should increment the version number whenever the
## resulting meson.build would change.
-tool_version="sdbus++-gen-meson version 3"
+tool_version="sdbus++-gen-meson version 4"
function show_version {
echo "${tool_version}"
}
@@ -205,6 +205,7 @@
'$1__cpp'.underscorify(),
input: [ ${sources} ],
output: [ ${outputs} ],
+ depend_files: sdbusplusplus_depfiles,
command: [
sdbuspp_gen_meson_prog, '--command', 'cpp',
'--output', meson.current_build_dir(),
@@ -236,6 +237,7 @@
'$1__markdown'.underscorify(),
input: [ ${sources} ],
output: [ '$(basename "$1").md' ],
+ depend_files: sdbusplusplus_depfiles,
command: [
sdbuspp_gen_meson_prog, '--command', 'markdown',
'--output', meson.current_build_dir(),