[libvirt PATCH 0/3] esx: fix race when building tests

This should get rid of some of the random CI fails: https://gitlab.com/libvirt/libvirt/-/jobs/726039284 Ján Tomko (3): esx: separate header and source file generation tests: esxutilstest: depend on esx_gen_headers sleep scripts/esx_vi_generator.py | 162 ++++++++++++++++++++---------------- src/esx/meson.build | 31 +++++-- tests/meson.build | 3 +- 3 files changed, 119 insertions(+), 77 deletions(-) -- 2.26.2

Invoke the generator twice and introduce separate meson targets for headers and C sources. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- scripts/esx_vi_generator.py | 159 ++++++++++++++++++++---------------- src/esx/meson.build | 31 +++++-- 2 files changed, 114 insertions(+), 76 deletions(-) diff --git a/scripts/esx_vi_generator.py b/scripts/esx_vi_generator.py index 7929e1e682..2fac5152e5 100755 --- a/scripts/esx_vi_generator.py +++ b/scripts/esx_vi_generator.py @@ -1331,24 +1331,27 @@ additional_object_features = { removed_object_features = {} -if len(sys.argv) != 3: - report_error("usage: %s srcdir builddir" % sys.argv[0]) +if len(sys.argv) != 4: + report_error("usage: %s srcdir builddir header" % sys.argv[0]) input_filename = os.path.join(sys.argv[1], "esx/esx_vi_generator.input") output_dirname = os.path.join(sys.argv[2], "esx") +header = sys.argv[3] == "header" -types_typedef = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typedef")) -types_typeenum = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typeenum")) -types_typetostring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typetostring")) -types_typefromstring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring")) -types_header = open_file(os.path.join(output_dirname, "esx_vi_types.generated.h")) -types_source = open_file(os.path.join(output_dirname, "esx_vi_types.generated.c")) -methods_header = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.h")) -methods_source = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.c")) -methods_macro = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.macro")) -helpers_header = open_file(os.path.join(output_dirname, "esx_vi.generated.h")) -helpers_source = open_file(os.path.join(output_dirname, "esx_vi.generated.c")) +if header: + types_typedef = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typedef")) + types_typeenum = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typeenum")) + types_typetostring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typetostring")) + types_typefromstring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring")) + types_header = open_file(os.path.join(output_dirname, "esx_vi_types.generated.h")) + methods_header = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.h")) + helpers_header = open_file(os.path.join(output_dirname, "esx_vi.generated.h")) +else: + types_source = open_file(os.path.join(output_dirname, "esx_vi_types.generated.c")) + methods_macro = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.macro")) + methods_source = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.c")) + helpers_source = open_file(os.path.join(output_dirname, "esx_vi.generated.c")) number = 0 @@ -1604,96 +1607,112 @@ for obj in managed_objects_by_name.values(): notice = "/* Generated by esx_vi_generator.py */\n\n\n\n" -types_typedef.write(notice) -types_typeenum.write(notice) -types_typetostring.write(notice) -types_typefromstring.write(notice) -types_header.write(notice) -types_source.write(notice) -methods_header.write(notice) -methods_source.write(notice) -methods_macro.write(notice) -helpers_header.write(notice) -helpers_source.write(notice) +if (header): + types_typedef.write(notice) + types_typeenum.write(notice) + types_typetostring.write(notice) + types_typefromstring.write(notice) + types_header.write(notice) + methods_header.write(notice) + helpers_header.write(notice) +else: + types_source.write(notice) + methods_macro.write(notice) + methods_source.write(notice) + helpers_source.write(notice) # output enums -types_typedef.write(separator + - " * VI Enums\n" + - " */\n\n") +if header: + types_typedef.write(separator + + " * VI Enums\n" + + " */\n\n") names = sorted(enums_by_name.keys()) for name in names: - types_typedef.write(enums_by_name[name].generate_typedef()) - types_typeenum.write(enums_by_name[name].generate_typeenum()) - types_typetostring.write(enums_by_name[name].generate_typetostring()) - types_typefromstring.write(enums_by_name[name].generate_typefromstring()) - types_header.write(enums_by_name[name].generate_header()) - types_source.write(enums_by_name[name].generate_source()) + if header: + types_typedef.write(enums_by_name[name].generate_typedef()) + types_typeenum.write(enums_by_name[name].generate_typeenum()) + types_typetostring.write(enums_by_name[name].generate_typetostring()) + types_typefromstring.write(enums_by_name[name].generate_typefromstring()) + types_header.write(enums_by_name[name].generate_header()) + else: + types_source.write(enums_by_name[name].generate_source()) # output objects -types_typedef.write("\n\n\n" + - separator + - " * VI Objects\n" + - " */\n\n") -types_typeenum.write("\n") -types_typetostring.write("\n") -types_typefromstring.write("\n") +if header: + types_typedef.write("\n\n\n" + + separator + + " * VI Objects\n" + + " */\n\n") + types_typeenum.write("\n") + types_typetostring.write("\n") + types_typefromstring.write("\n") names = sorted(objects_by_name.keys()) for name in names: - types_typedef.write(objects_by_name[name].generate_typedef()) - types_typeenum.write(objects_by_name[name].generate_typeenum()) - types_typetostring.write(objects_by_name[name].generate_typetostring()) - types_typefromstring.write(objects_by_name[name].generate_typefromstring()) - types_header.write(objects_by_name[name].generate_header()) - types_source.write(objects_by_name[name].generate_source()) + if header: + types_typedef.write(objects_by_name[name].generate_typedef()) + types_typeenum.write(objects_by_name[name].generate_typeenum()) + types_typetostring.write(objects_by_name[name].generate_typetostring()) + types_typefromstring.write(objects_by_name[name].generate_typefromstring()) + types_header.write(objects_by_name[name].generate_header()) + else: + types_source.write(objects_by_name[name].generate_source()) # output managed objects -types_typedef.write("\n\n\n" + - separator + - " * VI Managed Objects\n" + - " */\n\n") -types_typeenum.write("\n") -types_typetostring.write("\n") -types_typefromstring.write("\n") +if header: + types_typedef.write("\n\n\n" + + separator + + " * VI Managed Objects\n" + + " */\n\n") + types_typeenum.write("\n") + types_typetostring.write("\n") + types_typefromstring.write("\n") names = sorted(managed_objects_by_name.keys()) for name in names: - types_typedef.write(managed_objects_by_name[name].generate_typedef()) - types_typeenum.write(managed_objects_by_name[name].generate_typeenum()) - types_typetostring.write(managed_objects_by_name[name].generate_typetostring()) - types_typefromstring.write(managed_objects_by_name[name].generate_typefromstring()) - types_header.write(managed_objects_by_name[name].generate_header()) - types_source.write(managed_objects_by_name[name].generate_source()) + if header: + types_typedef.write(managed_objects_by_name[name].generate_typedef()) + types_typeenum.write(managed_objects_by_name[name].generate_typeenum()) + types_typetostring.write(managed_objects_by_name[name].generate_typetostring()) + types_typefromstring.write(managed_objects_by_name[name].generate_typefromstring()) + types_header.write(managed_objects_by_name[name].generate_header()) + else: + types_source.write(managed_objects_by_name[name].generate_source()) # output methods names = sorted(methods_by_name.keys()) for name in names: - methods_header.write(methods_by_name[name].generate_header()) - methods_source.write(methods_by_name[name].generate_source()) + if header: + methods_header.write(methods_by_name[name].generate_header()) + else: + methods_source.write(methods_by_name[name].generate_source()) -names = list(autobind_names) -names.sort() +if not header: + names = list(autobind_names) + names.sort() -for name in names: - string = aligned("#define ESX_VI__METHOD__PARAMETER__THIS__%s " % name, "\\\n", 78) - string += " ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \\\n" - string += aligned("", "%s)\n\n\n\n" % name, 49) + for name in names: + string = aligned("#define ESX_VI__METHOD__PARAMETER__THIS__%s " % name, "\\\n", 78) + string += " ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \\\n" + string += aligned("", "%s)\n\n\n\n" % name, 49) - methods_macro.write(string) + methods_macro.write(string) # output helpers names = sorted(managed_objects_by_name.keys()) for name in names: - helpers_header.write(managed_objects_by_name[name].generate_helper_header()) - helpers_source.write(managed_objects_by_name[name].generate_helper_source()) + if header: + helpers_header.write(managed_objects_by_name[name].generate_helper_header()) + else: + helpers_source.write(managed_objects_by_name[name].generate_helper_source()) diff --git a/src/esx/meson.build b/src/esx/meson.build index f2d59462fe..b7a55f6b54 100644 --- a/src/esx/meson.build +++ b/src/esx/meson.build @@ -12,18 +12,15 @@ esx_sources = [ 'esx_vi_types.c', ] -esx_gen_sources = custom_target( - 'virtesxgen', + +esx_gen_headers = custom_target( + 'virtesxgenheaders', input: [ 'esx_vi_generator.input', ], output: [ - 'esx_vi.generated.c', 'esx_vi.generated.h', - 'esx_vi_methods.generated.c', 'esx_vi_methods.generated.h', - 'esx_vi_methods.generated.macro', - 'esx_vi_types.generated.c', 'esx_vi_types.generated.h', 'esx_vi_types.generated.typedef', 'esx_vi_types.generated.typeenum', @@ -34,6 +31,27 @@ esx_gen_sources = custom_target( meson_python_prog, python3_prog.path(), esx_vi_generator_prog.path(), meson.source_root() / 'src', meson.build_root() / 'src', + 'header', + ], +) + + +esx_gen_sources = custom_target( + 'virtesxgensources', + input: [ + 'esx_vi_generator.input', + ], + output: [ + 'esx_vi.generated.c', + 'esx_vi_methods.generated.macro', + 'esx_vi_methods.generated.c', + 'esx_vi_types.generated.c', + ], + command: [ + meson_python_prog, python3_prog.path(), esx_vi_generator_prog.path(), + meson.source_root() / 'src', + meson.build_root() / 'src', + 'source', ], ) @@ -42,6 +60,7 @@ if conf.has('WITH_ESX') 'virt_driver_esx', [ esx_sources, + esx_gen_headers[1], esx_gen_sources[1], ], dependencies: [ -- 2.26.2

On Wed, Sep 23, 2020 at 11:17:43AM +0200, Ján Tomko wrote:
Invoke the generator twice and introduce separate meson targets for headers and C sources.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- scripts/esx_vi_generator.py | 159 ++++++++++++++++++++---------------- src/esx/meson.build | 31 +++++-- 2 files changed, 114 insertions(+), 76 deletions(-)
diff --git a/scripts/esx_vi_generator.py b/scripts/esx_vi_generator.py index 7929e1e682..2fac5152e5 100755 --- a/scripts/esx_vi_generator.py +++ b/scripts/esx_vi_generator.py @@ -1331,24 +1331,27 @@ additional_object_features = {
removed_object_features = {}
-if len(sys.argv) != 3: - report_error("usage: %s srcdir builddir" % sys.argv[0]) +if len(sys.argv) != 4: + report_error("usage: %s srcdir builddir header" % sys.argv[0])
input_filename = os.path.join(sys.argv[1], "esx/esx_vi_generator.input") output_dirname = os.path.join(sys.argv[2], "esx") +header = sys.argv[3] == "header"
It would be nice to use argparse here but that's for a different series.
-types_typedef = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typedef")) -types_typeenum = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typeenum")) -types_typetostring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typetostring")) -types_typefromstring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring")) -types_header = open_file(os.path.join(output_dirname, "esx_vi_types.generated.h")) -types_source = open_file(os.path.join(output_dirname, "esx_vi_types.generated.c")) -methods_header = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.h")) -methods_source = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.c")) -methods_macro = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.macro")) -helpers_header = open_file(os.path.join(output_dirname, "esx_vi.generated.h")) -helpers_source = open_file(os.path.join(output_dirname, "esx_vi.generated.c")) +if header: + types_typedef = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typedef")) + types_typeenum = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typeenum")) + types_typetostring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typetostring"))
This file is included by `src/esx/esx_vi_types.c` as part of a switch so we might consider it as source.
+ types_typefromstring = open_file(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring"))
Similarly this file contains a lot of ifs and is included by `src/esx/esx_vi_types.c` as source as well.
+ types_header = open_file(os.path.join(output_dirname, "esx_vi_types.generated.h")) + methods_header = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.h")) + helpers_header = open_file(os.path.join(output_dirname, "esx_vi.generated.h")) +else: + types_source = open_file(os.path.join(output_dirname, "esx_vi_types.generated.c")) + methods_macro = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.macro")) + methods_source = open_file(os.path.join(output_dirname, "esx_vi_methods.generated.c")) + helpers_source = open_file(os.path.join(output_dirname, "esx_vi.generated.c"))
number = 0 @@ -1604,96 +1607,112 @@ for obj in managed_objects_by_name.values():
notice = "/* Generated by esx_vi_generator.py */\n\n\n\n"
-types_typedef.write(notice) -types_typeenum.write(notice) -types_typetostring.write(notice) -types_typefromstring.write(notice) -types_header.write(notice) -types_source.write(notice) -methods_header.write(notice) -methods_source.write(notice) -methods_macro.write(notice) -helpers_header.write(notice) -helpers_source.write(notice) +if (header): + types_typedef.write(notice) + types_typeenum.write(notice) + types_typetostring.write(notice) + types_typefromstring.write(notice) + types_header.write(notice) + methods_header.write(notice) + helpers_header.write(notice) +else: + types_source.write(notice) + methods_macro.write(notice) + methods_source.write(notice) + helpers_source.write(notice)
# output enums -types_typedef.write(separator + - " * VI Enums\n" + - " */\n\n") +if header: + types_typedef.write(separator + + " * VI Enums\n" + + " */\n\n")
names = sorted(enums_by_name.keys())
for name in names: - types_typedef.write(enums_by_name[name].generate_typedef()) - types_typeenum.write(enums_by_name[name].generate_typeenum()) - types_typetostring.write(enums_by_name[name].generate_typetostring()) - types_typefromstring.write(enums_by_name[name].generate_typefromstring()) - types_header.write(enums_by_name[name].generate_header()) - types_source.write(enums_by_name[name].generate_source()) + if header: + types_typedef.write(enums_by_name[name].generate_typedef()) + types_typeenum.write(enums_by_name[name].generate_typeenum()) + types_typetostring.write(enums_by_name[name].generate_typetostring()) + types_typefromstring.write(enums_by_name[name].generate_typefromstring()) + types_header.write(enums_by_name[name].generate_header()) + else: + types_source.write(enums_by_name[name].generate_source())
# output objects -types_typedef.write("\n\n\n" + - separator + - " * VI Objects\n" + - " */\n\n") -types_typeenum.write("\n") -types_typetostring.write("\n") -types_typefromstring.write("\n") +if header: + types_typedef.write("\n\n\n" + + separator + + " * VI Objects\n" + + " */\n\n") + types_typeenum.write("\n") + types_typetostring.write("\n") + types_typefromstring.write("\n")
names = sorted(objects_by_name.keys())
for name in names: - types_typedef.write(objects_by_name[name].generate_typedef()) - types_typeenum.write(objects_by_name[name].generate_typeenum()) - types_typetostring.write(objects_by_name[name].generate_typetostring()) - types_typefromstring.write(objects_by_name[name].generate_typefromstring()) - types_header.write(objects_by_name[name].generate_header()) - types_source.write(objects_by_name[name].generate_source()) + if header: + types_typedef.write(objects_by_name[name].generate_typedef()) + types_typeenum.write(objects_by_name[name].generate_typeenum()) + types_typetostring.write(objects_by_name[name].generate_typetostring()) + types_typefromstring.write(objects_by_name[name].generate_typefromstring()) + types_header.write(objects_by_name[name].generate_header()) + else: + types_source.write(objects_by_name[name].generate_source())
# output managed objects -types_typedef.write("\n\n\n" + - separator + - " * VI Managed Objects\n" + - " */\n\n") -types_typeenum.write("\n") -types_typetostring.write("\n") -types_typefromstring.write("\n") +if header: + types_typedef.write("\n\n\n" + + separator + + " * VI Managed Objects\n" + + " */\n\n") + types_typeenum.write("\n") + types_typetostring.write("\n") + types_typefromstring.write("\n")
names = sorted(managed_objects_by_name.keys())
for name in names: - types_typedef.write(managed_objects_by_name[name].generate_typedef()) - types_typeenum.write(managed_objects_by_name[name].generate_typeenum()) - types_typetostring.write(managed_objects_by_name[name].generate_typetostring()) - types_typefromstring.write(managed_objects_by_name[name].generate_typefromstring()) - types_header.write(managed_objects_by_name[name].generate_header()) - types_source.write(managed_objects_by_name[name].generate_source()) + if header: + types_typedef.write(managed_objects_by_name[name].generate_typedef()) + types_typeenum.write(managed_objects_by_name[name].generate_typeenum()) + types_typetostring.write(managed_objects_by_name[name].generate_typetostring()) + types_typefromstring.write(managed_objects_by_name[name].generate_typefromstring()) + types_header.write(managed_objects_by_name[name].generate_header()) + else: + types_source.write(managed_objects_by_name[name].generate_source())
# output methods names = sorted(methods_by_name.keys())
for name in names: - methods_header.write(methods_by_name[name].generate_header()) - methods_source.write(methods_by_name[name].generate_source()) + if header: + methods_header.write(methods_by_name[name].generate_header()) + else: + methods_source.write(methods_by_name[name].generate_source())
-names = list(autobind_names) -names.sort() +if not header: + names = list(autobind_names) + names.sort()
-for name in names: - string = aligned("#define ESX_VI__METHOD__PARAMETER__THIS__%s " % name, "\\\n", 78) - string += " ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \\\n" - string += aligned("", "%s)\n\n\n\n" % name, 49) + for name in names: + string = aligned("#define ESX_VI__METHOD__PARAMETER__THIS__%s " % name, "\\\n", 78) + string += " ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \\\n" + string += aligned("", "%s)\n\n\n\n" % name, 49)
- methods_macro.write(string) + methods_macro.write(string)
# output helpers names = sorted(managed_objects_by_name.keys())
for name in names: - helpers_header.write(managed_objects_by_name[name].generate_helper_header()) - helpers_source.write(managed_objects_by_name[name].generate_helper_source()) + if header: + helpers_header.write(managed_objects_by_name[name].generate_helper_header()) + else: + helpers_source.write(managed_objects_by_name[name].generate_helper_source()) diff --git a/src/esx/meson.build b/src/esx/meson.build index f2d59462fe..b7a55f6b54 100644 --- a/src/esx/meson.build +++ b/src/esx/meson.build @@ -12,18 +12,15 @@ esx_sources = [ 'esx_vi_types.c', ]
-esx_gen_sources = custom_target( - 'virtesxgen', + +esx_gen_headers = custom_target( + 'virtesxgenheaders', input: [ 'esx_vi_generator.input', ], output: [ - 'esx_vi.generated.c', 'esx_vi.generated.h', - 'esx_vi_methods.generated.c', 'esx_vi_methods.generated.h', - 'esx_vi_methods.generated.macro', - 'esx_vi_types.generated.c', 'esx_vi_types.generated.h', 'esx_vi_types.generated.typedef', 'esx_vi_types.generated.typeenum', @@ -34,6 +31,27 @@ esx_gen_sources = custom_target( meson_python_prog, python3_prog.path(), esx_vi_generator_prog.path(), meson.source_root() / 'src', meson.build_root() / 'src', + 'header', + ], +) + +
No need for two empty lines as the rest of the file uses only one.
+esx_gen_sources = custom_target( + 'virtesxgensources', + input: [ + 'esx_vi_generator.input', + ], + output: [ + 'esx_vi.generated.c', + 'esx_vi_methods.generated.macro', + 'esx_vi_methods.generated.c', + 'esx_vi_types.generated.c', + ], + command: [ + meson_python_prog, python3_prog.path(), esx_vi_generator_prog.path(), + meson.source_root() / 'src', + meson.build_root() / 'src', + 'source', ], )
@@ -42,6 +60,7 @@ if conf.has('WITH_ESX') 'virt_driver_esx', [ esx_sources, + esx_gen_headers[1], esx_gen_sources[1], ], dependencies: [ -- 2.26.2

Sometimes parallel compilation randomly fails on platforms that do not have many drivers enabled, like macOS: In file included from ../tests/esxutilstest.c:13: ../src/esx/esx_vi_types.h:62:10: fatal error: 'esx_vi_types.generated.typedef' file not found ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. List esx_gen_headers as a source to stop meson from building it before the headers are generated. https://gitlab.com/libvirt/libvirt/-/jobs/726039284 Signed-off-by: Ján Tomko <jtomko@redhat.com> --- tests/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/meson.build b/tests/meson.build index f4fbb25e66..8ae201fd69 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -355,8 +355,9 @@ if conf.has('WITH_BHYVE') endif if conf.has('WITH_ESX') + esxutilstest_sources = [ 'esxutilstest.c', esx_gen_headers ] tests += [ - { 'name': 'esxutilstest', 'include': [ esx_inc_dir ] }, + { 'name': 'esxutilstest', 'sources': esxutilstest_sources, 'include': [ esx_inc_dir ] }, ] endif -- 2.26.2

On Wed, Sep 23, 2020 at 11:17:44AM +0200, Ján Tomko wrote:
Sometimes parallel compilation randomly fails on platforms that do not have many drivers enabled, like macOS:
In file included from ../tests/esxutilstest.c:13: ../src/esx/esx_vi_types.h:62:10: fatal error: 'esx_vi_types.generated.typedef' file not found ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
List esx_gen_headers as a source to stop meson from building it before the headers are generated.
https://gitlab.com/libvirt/libvirt/-/jobs/726039284
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- tests/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/meson.build b/tests/meson.build index f4fbb25e66..8ae201fd69 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -355,8 +355,9 @@ if conf.has('WITH_BHYVE') endif
if conf.has('WITH_ESX') + esxutilstest_sources = [ 'esxutilstest.c', esx_gen_headers ] tests += [ - { 'name': 'esxutilstest', 'include': [ esx_inc_dir ] }, + { 'name': 'esxutilstest', 'sources': esxutilstest_sources, 'include': [ esx_inc_dir ] }, ] endif
You can create esx_dep in src/esx/meson.build: esx_dep = declare_dependency( include_directories: esx_inc_dir, sources: esx_gen_headers, ) and use it in the test file: { 'name': 'esxutilstest', 'deps': [ esx_dep ] }, This way it's ensured that the include and headers are always used together as a single dependency. Pavel

meson build --werror -Dsystem=true \ -Ddriver-qemu=disabled -Ddriver-lxc=disabled \ -Ddriver-libxl=disabled -Ddriver-vbox=disabled \ -Ddriver-network=disabled -Ddriver-interface=disabled --- scripts/esx_vi_generator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/esx_vi_generator.py b/scripts/esx_vi_generator.py index 2fac5152e5..fc29ec4a71 100755 --- a/scripts/esx_vi_generator.py +++ b/scripts/esx_vi_generator.py @@ -25,6 +25,7 @@ import sys import os import os.path +import time OCCURRENCE__REQUIRED_ITEM = "r" @@ -43,6 +44,8 @@ autobind_names = set() separator = "/* " + ("* " * 37) + "*\n" +time.sleep(15) + def aligned(left, right, length=59): return left.ljust(length, ' ') + right -- 2.26.2
participants (2)
-
Ján Tomko
-
Pavel Hrdina