]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix our `meson` build not reaching a stable state
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 19 May 2025 09:45:59 +0000 (11:45 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 19 May 2025 09:45:59 +0000 (11:45 +0200)
Before this commit calling `meson build` a second time right after building
triggered a re-generation of the `dnsdist-configuration-yaml-items-generated.cc`
file because `meson` wants it to be present in the build directory,
but we also want to generate it in the source directory so that it
can be included in the repository.
The current solution is a bit dirty, but our options are limited
because some files are only generated when YAML support is available,
because they require Rust, and we need them to be in the dist tarball.
Otto suggested that we could generate them only when building the dist
tarball, I'll look into it in a bit.

pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py
pdns/dnsdistdist/dnsdist-rust-lib/meson.build

index f31457f5890c3b12eeec86d62ce39e5d79914986..96242450018a50f2737396f9dcb91a4b1d61f01a 100644 (file)
@@ -46,6 +46,7 @@
 
 import os
 import re
+import shutil
 import sys
 import tempfile
 import yaml
@@ -307,7 +308,7 @@ def include_file(out_fp, include_file_name):
         out_fp.write(in_fp.read())
         out_fp.write(f'// END INCLUDE {basename}\n')
 
-def generate_flat_settings_for_cxx(definitions, src_dir, out_file_path):
+def generate_flat_settings_for_cxx(definitions, src_dir, out_file_path, build_dir_path):
     cxx_flat_settings_fp = get_temporary_file_for_generated_code(out_file_path)
 
     include_file(cxx_flat_settings_fp, src_dir + '/dnsdist-configuration-yaml-items-generated-pre-in.cc')
@@ -377,6 +378,7 @@ void convertRuntimeFlatSettingsFromRust(const dnsdist::rust::settings::GlobalCon
 ''')
 
     os.rename(cxx_flat_settings_fp.name, out_file_path + '/dnsdist-configuration-yaml-items-generated.cc')
+    shutil.copy(out_file_path + '/dnsdist-configuration-yaml-items-generated.cc', build_dir_path)
 
 def generate_actions_config(output, def_dir, response, default_functions):
     suffix = 'ResponseAction' if response else 'Action'
@@ -748,13 +750,14 @@ def get_temporary_file_for_generated_code(directory):
     return generated_fp
 
 def main():
-    if len(sys.argv) != 4:
-        print(f'Usage: {sys.argv[0]} <path/to/definitions/files> <rust/output/dir> <cxx/output/dir>')
+    if len(sys.argv) != 5:
+        print(f'Usage: {sys.argv[0]} <path/to/definitions/files> <rust/output/dir> <cxx/output/dir> <cxx/build/root/dir>')
         sys.exit(1)
 
     definitions_dir = sys.argv[1]
     rust_dir = sys.argv[2]
     cxx_dest_dir = sys.argv[3]
+    cxx_build_dir = sys.argv[4]
     definitions = get_definitions_from_file(definitions_dir + '/dnsdist-settings-definitions.yml')
     default_functions = []
     validation_functions = []
@@ -771,7 +774,7 @@ def main():
     generate_actions_config(generated_fp, definitions_dir, True, default_functions)
     generate_selectors_config(generated_fp, definitions_dir, default_functions)
 
-    generate_flat_settings_for_cxx(definitions, rust_dir, f'{cxx_dest_dir}/dnsdist-rust-lib/')
+    generate_flat_settings_for_cxx(definitions, rust_dir, f'{cxx_dest_dir}/dnsdist-rust-lib/', f'{cxx_build_dir}/dnsdist-rust-lib/')
 
     handle_structures(generated_fp, definitions, default_functions, validation_functions)
 
index c333844089b6f35882ce760d177637e7f5b3b71b..824358f089ac82df8816be7256c83a2556016413 100644 (file)
@@ -2,7 +2,6 @@ sources = files(
   'dnsdist-settings-generator.py',
   '../dnsdist-settings-definitions.yml',
   'dnsdist-configuration-yaml-items-generated-pre-in.cc',
-  'dnsdist-configuration-yaml-items-generated.cc',
   'dnsdist-settings-documentation-generator.py',
   'rust-pre-in.rs',
   'rust-middle-in.rs',
@@ -16,7 +15,7 @@ generated = [
 python = find_program('python3')
 
 rust_lib_sources = custom_target(
-  command: [python, '@INPUT0@', '@SOURCE_ROOT@', '@SOURCE_ROOT@/dnsdist-rust-lib', '@SOURCE_ROOT@'],
+  command: [python, '@INPUT0@', '@SOURCE_ROOT@', '@SOURCE_ROOT@/dnsdist-rust-lib', '@SOURCE_ROOT@', '@BUILD_ROOT@'],
   input: sources,
   output: generated,
 )