From: Remi Gacogne Date: Mon, 19 May 2025 09:45:59 +0000 (+0200) Subject: dnsdist: Fix our `meson` build not reaching a stable state X-Git-Tag: dnsdist-2.0.0-alpha2~10^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8694ea2995e5ff2db52742419b8585119f0ad9f4;p=thirdparty%2Fpdns.git dnsdist: Fix our `meson` build not reaching a stable state 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. --- diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py b/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py index f31457f589..9624245001 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py +++ b/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py @@ -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]} ') + if len(sys.argv) != 5: + print(f'Usage: {sys.argv[0]} ') 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) diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/meson.build b/pdns/dnsdistdist/dnsdist-rust-lib/meson.build index c333844089..824358f089 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/meson.build +++ b/pdns/dnsdistdist/dnsdist-rust-lib/meson.build @@ -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, )