From ba45e7939f010888ce29ecf8693e3e6f9a32d18e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Wed, 7 Jul 2021 17:14:44 +0200 Subject: [PATCH] meson.build: add a simple sanity check of kres-gen result --- daemon/lua/meson.build | 32 ++++++++++++++++++++++++++++++++ meson_options.txt | 7 +++++++ 2 files changed, 39 insertions(+) diff --git a/daemon/lua/meson.build b/daemon/lua/meson.build index fabf0414b..f98fd631a 100644 --- a/daemon/lua/meson.build +++ b/daemon/lua/meson.build @@ -42,6 +42,38 @@ run_target( # run manually to re-generate kres-gen.lua command: find_program('./kres-gen.sh'), ) +# A simple config test: check that sizes of some structures match +# in C and pre-generated lua bindings. +# The point is that regeneration is quite expensive in time and dependencies, +# but this basic sanity check could be ran always. +if get_option('kres_gen_test') + types_to_check = { + 'time_t' : '#include ', + 'struct timeval' : '#include ', + 'zs_scanner_t' : '#include ', + 'knot_pkt_t' : '#include ', + } + # Construct the lua tester as a meson string. + kres_gen_test_luastr = ''' + dofile('@0@') + local ffi = require('ffi') + '''.format(meson.current_source_dir() / 'kres-gen.lua') + foreach tname, tinclude: types_to_check + kres_gen_test_luastr += ''' + assert(ffi.sizeof(ffi.typeof('@0@')) == @1@, + 'Lua binding for C type ' .. '@0@' .. ' has incorrect size: ' + .. ffi.sizeof(ffi.typeof('@0@')) + ) + '''.format(tname, meson.get_compiler('c').sizeof(tname, prefix : tinclude)) + endforeach + # Now feed it directly into luajit. + kres_gen_test = run_command(find_program('luajit'), '-e', kres_gen_test_luastr) + if kres_gen_test.returncode() != 0 + error('if you use released Knot* versions, please contact us: https://www.knot-resolver.cz/contact/\n' + + kres_gen_test.stderr().strip()) + endif +endif + lua_src = [ files('postconfig.lua'), files('kres.lua'), diff --git a/meson_options.txt b/meson_options.txt index f7ca06aab..572cd643d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -175,6 +175,13 @@ option( description: 'html documentation dependencies and installation', ) +option( + 'kres_gen_test', + type: 'boolean', + value: true, + description: 'run kres_gen_test: a simple sanity check for our lua bindings', +) + option( 'config_tests', type: 'combo', -- 2.47.2