From 1807fa789ca8b19a86de4465bb26aa47715cdc4f Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sat, 7 May 2022 16:20:57 +0100 Subject: [PATCH] Don't require Lua sources for modules in build system --- .github/workflows/main.yml | 10 +++---- Cargo.toml | 2 -- build/find_dummy.rs | 2 +- build/find_normal.rs | 2 ++ build/find_vendored.rs | 3 +- build/main.rs | 4 +++ examples/module/Cargo.toml | 3 +- examples/module/src/lib.rs | 22 -------------- tests/module/.cargo/config | 13 +++++---- tests/module/Cargo.toml | 13 +++++++-- tests/module/loader/.cargo/config | 8 +++++ tests/module/loader/Cargo.toml | 16 ++++++++++ tests/module/{ => loader}/tests/load.rs | 0 tests/module/src/lib.rs | 39 +++++++++++++++++++++++++ 14 files changed, 97 insertions(+), 40 deletions(-) create mode 100644 tests/module/loader/.cargo/config create mode 100644 tests/module/loader/Cargo.toml rename tests/module/{ => loader}/tests/load.rs (100%) create mode 100644 tests/module/src/lib.rs diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c28d1b8..10133f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,7 +39,7 @@ jobs: build_aarch64_cross_macos: name: Cross-compile to aarch64-apple-darwin - runs-on: macos-11.0 + runs-on: macos-latest needs: build strategy: matrix: @@ -186,8 +186,8 @@ jobs: - uses: Swatinem/rust-cache@v1 - name: Run ${{ matrix.lua }} module tests run: | - (cd examples/module && cargo build --release --features "${{ matrix.lua }},vendored") - (cd tests/module && cargo test --release --features "${{ matrix.lua }},vendored") + (cd tests/module && cargo build --release --features "${{ matrix.lua }}") + (cd tests/module/loader && cargo test --release --features "${{ matrix.lua }},vendored") shell: bash test_modules_windows: @@ -208,8 +208,8 @@ jobs: pacman -S --noconfirm mingw-w64-x86_64-rust mingw-w64-x86_64-lua mingw-w64-x86_64-luajit mingw-w64-x86_64-pkg-config - name: Run ${{ matrix.lua }} module tests run: | - (cd examples/module && cargo build --release --features "${{ matrix.lua }}") - (cd tests/module && cargo test --release --features "${{ matrix.lua }}") + (cd tests/module && cargo build --release --features "${{ matrix.lua }}") + (cd tests/module/loader && cargo test --release --features "${{ matrix.lua }}") rustfmt: name: Rustfmt diff --git a/Cargo.toml b/Cargo.toml index c2c9c02..fb8a957 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,8 +23,6 @@ rustdoc-args = ["--cfg", "docsrs"] [workspace] members = [ "mlua_derive", - "examples/module", - "tests/module", ] [features] diff --git a/build/find_dummy.rs b/build/find_dummy.rs index 70aab9f..d8ad44b 100644 --- a/build/find_dummy.rs +++ b/build/find_dummy.rs @@ -1,5 +1,5 @@ use std::path::PathBuf; pub fn probe_lua() -> Option { - unreachable!() + None } diff --git a/build/find_normal.rs b/build/find_normal.rs index 709fc1b..3e72609 100644 --- a/build/find_normal.rs +++ b/build/find_normal.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + use std::env; use std::ops::Bound; use std::path::PathBuf; diff --git a/build/find_vendored.rs b/build/find_vendored.rs index d516dfd..5b7b8e1 100644 --- a/build/find_vendored.rs +++ b/build/find_vendored.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + use std::path::PathBuf; pub fn probe_lua() -> Option { @@ -20,7 +22,6 @@ pub fn probe_lua() -> Option { #[cfg(feature = "luau")] let artifacts = luau0_src::Build::new().build(); - #[cfg(not(feature = "module"))] artifacts.print_cargo_metadata(); Some(artifacts.include_dir().to_owned()) diff --git a/build/main.rs b/build/main.rs index bdbe664..5cb979a 100644 --- a/build/main.rs +++ b/build/main.rs @@ -105,6 +105,10 @@ fn main() { + "Please, use `pkg-config` or custom mode to link to a Lua dll." ); + #[cfg(all(feature = "luau", feature = "module"))] + compile_error!("Luau does not support module mode"); + + #[cfg(any(not(feature = "module"), target_os = "windows"))] find::probe_lua(); println!("cargo:rerun-if-changed=build"); diff --git a/examples/module/Cargo.toml b/examples/module/Cargo.toml index 02f9a67..504c01e 100644 --- a/examples/module/Cargo.toml +++ b/examples/module/Cargo.toml @@ -7,13 +7,14 @@ edition = "2018" [lib] crate-type = ["cdylib"] +[workspace] + [features] lua54 = ["mlua/lua54"] lua53 = ["mlua/lua53"] lua52 = ["mlua/lua52"] lua51 = ["mlua/lua51"] luajit = ["mlua/luajit"] -vendored = ["mlua/vendored"] [dependencies] mlua = { path = "../..", features = ["module"] } diff --git a/examples/module/src/lib.rs b/examples/module/src/lib.rs index fdaf171..38cc0fd 100644 --- a/examples/module/src/lib.rs +++ b/examples/module/src/lib.rs @@ -8,32 +8,10 @@ fn used_memory(lua: &Lua, _: ()) -> LuaResult { Ok(lua.used_memory()) } -fn check_userdata(_: &Lua, ud: MyUserData) -> LuaResult { - Ok(ud.0) -} - #[mlua::lua_module] fn rust_module(lua: &Lua) -> LuaResult { let exports = lua.create_table()?; exports.set("sum", lua.create_function(sum)?)?; exports.set("used_memory", lua.create_function(used_memory)?)?; - exports.set("check_userdata", lua.create_function(check_userdata)?)?; Ok(exports) } - -#[derive(Clone, Copy)] -struct MyUserData(i32); - -impl LuaUserData for MyUserData {} - -#[mlua::lua_module] -fn rust_module_second(lua: &Lua) -> LuaResult { - let exports = lua.create_table()?; - exports.set("userdata", lua.create_userdata(MyUserData(123))?)?; - Ok(exports) -} - -#[mlua::lua_module] -fn rust_module_error(_: &Lua) -> LuaResult { - Err("custom module error".to_lua_err()) -} diff --git a/tests/module/.cargo/config b/tests/module/.cargo/config index 6d87dde..d47f983 100644 --- a/tests/module/.cargo/config +++ b/tests/module/.cargo/config @@ -1,8 +1,11 @@ [target.x86_64-apple-darwin] -rustflags = ["-C", "link-args=-rdynamic"] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] [target.aarch64-apple-darwin] -rustflags = ["-C", "link-args=-rdynamic"] - -[target.x86_64-unknown-linux-gnu] -rustflags = ["-C", "link-args=-rdynamic"] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] diff --git a/tests/module/Cargo.toml b/tests/module/Cargo.toml index 0a3374f..adf98d9 100644 --- a/tests/module/Cargo.toml +++ b/tests/module/Cargo.toml @@ -1,16 +1,23 @@ [package] -name = "module_runner" +name = "rust_module" version = "0.0.0" authors = ["Aleksandr Orlenko "] edition = "2018" +[lib] +crate-type = ["cdylib"] + +[workspace] +members = [ + "loader", +] + [features] lua54 = ["mlua/lua54"] lua53 = ["mlua/lua53"] lua52 = ["mlua/lua52"] lua51 = ["mlua/lua51"] luajit = ["mlua/luajit"] -vendored = ["mlua/vendored"] [dependencies] -mlua = { path = "../.." } +mlua = { path = "../..", features = ["module"] } diff --git a/tests/module/loader/.cargo/config b/tests/module/loader/.cargo/config new file mode 100644 index 0000000..6d87dde --- /dev/null +++ b/tests/module/loader/.cargo/config @@ -0,0 +1,8 @@ +[target.x86_64-apple-darwin] +rustflags = ["-C", "link-args=-rdynamic"] + +[target.aarch64-apple-darwin] +rustflags = ["-C", "link-args=-rdynamic"] + +[target.x86_64-unknown-linux-gnu] +rustflags = ["-C", "link-args=-rdynamic"] diff --git a/tests/module/loader/Cargo.toml b/tests/module/loader/Cargo.toml new file mode 100644 index 0000000..180b2e9 --- /dev/null +++ b/tests/module/loader/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "module_loader" +version = "0.0.0" +authors = ["Aleksandr Orlenko "] +edition = "2018" + +[features] +lua54 = ["mlua/lua54"] +lua53 = ["mlua/lua53"] +lua52 = ["mlua/lua52"] +lua51 = ["mlua/lua51"] +luajit = ["mlua/luajit"] +vendored = ["mlua/vendored"] + +[dependencies] +mlua = { path = "../../.." } diff --git a/tests/module/tests/load.rs b/tests/module/loader/tests/load.rs similarity index 100% rename from tests/module/tests/load.rs rename to tests/module/loader/tests/load.rs diff --git a/tests/module/src/lib.rs b/tests/module/src/lib.rs new file mode 100644 index 0000000..fdaf171 --- /dev/null +++ b/tests/module/src/lib.rs @@ -0,0 +1,39 @@ +use mlua::prelude::*; + +fn sum(_: &Lua, (a, b): (i64, i64)) -> LuaResult { + Ok(a + b) +} + +fn used_memory(lua: &Lua, _: ()) -> LuaResult { + Ok(lua.used_memory()) +} + +fn check_userdata(_: &Lua, ud: MyUserData) -> LuaResult { + Ok(ud.0) +} + +#[mlua::lua_module] +fn rust_module(lua: &Lua) -> LuaResult { + let exports = lua.create_table()?; + exports.set("sum", lua.create_function(sum)?)?; + exports.set("used_memory", lua.create_function(used_memory)?)?; + exports.set("check_userdata", lua.create_function(check_userdata)?)?; + Ok(exports) +} + +#[derive(Clone, Copy)] +struct MyUserData(i32); + +impl LuaUserData for MyUserData {} + +#[mlua::lua_module] +fn rust_module_second(lua: &Lua) -> LuaResult { + let exports = lua.create_table()?; + exports.set("userdata", lua.create_userdata(MyUserData(123))?)?; + Ok(exports) +} + +#[mlua::lua_module] +fn rust_module_error(_: &Lua) -> LuaResult { + Err("custom module error".to_lua_err()) +}