feat: Allow external build scripts to link Lua libraries (#529)

Allow external build scripts to link Lua libraries
This commit is contained in:
Sculas
2025-07-08 11:30:26 +02:00
committed by GitHub
parent d8455c038a
commit 04aaa18dc8
2 changed files with 20 additions and 12 deletions
+1
View File
@@ -30,6 +30,7 @@ luau = ["luau0-src"]
luau-codegen = ["luau"]
luau-vector4 = ["luau"]
vendored = ["lua-src", "luajit-src"]
external = []
module = []
[dependencies]
+19 -12
View File
@@ -14,22 +14,29 @@ fn main() {
#[cfg(all(feature = "luau", feature = "module", windows))]
compile_error!("Luau does not support `module` mode on Windows");
#[cfg(all(feature = "module", feature = "vendored"))]
compile_error!("`vendored` and `module` features are mutually exclusive");
#[cfg(any(
all(feature = "vendored", any(feature = "external", feature = "module")),
all(feature = "external", any(feature = "vendored", feature = "module")),
all(feature = "module", any(feature = "vendored", feature = "external"))
))]
compile_error!("`vendored`, `external` and `module` features are mutually exclusive");
println!("cargo:rerun-if-changed=build");
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
if target_os == "windows" && cfg!(feature = "module") {
if !std::env::var("LUA_LIB_NAME").unwrap_or_default().is_empty() {
// Don't use raw-dylib linking
find::probe_lua();
return;
// Check if compilation and linking is handled by external crate
if !cfg!(feature = "external") {
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
if target_os == "windows" && cfg!(feature = "module") {
if !std::env::var("LUA_LIB_NAME").unwrap_or_default().is_empty() {
// Don't use raw-dylib linking
find::probe_lua();
return;
}
println!("cargo:rustc-cfg=raw_dylib");
}
println!("cargo:rustc-cfg=raw_dylib");
#[cfg(not(feature = "module"))]
find::probe_lua();
}
#[cfg(not(feature = "module"))]
find::probe_lua();
}