use std::path::PathBuf;
use anyhow::Result;
pub fn run(
platform: &str,
path: Option<&str>,
out: Option<&str>,
binary: Option<&str>,
skip_python_check: bool,
no_bundle_python: bool,
) -> Result<()> {
let cwd = std::env::current_dir()?;
let start = match path {
Some(p) => {
let pb = PathBuf::from(p);
if pb.is_absolute() {
pb
} else {
cwd.join(pb)
}
}
None => cwd,
};
let root = pite_project::find_project_root(&start).ok_or_else(|| {
anyhow::anyhow!(
"no {} found above {}; run inside a project or pass --path",
pite_project::MANIFEST_FILE,
start.display()
)
})?;
let report = pite_export::export_project(
&root,
&pite_export::ExportOptions {
platform: platform.to_string(),
out_dir: out.map(PathBuf::from),
binary: binary.map(PathBuf::from),
skip_python_check,
bundle_python: !no_bundle_python,
},
)?;
println!("exported to {}", report.out_dir.display());
println!("binary: {}", report.binary.display());
println!("files: {}", report.files.len() + 1);
match &report.python {
pite_export::PythonChoice::Bundled { zip } => {
println!("python: bundled ({})", zip.display());
}
pite_export::PythonChoice::System => println!("python: system CPython 3.12 required"),
}
if platform == "windows" {
println!("next: run {}\\run.bat", report.out_dir.display());
} else {
println!("next: run {}/run.sh", report.out_dir.display());
}
Ok(())
}