build: support registry generation

sdbus++-gen-meson version 10 adds support for redfish registry
generation and greatly simplifies the install directives.

Regenerate the YAML meson files and modify the base meson.build
as necessary.  Also, format meson.build with `meson format`.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I77586fca7742d5468803913cb45276ca57271655
diff --git a/meson.build b/meson.build
index be9b03a..133767d 100644
--- a/meson.build
+++ b/meson.build
@@ -1,4 +1,6 @@
-project('phosphor-dbus-interfaces', 'cpp',
+project(
+    'phosphor-dbus-interfaces',
+    'cpp',
     meson_version: '>=1.1.1',
     default_options: [
         'buildtype=debugoptimized',
@@ -15,36 +17,38 @@
 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')
+    sdbusplusplus_depfiles = subproject('sdbusplus').get_variable(
+        'sdbusplusplus_depfiles',
+    )
 endif
 
 # Parse options to determine appropriate subdirectories to support.
-selected_subdirs = []
+yaml_selected_subdirs = []
 if get_option('data_com_google')
-    selected_subdirs += 'com/google'
+    yaml_selected_subdirs += 'com/google'
 endif
 if get_option('data_com_ibm')
-    selected_subdirs += 'com/ibm'
+    yaml_selected_subdirs += 'com/ibm'
 endif
 if get_option('data_com_intel')
-    selected_subdirs += 'com/intel'
+    yaml_selected_subdirs += 'com/intel'
 endif
 if get_option('data_com_meta')
-    selected_subdirs += 'com/meta'
+    yaml_selected_subdirs += 'com/meta'
 endif
 if get_option('data_org_freedesktop')
-    selected_subdirs += 'org/freedesktop'
+    yaml_selected_subdirs += 'org/freedesktop'
 endif
 if get_option('data_org_open_power')
-    selected_subdirs += 'org/open_power'
+    yaml_selected_subdirs += 'org/open_power'
 endif
 if get_option('data_xyz_openbmc_project')
-    selected_subdirs += 'xyz/openbmc_project'
+    yaml_selected_subdirs += 'xyz/openbmc_project'
 endif
 
 # Install the selected YAML files.
-inst_yaml_dir = get_option('datadir') / 'phosphor-dbus-yaml/yaml'
-foreach d : selected_subdirs
+inst_yaml_dir = get_option('datadir') / 'phosphor-dbus-yaml'
+foreach d : yaml_selected_subdirs
     install_subdir(
         'yaml' / d,
         install_dir: inst_yaml_dir / d,
@@ -58,69 +62,16 @@
     subdir_done()
 endif
 
-generated_sources = []
-generated_others = []
-yaml_sources = []
+should_generate_cpp = true
+should_generate_markdown = get_option('generate_md')
+should_generate_registry = true
 
 # Source the generated meson files.
 subdir('gen')
-foreach d : selected_subdirs
-  subdir('gen' / d)
-endforeach
-custom_target(
-    'md',
-    command: 'true',
-    output: 'md',
-    capture: true,
-    depends: generated_others,
-    build_by_default: get_option('generate_md'))
 
-generated_files_headers = []
-generated_files_cpp = []
-foreach s : generated_sources
-    foreach f : s.to_list()
-        p = f.full_path()
-        if p.endswith('.hpp')
-            generated_files_headers += f
-        elif p.endswith('.cpp')
-            generated_files_cpp += f
-        else
-            error('Unknown filetype: ' + p)
-        endif
-    endforeach
-endforeach
-
-generated_root = meson.current_build_dir() / 'gen/'
-exclude_cpp = []
-foreach f : generated_files_cpp
-    exclude_cpp += f.full_path().replace(generated_root, '').strip('/')
-endforeach
-
-# Install the generated header files.
-exclude = exclude_cpp
-foreach o : generated_others
-    foreach f : o.to_list()
-        exclude += f.full_path().replace(generated_root, '').strip('/')
-    endforeach
-endforeach
-install_subdir(
-    generated_root,
-    exclude_files: exclude,
-    install_dir: get_option('includedir'),
-    strip_directory: true,
-)
-
-# Install the generated markdown files.
-exclude = exclude_cpp
-foreach f : generated_files_headers
-    exclude += f.full_path().replace(generated_root, '').strip('/')
-endforeach
-install_subdir(
-    generated_root,
-    exclude_files: exclude,
-    install_dir: get_option('datadir') / 'doc' / meson.project_name(),
-    strip_directory: true,
-)
+# Source the extra target to copy registry files into a separate tree so they
+# can be useful for dependees when we are built as a sub-project.
+subdir('registry')
 
 # Define and build libphosphor_dbus.so from the C++ files.
 libphosphor_dbus = library(
@@ -138,15 +89,24 @@
     name: meson.project_name(),
     version: meson.project_version(),
     description: 'Generated sdbusplus bindings for phosphor-dbus-interfaces',
-    variables: ['yamldir=' + '${pc_sysrootdir}${prefix}' / inst_yaml_dir],
+    variables: [
+        'yamldir=' + '${pc_sysrootdir}${prefix}' / inst_yaml_dir,
+        'registry_dir=' + '${pc_sysrootdir}${prefix}' / inst_registry_dir,
+    ],
 )
 
 phosphor_dbus_interfaces_dep = declare_dependency(
-    sources: generated_files_headers,
+    sources: generated_headers,
     include_directories: include_directories('gen'),
     link_with: libphosphor_dbus,
     dependencies: sdbusplus_dep,
-    variables: ['yamldir=' + meson.project_source_root() / 'yaml'],
+    variables: [
+        'yamldir=' + meson.project_source_root() / 'yaml',
+        'registry_dir=' + registry_copy_dir,
+    ],
 )
 
-meson.override_dependency('phosphor-dbus-interfaces', phosphor_dbus_interfaces_dep)
+meson.override_dependency(
+    'phosphor-dbus-interfaces',
+    phosphor_dbus_interfaces_dep,
+)