meson: refactor generators
Using 'run_command' is not the appropriate way to generate code
since it only runs when meson itself runs and doesn't expose to
meson the correct dependency information. 'custom_target' is
the more appropriate way to generate code, so switch to using it.
This was noticed because when trying to build as a subproject, the
depending repository failed with:
```
subprojects/phosphor-host-ipmid/meson.build:229:0: ERROR: Sandbox
violation: Tried to grab file sensor-gen.cpp outside current
(sub)project.
```
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I555c6e1a7bfaabae63d757042ddc1c5a548295aa
diff --git a/meson.build b/meson.build
index 3ecd444..402c3a7 100644
--- a/meson.build
+++ b/meson.build
@@ -100,6 +100,8 @@
nlohmann_json_dep = dependency('nlohmann-json')
endif
+generated_src = []
+
# Subfolders
subdir('libipmid')
subdir('libipmid-host')
@@ -181,12 +183,6 @@
mapper,
]
-generated_src = [
- meson.project_build_root() + '/sensor-gen.cpp',
- meson.project_build_root() + '/inventory-sensor-gen.cpp',
- meson.project_build_root() + '/fru-read-gen.cpp',
-]
-
transportoem_src = []
if not get_option('transport-oem').disabled()
transportoem_src = ['transporthandler_oem.cpp']
diff --git a/scripts/meson.build b/scripts/meson.build
index 3740227..b739e6f 100644
--- a/scripts/meson.build
+++ b/scripts/meson.build
@@ -1,35 +1,41 @@
# Generate Configuration Files from Yaml
python_exe = find_program('python3', 'python')
-sensor_yaml_script = files('sensor_gen.py')
-sensor_yaml_gen = run_command( \
- python_exe, \
- sensor_yaml_script, \
- '-i', get_option('sensor-yaml-gen'), \
- '-o', meson.project_build_root(), \
- 'generate-cpp')
-if sensor_yaml_gen.returncode() != 0
- error(sensor_yaml_gen.stderr())
-endif
+sensor_gen = custom_target('sensor-gen',
+ output: 'sensor-gen.cpp',
+ input: [ 'sensor_gen.py', get_option('sensor-yaml-gen')],
+ command: [
+ python_exe,
+ '@INPUT0@',
+ '-i', '@INPUT1@',
+ '-o', meson.current_build_dir(),
+ 'generate-cpp',
+ ],
+)
+generated_src += sensor_gen
-invsensor_yaml_script = files('inventory-sensor.py')
-invsensor_yaml_gen = run_command( \
- python_exe, \
- invsensor_yaml_script, \
- '-i', get_option('invsensor-yaml-gen'), \
- '-o', meson.project_build_root(), \
- 'generate-cpp')
-if invsensor_yaml_gen.returncode() != 0
- error(invsensor_yaml_gen.stderr())
-endif
+invsensor_gen = custom_target('invsensor-gen',
+ output: 'inventory-sensor-gen.cpp',
+ input: [ 'inventory-sensor.py', get_option('invsensor-yaml-gen')],
+ command: [
+ python_exe,
+ '@INPUT0@',
+ '-i', '@INPUT1@',
+ '-o', meson.current_build_dir(),
+ 'generate-cpp',
+ ],
+)
+generated_src += invsensor_gen
-fru_yaml_script = files('fru_gen.py')
-fru_yaml_gen = run_command( \
- python_exe, \
- fru_yaml_script, \
- '-i', get_option('fru-yaml-gen'), \
- '-o', meson.project_build_root(), \
- 'generate-cpp')
-if fru_yaml_gen.returncode() != 0
- error(fru_yaml_gen.stderr())
-endif
+fru_gen = custom_target('fru-gen',
+ output: 'fru-read-gen.cpp',
+ input: [ 'fru_gen.py', get_option('fru-yaml-gen') ],
+ command: [
+ python_exe,
+ '@INPUT0@',
+ '-i', '@INPUT1@',
+ '-o', meson.current_build_dir(),
+ 'generate-cpp',
+ ],
+)
+generated_src += fru_gen