summaryrefslogtreecommitdiffstats
path: root/daemon/lua
diff options
context:
space:
mode:
authorVladimír Čunát <vladimir.cunat@nic.cz>2024-03-06 12:19:28 +0100
committerOto Šťáva <oto.stava@nic.cz>2024-03-22 11:40:02 +0100
commitf93a1abcc1fbce4642bef4ef81403044fc43dd95 (patch)
tree49f81a5bf7066fe1b5ea40274fbeb2aa5211926b /daemon/lua
parentMerge !1501: various nits (diff)
downloadknot-resolver-f93a1abcc1fbce4642bef4ef81403044fc43dd95.tar.xz
knot-resolver-f93a1abcc1fbce4642bef4ef81403044fc43dd95.zip
daemon/lua: fix on 32-bit systems with 64-bit time_t
This improves the heuristics. The problem would be detected by meson, but not when cross-compiling, in which case things would mostly run OK, except some lua code/modules.
Diffstat (limited to 'daemon/lua')
-rw-r--r--daemon/lua/kres-gen-30.lua7
-rw-r--r--daemon/lua/kres-gen-31.lua7
-rw-r--r--daemon/lua/kres-gen-32.lua7
-rwxr-xr-xdaemon/lua/kres-gen.sh15
-rw-r--r--daemon/lua/meson.build19
5 files changed, 37 insertions, 18 deletions
diff --git a/daemon/lua/kres-gen-30.lua b/daemon/lua/kres-gen-30.lua
index 7639e797..f3f8a499 100644
--- a/daemon/lua/kres-gen-30.lua
+++ b/daemon/lua/kres-gen-30.lua
@@ -2,9 +2,10 @@
local ffi = require('ffi')
--[[ This file is generated by ./kres-gen.sh ]] ffi.cdef[[
-typedef long time_t;
-typedef long __time_t;
-typedef long __suseconds_t;
+
+typedef @time_t@ time_t;
+typedef @time_t@ __time_t;
+typedef @time_t@ __suseconds_t;
struct timeval {
__time_t tv_sec;
__suseconds_t tv_usec;
diff --git a/daemon/lua/kres-gen-31.lua b/daemon/lua/kres-gen-31.lua
index e555a6a0..46b349ea 100644
--- a/daemon/lua/kres-gen-31.lua
+++ b/daemon/lua/kres-gen-31.lua
@@ -2,9 +2,10 @@
local ffi = require('ffi')
--[[ This file is generated by ./kres-gen.sh ]] ffi.cdef[[
-typedef long time_t;
-typedef long __time_t;
-typedef long __suseconds_t;
+
+typedef @time_t@ time_t;
+typedef @time_t@ __time_t;
+typedef @time_t@ __suseconds_t;
struct timeval {
__time_t tv_sec;
__suseconds_t tv_usec;
diff --git a/daemon/lua/kres-gen-32.lua b/daemon/lua/kres-gen-32.lua
index 31a5c5dd..88b50ded 100644
--- a/daemon/lua/kres-gen-32.lua
+++ b/daemon/lua/kres-gen-32.lua
@@ -2,9 +2,10 @@
local ffi = require('ffi')
--[[ This file is generated by ./kres-gen.sh ]] ffi.cdef[[
-typedef long time_t;
-typedef long __time_t;
-typedef long __suseconds_t;
+
+typedef @time_t@ time_t;
+typedef @time_t@ __time_t;
+typedef @time_t@ __suseconds_t;
struct timeval {
__time_t tv_sec;
__suseconds_t tv_usec;
diff --git a/daemon/lua/kres-gen.sh b/daemon/lua/kres-gen.sh
index 70afb408..3befd5da 100755
--- a/daemon/lua/kres-gen.sh
+++ b/daemon/lua/kres-gen.sh
@@ -53,12 +53,15 @@ printf -- "local ffi = require('ffi')\n"
printf -- "--[[ This file is generated by ./kres-gen.sh ]] ffi.cdef[[\n"
# Some system dependencies. TODO: this generated part isn't perfectly portable.
-${CDEFS} ${LIBKRES} types <<-EOF
- typedef time_t
- __time_t
- __suseconds_t
- struct timeval
-EOF
+printf "
+typedef @time_t@ time_t;
+typedef @time_t@ __time_t;
+typedef @time_t@ __suseconds_t;
+struct timeval {
+ __time_t tv_sec;
+ __suseconds_t tv_usec;
+};
+"
## Various types (mainly), from libknot and libkres
diff --git a/daemon/lua/meson.build b/daemon/lua/meson.build
index b19777c2..6df5bc5b 100644
--- a/daemon/lua/meson.build
+++ b/daemon/lua/meson.build
@@ -47,10 +47,23 @@ else
kres_gen_fname = 'kres-gen-30.lua'
endif
+# Exact types around time_t aren't easy to detect, but at least we need the same size.
+time_t_size = meson.get_compiler('c').sizeof('time_t', prefix: '#include <sys/time.h>')
+kres_gen_config = {}
+foreach t: [ 'long', 'long long' ]
+ if meson.get_compiler('c').sizeof(t) == time_t_size
+ kres_gen_config = { 'time_t': t }
+ break
+ endif
+endforeach
+if kres_gen_config == {}
+ error('Unexpected sizeof(time_t) == @0@'.format(time_t_size))
+endif
+
kres_gen_lua = configure_file(
input: kres_gen_fname,
output: 'kres-gen.lua',
- copy: true,
+ configuration: kres_gen_config,
)
run_target( # run manually to re-generate kres-gen.lua
@@ -72,9 +85,9 @@ if get_option('kres_gen_test') and not meson.is_cross_build()
]
# Construct the lua tester as a meson string.
kres_gen_test_luastr = '''
- dofile('@0@')
+ dofile('@0@/../../@1@')
local ffi = require('ffi')
- '''.format(meson.current_source_dir() / kres_gen_fname)
+ '''.format(meson.current_build_dir(), kres_gen_lua)
foreach ttc: types_to_check
# We're careful with adding just includes; otherwise it's more fragile (e.g. linking flags).
if 'dep' in ttc