Files
mirror/build.rs
CNWei 5e69a6a980 refactor: 迁移 winapi 到 windows-sys,修复配置解析漏洞
- 依赖替换为 windows-sys 0.61,main.rs 全面适配新 API
  - 配置解析错误显式传播:env/args 类型错误、数组空洞、非法键不再静默
  吞错
  - 修正空环境变量与空参数语义,补充 UTF-8 与路径拼接校验
  - require 容错移至 Rust 侧,模块加载失败记录日志并跳过
  - 新增配置解析与运行时单元测试(19 个)
2026-08-14 20:09:34 +08:00

47 lines
1.6 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
// CARGO_MANIFEST_DIR -> 项目根目录路径
// CARGO_TARGET_DIR -> 用户自定义了 target 目录,使用该变量
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let target_dir = env::var("CARGO_TARGET_DIR")
.ok()
.map(PathBuf::from)
.unwrap_or_else(|| PathBuf::from(&manifest_dir).join("target"));
// PROFILE -> 获取当前构建配置文件debug/release
let profile = env::var("PROFILE").unwrap();
// let output_dir = target_dir.join(&profile);
// 在 target/debug/ 或 target/release/ 下创建 bin2 目录
let output_dir = target_dir.join(&profile).join("bin2");
// cargo:rerun-if-changed -> 当指定文件变化时,重新运行 xxx
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=shims.lua");
println!("cargo:rustc-env=OUTPUT_DIR={}", output_dir.display());
// 创建目录
let subdirs = ["bin", "tools"];
for subdir in &subdirs {
let path = output_dir.join(subdir);
if !path.exists() {
fs::create_dir_all(&path).expect(&format!("Failed to create {} directory", subdir));
println!("Created: {:?}", path);
}
}
// 复制文件
let source = PathBuf::from(&manifest_dir).join("shims.lua");
let destination = output_dir.join("shims.lua");
if source.exists() {
fs::copy(&source, &destination).expect("Failed to copy shims.lua");
println!("Copied shims.lua to: {:?}", destination);
} else {
panic!("shims.lua not found at: {:?}", source);
}
}