Anki/qt/bundle/mac/src/dmg.rs
Damien Elmes ded805b504
Switch Rust import style (#2330)
* Prepare to switch Rust import style

* Run nightly format

Closes #2320

* Clean up a few imports

* Enable comment wrapping

* Wrap comments
2023-01-18 21:39:55 +10:00

51 lines
1.3 KiB
Rust

// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
use std::fs;
use std::process::Command;
use anyhow::Context;
use anyhow::Result;
use camino::Utf8Path;
use camino::Utf8PathBuf;
use clap::Args;
use crate::notarize::wait_then_staple_app;
#[derive(Args)]
pub struct BuildDmgsArgs {
qt6_dmg: Utf8PathBuf,
qt5_dmg: Option<Utf8PathBuf>,
}
pub fn make_dmgs(args: BuildDmgsArgs) -> Result<()> {
let root = Utf8Path::new("out/bundle/app");
let mut variants = vec![("std", args.qt6_dmg)];
if let Some(alt) = args.qt5_dmg {
variants.push(("alt", alt));
}
for (variant, dmg) in variants {
let app = root.join(variant).join("Anki.app");
if std::env::var("ANKI_CODESIGN").is_ok() {
let uuid = fs::read_to_string(app.with_extension("uuid")).context("read uuid")?;
wait_then_staple_app(&app, uuid)?;
}
make_dmg(&app, &dmg)?;
}
Ok(())
}
fn make_dmg(app_folder: &Utf8Path, dmg: &Utf8Path) -> Result<()> {
assert!(
Command::new("qt/bundle/mac/dmg/build.sh")
.args([app_folder.parent().unwrap().as_str(), dmg.as_str()])
.status()
.context("dmg")?
.success(),
"dmg"
);
Ok(())
}