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(),