summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Cargo.toml2
-rw-r--r--build.rs64
-rw-r--r--setup/windows/setup_jv_cli_template.iss6
4 files changed, 72 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index a3e2496..e00561c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@
# Compile info
/src/data/compile_info.rs
+
+# Setup script
+/setup/windows/setup_jv_cli.iss
diff --git a/Cargo.toml b/Cargo.toml
index 92ed9ed..524c96a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -2,6 +2,8 @@
name = "just_enough_vcs_cli"
edition = "2024"
build = "build.rs"
+authors = ["JustEnoughVCS Team"]
+homepage = "http://jvcs.cc/"
[workspace]
members = ["crates/build_helper"]
diff --git a/build.rs b/build.rs
index 04fcd71..e215418 100644
--- a/build.rs
+++ b/build.rs
@@ -7,12 +7,76 @@ const COMPILE_INFO_RS_TEMPLATE: &str = "./src/data/compile_info.rs.template";
fn main() {
let repo_root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
+ // Only generate installer script on Windows
+ if cfg!(target_os = "windows") {
+ if let Err(e) = generate_installer_script(&repo_root) {
+ eprintln!("Failed to generate installer script: {}", e);
+ std::process::exit(1);
+ }
+ }
+
if let Err(e) = generate_compile_info(&repo_root) {
eprintln!("Failed to generate compile info: {}", e);
std::process::exit(1);
}
}
+/// Generate Inno Setup installer script (Windows only)
+fn generate_installer_script(repo_root: &PathBuf) -> Result<(), Box<dyn std::error::Error>> {
+ let template_path = repo_root.join("setup/windows/setup_jv_cli_template.iss");
+ let output_path = repo_root.join("setup/windows/setup_jv_cli.iss");
+
+ let template = std::fs::read_to_string(&template_path)?;
+
+ let author = get_author()?;
+ let version = get_version();
+ let site = get_site()?;
+
+ let generated = template
+ .replace("<<<AUTHOR>>>", &author)
+ .replace("<<<VERSION>>>", &version)
+ .replace("<<<SITE>>>", &site);
+
+ std::fs::write(output_path, generated)?;
+ Ok(())
+}
+
+fn get_author() -> Result<String, Box<dyn std::error::Error>> {
+ let cargo_toml_path = std::path::Path::new("Cargo.toml");
+ let cargo_toml_content = std::fs::read_to_string(cargo_toml_path)?;
+ let cargo_toml: toml::Value = toml::from_str(&cargo_toml_content)?;
+
+ if let Some(package) = cargo_toml.get("package") {
+ if let Some(authors) = package.get("authors") {
+ if let Some(authors_array) = authors.as_array() {
+ if let Some(first_author) = authors_array.get(0) {
+ if let Some(author_str) = first_author.as_str() {
+ return Ok(author_str.to_string());
+ }
+ }
+ }
+ }
+ }
+
+ Err("Author not found in Cargo.toml".into())
+}
+
+fn get_site() -> Result<String, Box<dyn std::error::Error>> {
+ let cargo_toml_path = std::path::Path::new("Cargo.toml");
+ let cargo_toml_content = std::fs::read_to_string(cargo_toml_path)?;
+ let cargo_toml: toml::Value = toml::from_str(&cargo_toml_content)?;
+
+ if let Some(package) = cargo_toml.get("package") {
+ if let Some(homepage) = package.get("homepage") {
+ if let Some(site_str) = homepage.as_str() {
+ return Ok(site_str.to_string());
+ }
+ }
+ }
+
+ Err("Homepage not found in Cargo.toml".into())
+}
+
/// Generate compile info
fn generate_compile_info(repo_root: &PathBuf) -> Result<(), Box<dyn std::error::Error>> {
// Read the template code
diff --git a/setup/windows/setup_jv_cli_template.iss b/setup/windows/setup_jv_cli_template.iss
index 24b2a32..124d897 100644
--- a/setup/windows/setup_jv_cli_template.iss
+++ b/setup/windows/setup_jv_cli_template.iss
@@ -1,7 +1,7 @@
#define MyAppName "JustEnoughVCS"
-#define MyAppVersion "0.1.0"
-#define MyAppPublisher "JustEnoughVCS Team"
-#define MyAppURL "https://jvcs.cc/"
+#define MyAppVersion "<<<VERSION>>>"
+#define MyAppPublisher "<<<AUTHOR>>>"
+#define MyAppURL "<<<SITE>>>"
[Setup]
AppId={{8265DF21-F290-487E-9403-C2730EC31A03}