Skip to content

Commit 6c0abf9

Browse files
committed
Set luajit version from luajit_relver.txt
Fixes #4
1 parent d4de114 commit 6c0abf9

File tree

4 files changed

+87
-52
lines changed

4 files changed

+87
-52
lines changed

luajit_relver.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1744318430

src/lib.rs

+12-3
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,12 @@ impl Build {
6969
self.build_unix()
7070
}
7171

72-
pub fn build_unix(&mut self) -> Artifacts {
72+
fn build_unix(&mut self) -> Artifacts {
7373
let target = &self.target.as_ref().expect("TARGET not set")[..];
7474
let host = &self.host.as_ref().expect("HOST not set")[..];
7575
let out_dir = self.out_dir.as_ref().expect("OUT_DIR not set");
76-
let source_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("luajit2");
76+
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
77+
let source_dir = manifest_dir.join("luajit2");
7778
let build_dir = out_dir.join("luajit-build");
7879

7980
// Cleanup
@@ -84,6 +85,10 @@ impl Build {
8485
.unwrap_or_else(|e| panic!("cannot create {}: {}", build_dir.display(), e));
8586
cp_r(&source_dir, &build_dir);
8687

88+
// Copy release version file
89+
#[rustfmt::skip]
90+
fs::copy(&manifest_dir.join("luajit_relver.txt"), &build_dir.join(".relver")).unwrap();
91+
8792
let mut cc = cc::Build::new();
8893
cc.warnings(false);
8994
let compiler = cc.get_compiler();
@@ -192,7 +197,7 @@ impl Build {
192197
}
193198
}
194199

195-
pub fn build_msvc(&mut self) -> Artifacts {
200+
fn build_msvc(&mut self) -> Artifacts {
196201
let target = &self.target.as_ref().expect("TARGET not set")[..];
197202
let out_dir = self.out_dir.as_ref().expect("OUT_DIR not set");
198203
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
@@ -208,6 +213,10 @@ impl Build {
208213
.unwrap_or_else(|e| panic!("cannot create {}: {}", build_dir.display(), e));
209214
cp_r(&source_dir, &build_dir);
210215

216+
// Copy release version file
217+
#[rustfmt::skip]
218+
fs::copy(&manifest_dir.join("luajit_relver.txt"), &build_dir.join(".relver")).unwrap();
219+
211220
let mut msvcbuild = Command::new(build_dir.join("src").join("msvcbuild.bat"));
212221
msvcbuild.current_dir(build_dir.join("src"));
213222
if self.lua52compat {

testcrate/src/lib.rs

+67-49
Original file line numberDiff line numberDiff line change
@@ -9,64 +9,82 @@ extern "C" {
99
pub fn lua_pcall(state: *mut c_void, nargs: c_int, nresults: c_int, errfunc: c_int) -> c_int;
1010
}
1111

12-
pub unsafe fn lua_getglobal(state: *mut c_void, k: *const c_char) {
13-
lua_getfield(state, -10002 /* LUA_GLOBALSINDEX */, k);
14-
}
15-
16-
#[test]
17-
fn test_lua() {
12+
#[cfg(test)]
13+
mod tests {
1814
use std::{ptr, slice};
19-
unsafe {
20-
let state = luaL_newstate();
21-
assert!(state != ptr::null_mut());
2215

23-
luaL_openlibs(state);
16+
use super::*;
2417

25-
let version = {
26-
lua_getglobal(state, "_VERSION\0".as_ptr().cast());
27-
let mut len: c_long = 0;
28-
let version_ptr = lua_tolstring(state, -1, &mut len);
29-
slice::from_raw_parts(version_ptr as *const u8, len as usize)
30-
};
18+
pub unsafe fn lua_getglobal(state: *mut c_void, k: *const c_char) {
19+
lua_getfield(state, -10002 /* LUA_GLOBALSINDEX */, k);
20+
}
3121

32-
assert_eq!(version, b"Lua 5.1");
22+
pub unsafe fn to_string<'a>(state: *mut c_void, index: c_int) -> &'a str {
23+
let mut len: c_long = 0;
24+
let str_ptr = lua_tolstring(state, index, &mut len);
25+
let bytes = slice::from_raw_parts(str_ptr as *const u8, len as usize);
26+
str::from_utf8(bytes).unwrap()
3327
}
34-
}
3528

36-
#[test]
37-
fn test_lua52compat() {
38-
use std::{ptr, slice};
39-
unsafe {
40-
let state = luaL_newstate();
41-
assert!(state != ptr::null_mut());
29+
#[test]
30+
fn test_lua() {
31+
unsafe {
32+
let state = luaL_newstate();
33+
assert!(state != ptr::null_mut());
34+
35+
luaL_openlibs(state);
36+
37+
let version = {
38+
lua_getglobal(state, "_VERSION\0".as_ptr().cast());
39+
to_string(state, -1)
40+
};
41+
assert_eq!(version, "Lua 5.1");
42+
43+
let jit_version = {
44+
luaL_loadstring(state, c"return jit.version".as_ptr().cast());
45+
let ret = lua_pcall(state, 0, 1, 0);
46+
assert_eq!(0, ret);
47+
to_string(state, -1)
48+
};
49+
let mut version_it = jit_version.split('.');
50+
assert_eq!(version_it.next().unwrap(), "LuaJIT 2");
51+
assert_eq!(version_it.next().unwrap(), "1");
52+
assert!(version_it.next().unwrap().parse::<u32>().is_ok());
53+
}
54+
}
55+
56+
#[test]
57+
fn test_lua52compat() {
58+
unsafe {
59+
let state = luaL_newstate();
60+
assert!(state != ptr::null_mut());
4261

43-
luaL_openlibs(state);
62+
luaL_openlibs(state);
4463

45-
let code = "
46-
lua52compat = \"no\"
47-
t = setmetatable({}, {
48-
__pairs = function(t)
49-
lua52compat = \"yes\"
50-
return next, t, nil
51-
end
52-
})
53-
for k,v in pairs(t) do end
54-
\0";
55-
let ret1 = luaL_loadstring(state, code.as_ptr().cast());
56-
assert_eq!(0, ret1);
57-
let ret2 = lua_pcall(state, 0, 0, 0);
58-
assert_eq!(0, ret2);
64+
let code = "
65+
lua52compat = \"no\"
66+
t = setmetatable({}, {
67+
__pairs = function(t)
68+
lua52compat = \"yes\"
69+
return next, t, nil
70+
end
71+
})
72+
for k,v in pairs(t) do end
73+
\0";
74+
let ret1 = luaL_loadstring(state, code.as_ptr().cast());
75+
assert_eq!(0, ret1);
76+
let ret2 = lua_pcall(state, 0, 0, 0);
77+
assert_eq!(0, ret2);
5978

60-
let lua52compat = {
61-
lua_getglobal(state, "lua52compat\0".as_ptr().cast());
62-
let mut len: c_long = 0;
63-
let lua52compat_ptr = lua_tolstring(state, -1, &mut len);
64-
slice::from_raw_parts(lua52compat_ptr as *const u8, len as usize)
65-
};
79+
let lua52compat = {
80+
lua_getglobal(state, "lua52compat\0".as_ptr().cast());
81+
to_string(state, -1)
82+
};
6683

67-
#[cfg(feature = "lua52compat")]
68-
assert_eq!(lua52compat, b"yes");
69-
#[cfg(not(feature = "lua52compat"))]
70-
assert_eq!(lua52compat, b"no");
84+
#[cfg(feature = "lua52compat")]
85+
assert_eq!(lua52compat, "yes");
86+
#[cfg(not(feature = "lua52compat"))]
87+
assert_eq!(lua52compat, "no");
88+
}
7189
}
7290
}

update.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/sh
2+
3+
set -eux
4+
5+
cd luajit2
6+
git pull
7+
git show -s --format=%ct > ../luajit_relver.txt

0 commit comments

Comments
 (0)