import os
import re
+import shutil
import sys
import tempfile
import yaml
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')
''')
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'
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 = []
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)
'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',
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,
)