From: Remi Gacogne Date: Tue, 3 Jun 2025 11:10:16 +0000 (+0200) Subject: dnsdist: Hopefully fixes consistency issues in our build X-Git-Tag: dnsdist-2.0.0-beta1~39^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9897b72a28436a07356ac47f57931cb6ad03e42f;p=thirdparty%2Fpdns.git dnsdist: Hopefully fixes consistency issues in our build Signed-off-by: Remi Gacogne --- diff --git a/pdns/dnsdistdist/.gitignore b/pdns/dnsdistdist/.gitignore index f9b24a1f5e..c115271593 100644 --- a/pdns/dnsdistdist/.gitignore +++ b/pdns/dnsdistdist/.gitignore @@ -52,4 +52,4 @@ latex/ /.cache /*-generated-body.hh /*-generated.hh -/dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc +dnsdist-configuration-yaml-items-generated.cc diff --git a/pdns/dnsdistdist/Makefile.am b/pdns/dnsdistdist/Makefile.am index 24baff7579..5b64130ea6 100644 --- a/pdns/dnsdistdist/Makefile.am +++ b/pdns/dnsdistdist/Makefile.am @@ -35,14 +35,15 @@ dnslabeltext.cc: dnslabeltext.rl $(AM_V_GEN)$(RAGEL) $< -o dnslabeltext.cc BUILT_SOURCES=htmlfiles.h \ - dnsdist-actions-factory-generated.cc dnsdist-actions-factory-generated.hh \ + dnsdist-actions-factory-generated-body.hh dnsdist-actions-factory-generated.hh \ dnsdist-lua-ffi-interface.inc \ - dnsdist-lua-actions-generated.cc dnsdist-lua-response-actions-generated.cc \ - dnsdist-response-actions-factory-generated.cc dnsdist-response-actions-factory-generated.hh \ - dnsdist-rust-bridge-actions-generated.cc dnsdist-rust-bridge-actions-generated.hh \ - dnsdist-rust-bridge-selectors-generated.cc dnsdist-rust-bridge-selectors-generated.hh \ - dnsdist-selectors-factory-generated.cc dnsdist-selectors-factory-generated.hh \ - dnslabeltext.cc + dnsdist-lua-actions-generated-body.hh dnsdist-lua-response-actions-generated-body.hh \ + dnsdist-response-actions-factory-generated-body.hh dnsdist-response-actions-factory-generated.hh \ + dnsdist-rust-bridge-actions-generated-body.hh dnsdist-rust-bridge-actions-generated.hh \ + dnsdist-rust-bridge-selectors-generated-body.hh dnsdist-rust-bridge-selectors-generated.hh \ + dnsdist-selectors-factory-generated-body.hh dnsdist-selectors-factory-generated.hh \ + dnslabeltext.cc \ + docs/reference/yaml-settings.rst htmlfiles.h: $(srcdir)/html/* $(srcdir)/incfiles $(AM_V_GEN)$(srcdir)/incfiles $(srcdir) > $@.tmp @@ -55,10 +56,15 @@ dnsdist-lua-ffi-interface.inc: dnsdist-lua-ffi-interface.h dnsdist-lua-inspectio SRC_JS_FILES := $(wildcard src_js/*.js) MIN_JS_FILES := $(patsubst src_js/%.js,html/js/%.min.js,$(SRC_JS_FILES)) -dnsdist%generated.cc dnsdist%generated.hh: dnsdist-rules-generator.py dnsdist-actions-definitions.yml dnsdist-response-actions-definitions.yml dnsdist-selectors-definitions.yml +dnsdist%generated-body.hh dnsdist%generated.hh: dnsdist-rules-generator.py dnsdist-actions-definitions.yml dnsdist-response-actions-definitions.yml dnsdist-selectors-definitions.yml @if test "$(PYTHON)" = ":"; then echo "Actions or selectors definitions have changed, python is needed to regenerate the related files but python was not found. Please install python and re-run configure"; exit 1; fi @if ! $(PYTHON) --version | grep -q "Python 3"; then echo $(PYTHON) should be at least version 3. Please install python 3 and re-run configure; exit 1; fi - $(PYTHON) dnsdist-rules-generator.py + $(PYTHON) dnsdist-rules-generator.py . . + +docs/reference/yaml-%.rst: dnsdist-settings-documentation-generator.py dnsdist-settings-definitions.yml dnsdist-actions-definitions.yml dnsdist-response-actions-definitions.yml dnsdist-selectors-definitions.yml + @if test "$(PYTHON)" = ":"; then echo "Settings definitions have changed, python is needed to regenerate the related files but python was not found. Please install python and re-run configure"; exit 1; fi + @if ! $(PYTHON) --version | grep -q "Python 3"; then echo $(PYTHON) should be at least version 3. Please install python 3 and re-run configure; exit 1; fi + $(PYTHON) dnsdist-settings-documentation-generator.py . html/js/%.min.js: src_js/%.js uglifyjs $< > $@ @@ -113,10 +119,6 @@ EXTRA_DIST=COPYING \ dnsdist-actions-definitions.yml \ dnsdist-response-actions-definitions.yml \ dnsdist-rust-bridge.hh \ - dnsdist-rust-bridge-actions-generated.cc \ - dnsdist-rust-bridge-actions-generated.hh \ - dnsdist-rust-bridge-selectors-generated.cc \ - dnsdist-rust-bridge-selectors-generated.hh \ dnsdist-selectors-definitions.yml \ dnsdist-settings-definitions.yml \ dnslabeltext.rl \ @@ -173,7 +175,6 @@ dnsdist_SOURCES = \ dns.cc dns.hh \ dns_random.hh \ dnscrypt.cc dnscrypt.hh \ - dnsdist-actions-factory-generated.hh \ dnsdist-actions-factory.cc dnsdist-actions-factory.hh \ dnsdist-actions.cc dnsdist-actions.hh \ dnsdist-async.cc dnsdist-async.hh \ @@ -240,7 +241,6 @@ dnsdist_SOURCES = \ dnsdist-rules-factory.hh \ dnsdist-rules.cc dnsdist-rules.hh \ dnsdist-secpoll.cc dnsdist-secpoll.hh \ - dnsdist-selectors-factory-generated.hh \ dnsdist-self-answers.cc dnsdist-self-answers.hh \ dnsdist-session-cache.cc dnsdist-session-cache.hh \ dnsdist-snmp.cc dnsdist-snmp.hh \ @@ -302,6 +302,8 @@ dnsdist_SOURCES = \ views.hh \ xsk.cc xsk.hh +nodist_dnsdist_SOURCES = + testrunner_SOURCES = \ base64.hh \ bpf-filter.cc bpf-filter.hh \ @@ -531,13 +533,13 @@ testrunner_LDADD += $(QUICHE_LDFLAGS) $(QUICHE_LIBS) endif if HAVE_YAML_CONFIGURATION -dnsdist_SOURCES += dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc +nodist_dnsdist_SOURCES += dnsdist-configuration-yaml-items-generated.cc dnsdist_LDADD += $(DNSDIST_RUST_LIBS) endif if !HAVE_LUA_HPP BUILT_SOURCES += lua.hpp -nodist_dnsdist_SOURCES = lua.hpp +nodist_dnsdist_SOURCES += lua.hpp endif CLEANFILES += lua.hpp diff --git a/pdns/dnsdistdist/dnsdist-actions-factory.cc b/pdns/dnsdistdist/dnsdist-actions-factory.cc index ec14364129..596c7fcd83 100644 --- a/pdns/dnsdistdist/dnsdist-actions-factory.cc +++ b/pdns/dnsdistdist/dnsdist-actions-factory.cc @@ -2549,8 +2549,6 @@ std::shared_ptr getTeeAction(const ComboAddress& rca, std::optional(new TeeAction(rca, lca, addECS, addProxyProtocol)); } -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-actions-factory-generated.cc" -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-response-actions-factory-generated.cc" +#include "dnsdist-actions-factory-generated-body.hh" +#include "dnsdist-response-actions-factory-generated-body.hh" } diff --git a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc index bca2dde2fa..46c260915d 100644 --- a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc +++ b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc @@ -1738,9 +1738,7 @@ std::shared_ptr getByNameSelector(const ByNameSelectorConfiguration return dnsdist::configuration::yaml::getRegisteredTypeByName(config.selector_name); } -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-rust-bridge-actions-generated.cc" -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-rust-bridge-selectors-generated.cc" +#include "dnsdist-rust-bridge-actions-generated-body.hh" +#include "dnsdist-rust-bridge-selectors-generated-body.hh" } #endif /* defined(HAVE_YAML_CONFIGURATION) */ diff --git a/pdns/dnsdistdist/dnsdist-lua-actions.cc b/pdns/dnsdistdist/dnsdist-lua-actions.cc index 0f8f4f40e9..11066b005e 100644 --- a/pdns/dnsdistdist/dnsdist-lua-actions.cc +++ b/pdns/dnsdistdist/dnsdist-lua-actions.cc @@ -437,8 +437,6 @@ void setupLuaActions(LuaContext& luaCtx) return dnsdist::actions::getSetProxyProtocolValuesAction(values); }); -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-lua-actions-generated.cc" -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-lua-response-actions-generated.cc" +#include "dnsdist-lua-actions-generated-body.hh" +#include "dnsdist-lua-response-actions-generated-body.hh" } diff --git a/pdns/dnsdistdist/dnsdist-lua-rules.cc b/pdns/dnsdistdist/dnsdist-lua-rules.cc index d86fca27ac..a12eed23ea 100644 --- a/pdns/dnsdistdist/dnsdist-lua-rules.cc +++ b/pdns/dnsdistdist/dnsdist-lua-rules.cc @@ -640,6 +640,5 @@ void setupLuaRules(LuaContext& luaCtx) }); #endif /* defined(HAVE_LMDB) || defined(HAVE_CDB) */ -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-lua-selectors-generated.cc" +#include "dnsdist-lua-selectors-generated-body.hh" } diff --git a/pdns/dnsdistdist/dnsdist-rules-generator.py b/pdns/dnsdistdist/dnsdist-rules-generator.py index 830c684f7c..c62922651c 100644 --- a/pdns/dnsdistdist/dnsdist-rules-generator.py +++ b/pdns/dnsdistdist/dnsdist-rules-generator.py @@ -5,21 +5,21 @@ # - dnsdist-response-actions-definitions.yml # and generates C++ factory to create the objects # for these actions from the corresponding parameters: -# - dnsdist-actions-factory-generated.cc +# - dnsdist-actions-factory-generated-body.hh # - dnsdist-actions-factory-generated.hh -# - dnsdist-response-actions-factory-generated.cc +# - dnsdist-response-actions-factory-generated-body.hh # - dnsdist-response-actions-factory-generated.hh # as well as Lua bindings for them: -# - dnsdist-lua-actions-generated.cc -# - dnsdist-lua-response-actions-generated.cc +# - dnsdist-lua-actions-generated-body.hh +# - dnsdist-lua-response-actions-generated-body.hh # 2/ Loads the selector definitions from: # - dnsdist-selectors-definitions.yml # and generates C++ factory to create the objects # for these selectors from the corresponding parameters: -# - dnsdist-selectors-factory-generated.cc +# - dnsdist-selectors-factory-generated-body.hh # - dnsdist-selectors-factory-generated.hh # as well as the Lua bindings for them: -# - dnsdist-lua-selectors-generated.cc +# - dnsdist-lua-selectors-generated-body.hh # The format of the definitions, in YAML, is a simple list of items. # Each item has a name and an optional list of parameters. # Parameters have a name, a type, and optionally a default value @@ -33,6 +33,7 @@ # - 'skip-rust' is not used by this script but is used by the dnsdist-settings-generator.py one, where it means that the C++ code to create the Rust-side version of an action or selector will not generated # - 'skip-serde' is not used by this script but is used by the dnsdist-settings-generator.py one, where it means that the Rust structure representing that action or selector in the YAML setting will not be directly created by Serde. It is used for selectors that reference another selector themselves, or actions referencing another action. import os +import sys import tempfile import yaml @@ -134,22 +135,26 @@ def get_cpp_parameters(parameters, lua_interface): if default == '': default = '""' - if default == True: + if default is True: default = '{}' output += f'{pname} ? *{pname} : {default}' return output -def get_temporary_file_for_generated_code(): - generated_fp = tempfile.NamedTemporaryFile(mode='w+t', encoding='utf-8', dir='.', delete=False) +def get_temporary_file_for_generated_code(dest_dir): + generated_fp = tempfile.NamedTemporaryFile(mode='w+t', encoding='utf-8', dir=dest_dir, delete=False) generated_fp.write('// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!\n') return generated_fp -def generate_actions_factory_header(definitions, response=False): +def handle_generated_file(generated_file_name, output_file_name, build_dir): + build_dir_file = f'{build_dir}/{output_file_name}' + os.rename(generated_file_name, build_dir_file) + +def generate_actions_factory_header(definitions, build_dir, response=False): suffix = 'ResponseAction' if response else 'Action' shared_object_type = f'DNS{suffix}' - generated_fp = get_temporary_file_for_generated_code() + generated_fp = get_temporary_file_for_generated_code(build_dir) for action in definitions: if 'skip-cpp' in action and action['skip-cpp']: @@ -162,11 +167,11 @@ def generate_actions_factory_header(definitions, response=False): generated_fp.write(output) output_file_name = 'dnsdist-response-actions-factory-generated.hh' if response else 'dnsdist-actions-factory-generated.hh' - os.rename(generated_fp.name, output_file_name) + handle_generated_file(generated_fp.name, output_file_name, build_dir) -def generate_actions_factory(definitions, response=False): +def generate_actions_factory(definitions, build_dir, response=False): suffix = 'ResponseAction' if response else 'Action' - generated_fp = get_temporary_file_for_generated_code() + generated_fp = get_temporary_file_for_generated_code(build_dir) for action in definitions: if 'skip-cpp' in action and action['skip-cpp']: @@ -183,12 +188,12 @@ def generate_actions_factory(definitions, response=False): output += '}\n' generated_fp.write(output) - output_file_name = 'dnsdist-response-actions-factory-generated.cc' if response else 'dnsdist-actions-factory-generated.cc' - os.rename(generated_fp.name, output_file_name) + output_file_name = 'dnsdist-response-actions-factory-generated-body.hh' if response else 'dnsdist-actions-factory-generated-body.hh' + handle_generated_file(generated_fp.name, output_file_name, build_dir) -def generate_lua_actions_bindings(definitions, response=False): +def generate_lua_actions_bindings(definitions, build_dir, response=False): suffix = 'ResponseAction' if response else 'Action' - generated_fp = get_temporary_file_for_generated_code() + generated_fp = get_temporary_file_for_generated_code(build_dir) for action in definitions: if 'skip-cpp' in action and action['skip-cpp']: @@ -207,11 +212,11 @@ def generate_lua_actions_bindings(definitions, response=False): output += '});\n' generated_fp.write(output) - output_file_name = 'dnsdist-lua-response-actions-generated.cc' if response else 'dnsdist-lua-actions-generated.cc' - os.rename(generated_fp.name, output_file_name) + output_file_name = 'dnsdist-lua-response-actions-generated-body.hh' if response else 'dnsdist-lua-actions-generated-body.hh' + handle_generated_file(generated_fp.name, output_file_name, build_dir) -def generate_selectors_factory_header(definitions): - generated_fp = get_temporary_file_for_generated_code() +def generate_selectors_factory_header(definitions, build_dir): + generated_fp = get_temporary_file_for_generated_code(build_dir) for selector in definitions: if 'skip-cpp' in selector and selector['skip-cpp']: @@ -224,10 +229,10 @@ def generate_selectors_factory_header(definitions): generated_fp.write(output) output_file_name = 'dnsdist-selectors-factory-generated.hh' - os.rename(generated_fp.name, output_file_name) + handle_generated_file(generated_fp.name, output_file_name, build_dir) -def generate_selectors_factory(definitions, response=False): - generated_fp = get_temporary_file_for_generated_code() +def generate_selectors_factory(definitions, build_dir): + generated_fp = get_temporary_file_for_generated_code(build_dir) for selector in definitions: if 'skip-cpp' in selector and selector['skip-cpp']: @@ -244,11 +249,11 @@ def generate_selectors_factory(definitions, response=False): output += '}\n' generated_fp.write(output) - output_file_name = 'dnsdist-selectors-factory-generated.cc' - os.rename(generated_fp.name, output_file_name) + output_file_name = 'dnsdist-selectors-factory-generated-body.hh' + handle_generated_file(generated_fp.name, output_file_name, build_dir) -def generate_lua_selectors_bindings(definitions): - generated_fp = get_temporary_file_for_generated_code() +def generate_lua_selectors_bindings(definitions, build_dir): + generated_fp = get_temporary_file_for_generated_code(build_dir) for selector in definitions: if 'skip-cpp' in selector and selector['skip-cpp']: @@ -267,24 +272,31 @@ def generate_lua_selectors_bindings(definitions): output += '});\n' generated_fp.write(output) - output_file_name = 'dnsdist-lua-selectors-generated.cc' - os.rename(generated_fp.name, output_file_name) + output_file_name = 'dnsdist-lua-selectors-generated-body.hh' + handle_generated_file(generated_fp.name, output_file_name, build_dir) def main(): - definitions = get_definitions_from_file('dnsdist-actions-definitions.yml') - generate_actions_factory_header(definitions) - generate_actions_factory(definitions) - generate_lua_actions_bindings(definitions) - - definitions = get_definitions_from_file('dnsdist-response-actions-definitions.yml') - generate_actions_factory_header(definitions, response=True) - generate_actions_factory(definitions, response=True) - generate_lua_actions_bindings(definitions, response=True) - - definitions = get_definitions_from_file('dnsdist-selectors-definitions.yml') - generate_selectors_factory_header(definitions) - generate_selectors_factory(definitions) - generate_lua_selectors_bindings(definitions) + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + source_dir = sys.argv[1] + build_dir = sys.argv[2] + + definitions = get_definitions_from_file(f'{source_dir}/dnsdist-actions-definitions.yml') + generate_actions_factory_header(definitions, build_dir) + generate_actions_factory(definitions, build_dir) + generate_lua_actions_bindings(definitions, build_dir) + + definitions = get_definitions_from_file(f'{source_dir}/dnsdist-response-actions-definitions.yml') + generate_actions_factory_header(definitions, build_dir, response=True) + generate_actions_factory(definitions, build_dir, response=True) + generate_lua_actions_bindings(definitions, build_dir, response=True) + + definitions = get_definitions_from_file(f'{source_dir}/dnsdist-selectors-definitions.yml') + generate_selectors_factory_header(definitions, build_dir) + generate_selectors_factory(definitions, build_dir) + generate_lua_selectors_bindings(definitions, build_dir) if __name__ == '__main__': main() diff --git a/pdns/dnsdistdist/dnsdist-rules.cc b/pdns/dnsdistdist/dnsdist-rules.cc index f4b661c917..e13cdbd5fc 100644 --- a/pdns/dnsdistdist/dnsdist-rules.cc +++ b/pdns/dnsdistdist/dnsdist-rules.cc @@ -200,7 +200,6 @@ std::shared_ptr getLuaFFISelector(const dnsdist::selectors::LuaSelec return std::make_shared(func); } -// NOLINTNEXTLINE(bugprone-suspicious-include) -#include "dnsdist-selectors-factory-generated.cc" +#include "dnsdist-selectors-factory-generated-body.hh" } diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/Makefile.am b/pdns/dnsdistdist/dnsdist-rust-lib/Makefile.am index 741b53c152..d22a059427 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/Makefile.am +++ b/pdns/dnsdistdist/dnsdist-rust-lib/Makefile.am @@ -3,16 +3,15 @@ EXTRA_DIST = \ dnsdist-settings-generator.py \ rust-pre-in.rs \ rust-middle-in.rs \ - rust-post-in.rs \ - rust/src/lib.rs + rust-post-in.rs BUILT_SOURCES=rust/src/lib.rs \ - dnsdist-configuration-yaml-items-generated.cc + ../dnsdist-configuration-yaml-items-generated.cc -all: rust/src/lib.rs dnsdist-configuration-yaml-items-generated.cc +all: rust/src/lib.rs ../dnsdist-configuration-yaml-items-generated.cc -rust/src/lib.rs dnsdist-configuration-yaml-items-generated.cc: dnsdist-settings-generator.py ../dnsdist-settings-definitions.yml rust-pre-in.rs rust-middle-in.rs rust-post-in.rs dnsdist-configuration-yaml-items-pre-in.cc ../dnsdist-actions-definitions.yml ../dnsdist-response-actions-definitions.yml ../dnsdist-selectors-definitions.yml +rust/src/lib.rs ../dnsdist-configuration-yaml-items-generated.cc: dnsdist-settings-generator.py ../dnsdist-settings-definitions.yml rust-pre-in.rs rust-middle-in.rs rust-post-in.rs dnsdist-configuration-yaml-items-pre-in.cc ../dnsdist-actions-definitions.yml ../dnsdist-response-actions-definitions.yml ../dnsdist-selectors-definitions.yml @if test "$(PYTHON)" = ":"; then echo "Settings definitions have changed, python is needed to regenerate the related settings files but python was not found. Please install python and re-run configure"; exit 1; fi @if ! $(PYTHON) --version | grep -q "Python 3"; then echo $(PYTHON) should be at least version 3. Please install python 3 and re-run configure; exit 1; fi $(MAKE) -C rust clean - (cd ${srcdir} && $(PYTHON) dnsdist-settings-generator.py ../ ./ ../ ../) + (cd ${srcdir} && $(PYTHON) dnsdist-settings-generator.py ../ ./ ../) diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py b/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py index 7f16067675..5ab4362af3 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py +++ b/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-settings-generator.py @@ -22,11 +22,11 @@ # and generates C++ headers and code to create the wrappers # for these actions from the Rust structures: # - dnsdist-rust-bridge-actions-generated.hh -# - dnsdist-rust-bridge-actions-generated.cc +# - dnsdist-rust-bridge-actions-generated-body.hh # 2/ Loads the selector definitions from: # - dnsdist-selectors-definitions.yml # - dnsdist-rust-bridge-selectors-generated.hh -# - dnsdist-rust-bridge-selectors-generated.cc +# - dnsdist-rust-bridge-selectors-generated-body.hh # and generates C++ headers and code to create the wrappers # for these selectors from the Rust structures: # The format of the definitions, in YAML, is a simple list of items. @@ -307,7 +307,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, build_dir_path): +def generate_flat_settings_for_cxx(definitions, src_dir, out_file_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-pre-in.cc') @@ -377,11 +377,6 @@ void convertRuntimeFlatSettingsFromRust(const dnsdist::rust::settings::GlobalCon ''') os.rename(cxx_flat_settings_fp.name, out_file_path + '/dnsdist-configuration-yaml-items-generated.cc') - target = build_dir_path + '/dnsdist-configuration-yaml-items-generated.cc' - if out_file_path != build_dir_path: - if os.path.exists(target): - os.unlink(target) - os.symlink(os.path.abspath(out_file_path + '/dnsdist-configuration-yaml-items-generated.cc'), target) def generate_actions_config(output, def_dir, response, default_functions): suffix = 'ResponseAction' if response else 'Action' @@ -541,7 +536,7 @@ def generate_cpp_action_wrappers(def_dir, cxx_dest_dir): ''' cpp_action_wrappers_fp.write(wrappers_buffer) - os.rename(cpp_action_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated.cc') + os.rename(cpp_action_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-actions-generated-body.hh') def generate_cpp_selector_wrappers(def_dir, cxx_dest_dir): cpp_selector_wrappers_fp = get_temporary_file_for_generated_code(cxx_dest_dir) @@ -563,7 +558,7 @@ def generate_cpp_selector_wrappers(def_dir, cxx_dest_dir): ''' cpp_selector_wrappers_fp.write(wrappers_buffer) - os.rename(cpp_selector_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated.cc') + os.rename(cpp_selector_wrappers_fp.name, f'{cxx_dest_dir}/dnsdist-rust-bridge-selectors-generated-body.hh') def generate_rust_actions_enum(output, def_dir, response): suffix = 'ResponseAction' if response else 'Action' @@ -753,22 +748,21 @@ def get_temporary_file_for_generated_code(directory): return generated_fp def main(): - if len(sys.argv) != 5: - print(f'Usage: {sys.argv[0]} ') + if len(sys.argv) != 4: + 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] + cxx_build_dir = sys.argv[3] definitions = get_definitions_from_file(definitions_dir + '/dnsdist-settings-definitions.yml') default_functions = [] validation_functions = [] - generate_cpp_action_headers(definitions_dir, cxx_dest_dir) - generate_cpp_action_wrappers(definitions_dir, cxx_dest_dir) - generate_cpp_selector_headers(definitions_dir, cxx_dest_dir) - generate_cpp_selector_wrappers(definitions_dir, cxx_dest_dir) + generate_cpp_action_headers(definitions_dir, cxx_build_dir) + generate_cpp_action_wrappers(definitions_dir, cxx_build_dir) + generate_cpp_selector_headers(definitions_dir, cxx_build_dir) + generate_cpp_selector_wrappers(definitions_dir, cxx_build_dir) generated_fp = get_temporary_file_for_generated_code(f'{rust_dir}/rust/src/') include_file(generated_fp, f'{rust_dir}/rust-pre-in.rs') @@ -777,8 +771,6 @@ 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/', f'{cxx_build_dir}/dnsdist-rust-lib/') - handle_structures(generated_fp, definitions, default_functions, validation_functions) generate_cpp_action_selector_functions_callable_from_rust(generated_fp, definitions_dir) @@ -811,5 +803,7 @@ def main(): os.rename(generated_fp.name, rust_dir + '/rust/src/lib.rs') + generate_flat_settings_for_cxx(definitions, rust_dir, f'{cxx_build_dir}') + if __name__ == '__main__': main() diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/meson.build b/pdns/dnsdistdist/dnsdist-rust-lib/meson.build index 1d2b7c18d7..b752e9b413 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/meson.build +++ b/pdns/dnsdistdist/dnsdist-rust-lib/meson.build @@ -9,19 +9,30 @@ sources = files( generated = [ 'dnsdist-configuration-yaml-items-generated.cc', + 'dnsdist-rust-bridge-actions-generated.hh', + 'dnsdist-rust-bridge-actions-generated-body.hh', + 'dnsdist-rust-bridge-selectors-generated.hh', + 'dnsdist-rust-bridge-selectors-generated-body.hh', ] python = find_program('python3') rust_lib_sources = custom_target( - command: [python, '@INPUT0@', '@SOURCE_ROOT@', '@SOURCE_ROOT@/dnsdist-rust-lib', '@SOURCE_ROOT@', '@BUILD_ROOT@'], + command: [python, '@INPUT0@', '@SOURCE_ROOT@', '@SOURCE_ROOT@/dnsdist-rust-lib', '@OUTDIR@'], input: sources, output: generated, ) dep_rust_lib = declare_dependency( - sources: [rust_lib_sources,], - include_directories: [include_directories('.'), ] + sources: [ + rust_lib_sources[1], + rust_lib_sources[2], + rust_lib_sources[3], + rust_lib_sources[4], + ], + include_directories: [ + include_directories('.'), + ] ) if get_option('yaml').allowed() diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/rust/build.rs b/pdns/dnsdistdist/dnsdist-rust-lib/rust/build.rs index 18d00f906a..a3a0bb3e4f 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/rust/build.rs +++ b/pdns/dnsdistdist/dnsdist-rust-lib/rust/build.rs @@ -1,11 +1,25 @@ +use std::fs; +use std::path::PathBuf; +use std::env; + fn main() { - cxx_build::bridge("src/lib.rs") - .flag_if_supported("-std=c++17") - .flag("-Isrc") - .flag("-I.") - .flag("-I..") - .flag("-I../..") - .compile("dnsdist_rust"); + let mut bridge = cxx_build::bridge("src/lib.rs"); + let mut build = bridge + .flag_if_supported("-std=c++17") + .flag("-Isrc") + .flag("-I.") + .flag("-I..") + .flag("-I../.."); + let generated_headers_dir_env = env::var("generatedheadersdir"); + if generated_headers_dir_env.is_ok() { + let generated_headers_dir = PathBuf::from(generated_headers_dir_env.unwrap()); + let generated_headers_dir_canon = fs::canonicalize(&generated_headers_dir); + if generated_headers_dir_canon.is_ok() { + build = build.flag(format!("-I{}", generated_headers_dir_canon.unwrap().display())) + } + } + + build.compile("dnsdist_rust"); println!("cargo:rerun-if-changed=src/lib.rs"); println!("cargo:rerun-if-changed=src/helpers.rs"); diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/rust/meson.build b/pdns/dnsdistdist/dnsdist-rust-lib/rust/meson.build index 15c3705851..2559ef2b49 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/rust/meson.build +++ b/pdns/dnsdistdist/dnsdist-rust-lib/rust/meson.build @@ -7,6 +7,7 @@ env = environment() env.append('CARGO', cargo.full_path()) env.append('SYSCONFDIR', conf.get('SYSCONFDIR')) env.append('builddir', '.') +env.append('generatedheadersdir', meson.current_build_dir() + '/..') env.append('srcdir', meson.current_source_dir()) env.append('RUST_TARGET', '') env.append('RUSTC_TARGET_ARCH', '') diff --git a/pdns/dnsdistdist/meson.build b/pdns/dnsdistdist/meson.build index e8e229feff..bd2c91a981 100644 --- a/pdns/dnsdistdist/meson.build +++ b/pdns/dnsdistdist/meson.build @@ -35,6 +35,7 @@ conf.set_quoted('PACKAGE_VERSION', meson.project_version(), description: 'versio subdir('meson' / 'config') # Config subdir('meson' / 'version') # Generate version define subdir('meson' / 'compiler-setup') # Common compiler setup +subdir('meson' / 'dlopen') # our Rust static library needs dlopen (needs to happen _after_ compiler-setup) subdir('meson' / 'summary') # Print a system/project summary subdir('meson' / 'sysconfdir') # Sysconfdir subdir('meson' / 'platform') # Platform detection @@ -109,10 +110,6 @@ endif subdir('dnsdist-rust-lib') -if get_option('yaml').allowed() - subdir('meson' / 'dlopen') # our Rust static library needs dlopen -endif - common_sources += files( src_dir / 'bpf-filter.cc', src_dir / 'capabilities.cc', @@ -246,12 +243,6 @@ conditional_sources = { ], 'condition': dep_libquiche.found(), }, - 'yaml': { - 'sources': [ - src_dir / 'dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc', - ], - 'condition': dep_dnsdist_rust_lib.found(), - } } foreach name, info: conditional_sources @@ -334,6 +325,29 @@ dep_ffi_interface = declare_dependency( py = import('python') python = py.find_installation('python3', required: true) +selectors_actions_sources = custom_target( + command: [ + python, + '@INPUT0@', + '@SOURCE_ROOT@', + '@OUTDIR@', + ], + input: [ + 'dnsdist-rules-generator.py', + 'dnsdist-actions-definitions.yml', + 'dnsdist-response-actions-definitions.yml', + 'dnsdist-selectors-definitions.yml', + ], + output: [ + 'dnsdist-actions-factory-generated.hh', + 'dnsdist-actions-factory-generated-body.hh', + 'dnsdist-response-actions-factory-generated.hh', + 'dnsdist-response-actions-factory-generated-body.hh', + 'dnsdist-selectors-factory-generated.hh', + 'dnsdist-selectors-factory-generated-body.hh', + ], +) + yaml_settings_docs = custom_target( 'yaml-settings-docs', command: [ @@ -412,12 +426,24 @@ libdnsdist_common = declare_dependency( common_sources, config_h, libdnsdist_dnslabeltext_gen, + rust_lib_sources, + selectors_actions_sources, dependencies: [ deps, ], ) ) +libdnsdist_yaml_items = declare_dependency( + link_with: static_library( + 'dnsdist-yaml-items', + rust_lib_sources, + dependencies: [ + dep_dnsdist_rust_lib, + ], + ) +) + tools = { 'dnsdist': { 'main': src_dir / 'dnsdist.cc', @@ -429,6 +455,7 @@ tools = { src_dir / 'dnsdist-lua-ffi.cc', src_dir / 'dnsdist-lua-inspection-ffi.cc', mplexer_sources, + selectors_actions_sources, ], 'manpages': ['dnsdist.1'], 'deps-extra': [ @@ -440,6 +467,7 @@ tools = { dep_json11, dep_libsystemd, dep_yahttp, + libdnsdist_yaml_items, ], 'install': true, }, @@ -519,6 +547,7 @@ if get_option('unit-tests') 'dnsdist-test', config_h, test_sources, + selectors_actions_sources, dependencies: [ dep_boost, dep_boost_test,