2020-01-25 14:25:55 -05:00
|
|
|
use std::env;
|
|
|
|
use std::ops::Bound;
|
2021-04-19 21:05:00 -04:00
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
fn get_env_var(name: &str) -> String {
|
|
|
|
match env::var(name) {
|
|
|
|
Ok(val) => val,
|
|
|
|
Err(env::VarError::NotPresent) => String::new(),
|
|
|
|
Err(err) => panic!("cannot get {}: {}", name, err),
|
|
|
|
}
|
|
|
|
}
|
2020-01-25 14:25:55 -05:00
|
|
|
|
|
|
|
pub fn probe_lua() -> PathBuf {
|
2021-04-19 21:05:00 -04:00
|
|
|
let include_dir = get_env_var("LUA_INC");
|
|
|
|
let lib_dir = get_env_var("LUA_LIB");
|
|
|
|
let lua_lib = get_env_var("LUA_LIB_NAME");
|
2020-01-25 14:25:55 -05:00
|
|
|
|
|
|
|
println!("cargo:rerun-if-env-changed=LUA_INC");
|
|
|
|
println!("cargo:rerun-if-env-changed=LUA_LIB");
|
|
|
|
println!("cargo:rerun-if-env-changed=LUA_LIB_NAME");
|
|
|
|
println!("cargo:rerun-if-env-changed=LUA_LINK");
|
|
|
|
|
2020-05-31 07:16:47 -04:00
|
|
|
let need_lua_lib = cfg!(any(not(feature = "module"), target_os = "windows"));
|
|
|
|
|
2021-04-19 21:05:00 -04:00
|
|
|
if include_dir != "" {
|
|
|
|
if need_lua_lib {
|
|
|
|
if lib_dir == "" {
|
|
|
|
panic!("LUA_LIB is not set");
|
|
|
|
}
|
|
|
|
if lua_lib == "" {
|
|
|
|
panic!("LUA_LIB_NAME is not set");
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut link_lib = "";
|
|
|
|
if get_env_var("LUA_LINK") == "static" {
|
|
|
|
link_lib = "static=";
|
|
|
|
};
|
|
|
|
println!("cargo:rustc-link-search=native={}", lib_dir);
|
|
|
|
println!("cargo:rustc-link-lib={}{}", link_lib, lua_lib);
|
2020-05-31 07:16:47 -04:00
|
|
|
}
|
2020-01-25 14:25:55 -05:00
|
|
|
return PathBuf::from(include_dir);
|
|
|
|
}
|
|
|
|
|
2020-05-31 07:16:47 -04:00
|
|
|
// Find using `pkg-config`
|
2020-01-25 14:25:55 -05:00
|
|
|
|
2020-05-08 07:42:40 -04:00
|
|
|
#[cfg(feature = "lua54")]
|
|
|
|
{
|
|
|
|
let mut lua = pkg_config::Config::new()
|
|
|
|
.range_version((Bound::Included("5.4"), Bound::Excluded("5.5")))
|
2020-05-31 07:16:47 -04:00
|
|
|
.cargo_metadata(need_lua_lib)
|
2020-05-08 07:42:40 -04:00
|
|
|
.probe("lua");
|
|
|
|
|
|
|
|
if lua.is_err() {
|
2020-05-31 07:16:47 -04:00
|
|
|
lua = pkg_config::Config::new()
|
|
|
|
.cargo_metadata(need_lua_lib)
|
|
|
|
.probe("lua5.4");
|
2020-05-08 07:42:40 -04:00
|
|
|
}
|
|
|
|
|
2020-05-12 18:34:42 -04:00
|
|
|
lua.unwrap().include_paths[0].clone()
|
2020-05-08 07:42:40 -04:00
|
|
|
}
|
|
|
|
|
2020-01-25 14:25:55 -05:00
|
|
|
#[cfg(feature = "lua53")]
|
|
|
|
{
|
|
|
|
let mut lua = pkg_config::Config::new()
|
|
|
|
.range_version((Bound::Included("5.3"), Bound::Excluded("5.4")))
|
2020-05-31 07:16:47 -04:00
|
|
|
.cargo_metadata(need_lua_lib)
|
2020-01-25 14:25:55 -05:00
|
|
|
.probe("lua");
|
|
|
|
|
|
|
|
if lua.is_err() {
|
2020-05-31 07:16:47 -04:00
|
|
|
lua = pkg_config::Config::new()
|
|
|
|
.cargo_metadata(need_lua_lib)
|
|
|
|
.probe("lua5.3");
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
2020-05-12 18:34:42 -04:00
|
|
|
lua.unwrap().include_paths[0].clone()
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(feature = "lua52")]
|
|
|
|
{
|
|
|
|
let mut lua = pkg_config::Config::new()
|
|
|
|
.range_version((Bound::Included("5.2"), Bound::Excluded("5.3")))
|
2020-05-31 07:16:47 -04:00
|
|
|
.cargo_metadata(need_lua_lib)
|
2020-01-25 14:25:55 -05:00
|
|
|
.probe("lua");
|
|
|
|
|
|
|
|
if lua.is_err() {
|
2020-05-31 07:16:47 -04:00
|
|
|
lua = pkg_config::Config::new()
|
|
|
|
.cargo_metadata(need_lua_lib)
|
|
|
|
.probe("lua5.2");
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
2020-05-12 18:34:42 -04:00
|
|
|
lua.unwrap().include_paths[0].clone()
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(feature = "lua51")]
|
|
|
|
{
|
|
|
|
let mut lua = pkg_config::Config::new()
|
|
|
|
.range_version((Bound::Included("5.1"), Bound::Excluded("5.2")))
|
2020-05-31 07:16:47 -04:00
|
|
|
.cargo_metadata(need_lua_lib)
|
2020-01-25 14:25:55 -05:00
|
|
|
.probe("lua");
|
|
|
|
|
|
|
|
if lua.is_err() {
|
2020-05-31 07:16:47 -04:00
|
|
|
lua = pkg_config::Config::new()
|
|
|
|
.cargo_metadata(need_lua_lib)
|
|
|
|
.probe("lua5.1");
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
2020-05-12 18:34:42 -04:00
|
|
|
lua.unwrap().include_paths[0].clone()
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(feature = "luajit")]
|
|
|
|
{
|
|
|
|
let lua = pkg_config::Config::new()
|
2020-05-16 10:13:38 -04:00
|
|
|
.range_version((Bound::Included("2.0.5"), Bound::Unbounded))
|
2020-05-31 07:16:47 -04:00
|
|
|
.cargo_metadata(need_lua_lib)
|
2020-01-25 14:25:55 -05:00
|
|
|
.probe("luajit");
|
|
|
|
|
2020-05-12 18:34:42 -04:00
|
|
|
lua.unwrap().include_paths[0].clone()
|
2020-01-25 14:25:55 -05:00
|
|
|
}
|
|
|
|
}
|