/.cache
/*-generated-body.hh
/*-generated.hh
-/dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc
+dnsdist-configuration-yaml-items-generated.cc
$(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
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 $< > $@
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 \
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 \
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 \
views.hh \
xsk.cc xsk.hh
+nodist_dnsdist_SOURCES =
+
testrunner_SOURCES = \
base64.hh \
bpf-filter.cc bpf-filter.hh \
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
return std::shared_ptr<DNSAction>(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"
}
return dnsdist::configuration::yaml::getRegisteredTypeByName<DNSSelector>(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) */
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"
}
});
#endif /* defined(HAVE_LMDB) || defined(HAVE_CDB) */
-// NOLINTNEXTLINE(bugprone-suspicious-include)
-#include "dnsdist-lua-selectors-generated.cc"
+#include "dnsdist-lua-selectors-generated-body.hh"
}
# - 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
# - '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
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']:
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']:
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']:
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']:
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']:
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']:
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]} <path/to/source/dir> </path/to/build/dir>')
+ 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()
return std::make_shared<LuaFFIRule>(func);
}
-// NOLINTNEXTLINE(bugprone-suspicious-include)
-#include "dnsdist-selectors-factory-generated.cc"
+#include "dnsdist-selectors-factory-generated-body.hh"
}
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 ../ ./ ../)
# 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.
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')
''')
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'
'''
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)
'''
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'
return generated_fp
def main():
- 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>')
+ if len(sys.argv) != 4:
+ print(f'Usage: {sys.argv[0]} <path/to/definitions/files> <rust/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]
+ 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')
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)
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()
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()
+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");
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', '')
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
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',
],
'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
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: [
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',
src_dir / 'dnsdist-lua-ffi.cc',
src_dir / 'dnsdist-lua-inspection-ffi.cc',
mplexer_sources,
+ selectors_actions_sources,
],
'manpages': ['dnsdist.1'],
'deps-extra': [
dep_json11,
dep_libsystemd,
dep_yahttp,
+ libdnsdist_yaml_items,
],
'install': true,
},
'dnsdist-test',
config_h,
test_sources,
+ selectors_actions_sources,
dependencies: [
dep_boost,
dep_boost_test,