chmmod-create 0.2.0

一個用於快速建立 CHM 插件模組的命令列工具
use std::env;

fn main() {
    if cfg!(target_os = "windows") {
        let mut res = winres::WindowsResource::new();
        let pkg_name = env::var("CARGO_PKG_NAME").unwrap_or_else(|_| "Unknown".to_string());
        let pkg_version = env::var("CARGO_PKG_VERSION").unwrap_or_else(|_| "0.0.0".to_string());
        let pkg_authors = env::var("CARGO_PKG_AUTHORS").unwrap_or_else(|_| "Unknown".to_string());
        let pkg_description = env::var("CARGO_PKG_DESCRIPTION").unwrap_or_else(|_| "".to_string());
        res.set("FileDescription", &pkg_description);
        res.set("ProductName", &pkg_name);
        res.set("OriginalFilename", &format!("{}.exe", pkg_name));
        res.set("CompanyName", &pkg_authors);
        res.set("LegalCopyright", "Copyright © 2025");
        let version_parts: Vec<u16> = pkg_version
            .split('.')
            .take(3)
            .map(|s| {
                s.chars()
                    .take_while(|c| c.is_ascii_digit())
                    .collect::<String>()
                    .parse::<u16>()
                    .unwrap_or(0)
            })
            .collect();

        let (major, minor, patch, revision) = match version_parts.as_slice() {
            [major, minor, patch] => (*major, *minor, *patch, 0),
            [major, minor] => (*major, *minor, 0, 0),
            _ => (0, 0, 0, 0),
        };
        let major_minor = ((major as u32) << 16) | (minor as u32);
        let patch_revision = ((patch as u32) << 16) | (revision as u32);
        let version_number = ((major_minor as u64) << 32) | (patch_revision as u64);
        res.set_version_info(winres::VersionInfo::PRODUCTVERSION, version_number);
        res.set_version_info(winres::VersionInfo::FILEVERSION, version_number);
        res.set_icon("icon.ico");
        res.compile().expect("Failed to compile Windows resources");
    }
}