extern crate cc;
use cc::Build;
use std::process::Command;
#[cfg(target_os = "macos")]
fn os_cmd(cmd: &mut Command) -> &mut Command { cmd.arg("-lreadline") }
#[cfg(target_os = "macos")]
fn os_build(build: &mut Build) -> &mut Build { build.define("LUA_USE_MACOSX", None) }
#[cfg(target_os = "linux")]
fn os_cmd(cmd: &mut Command) -> &mut Command { cmd.arg("-ldl").arg("-lreadline") }
#[cfg(target_os = "linux")]
fn os_build(build: &mut Build) -> &mut Build { build.define("LUA_USE_LINUX", None) }
#[cfg(not(any(target_os = "macos", target_os = "linux")))]
fn os_cmd(cmd: &mut Command) -> &mut Command { cmd }
#[cfg(not(any(target_os = "macos", target_os = "linux")))]
fn os_build(build: &mut Build) -> &mut Build { build }
fn main() {
let out_dir_s = std::env::var_os("OUT_DIR").unwrap();
let out_dir = std::path::Path::new(&out_dir_s);
let debug = std::env::var("PROFILE").unwrap() == "debug";
let mut build = Build::new();
build.include("puc-lua/src");
os_build(&mut build);
if debug {
build.define("LUA_USER_H", Some("\"tests/ltests/ltests.h\""));
}
let cc = build.get_compiler();
let mut luac_c = cc.to_command();
if debug {
build.file("puc-lua/src/tests/ltests/ltests.c");
}
build.file("puc-lua/src/lapi.c");
build.file("puc-lua/src/lcode.c");
build.file("puc-lua/src/lctype.c");
build.file("puc-lua/src/ldebug.c");
build.file("puc-lua/src/ldo.c");
build.file("puc-lua/src/ldump.c");
build.file("puc-lua/src/lfunc.c");
build.file("puc-lua/src/lgc.c");
build.file("puc-lua/src/llex.c");
build.file("puc-lua/src/lmem.c");
build.file("puc-lua/src/lobject.c");
build.file("puc-lua/src/lopcodes.c");
build.file("puc-lua/src/lparser.c");
build.file("puc-lua/src/lstate.c");
build.file("puc-lua/src/lstring.c");
build.file("puc-lua/src/ltable.c");
build.file("puc-lua/src/ltm.c");
build.file("puc-lua/src/lundump.c");
build.file("puc-lua/src/lvm.c");
build.file("puc-lua/src/lzio.c");
build.file("puc-lua/src/lauxlib.c");
build.file("puc-lua/src/lbaselib.c");
build.file("puc-lua/src/lcorolib.c");
build.file("puc-lua/src/ldblib.c");
build.file("puc-lua/src/liolib.c");
build.file("puc-lua/src/lmathlib.c");
build.file("puc-lua/src/loslib.c");
build.file("puc-lua/src/lstrlib.c");
build.file("puc-lua/src/ltablib.c");
build.file("puc-lua/src/lutf8lib.c");
build.file("puc-lua/src/loadlib.c");
build.file("puc-lua/src/linit.c");
build.compile("lua");
luac_c.arg("puc-lua/src/luac.c");
if cc.is_like_gnu() || cc.is_like_clang() {
os_cmd(luac_c.arg(out_dir.join("liblua.a")).arg("-o").arg(out_dir.join("luac")).arg("-lm"));
}
assert!(luac_c.status().unwrap().success());
for entry in std::fs::read_dir("puc-lua/src").unwrap() {
println!("cargo:rerun-if-changed={}", entry.unwrap().path().display());
}
}