From 72b8048b5ada7a18d71b0fd8a4a0177109b43db7 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 10 May 2021 14:10:09 -0300 Subject: [PATCH] feat(cli.rs): fill debian `depends` with tauri dependencies (#1767) --- .changes/debian-depends.md | 5 ++++ tooling/cli.rs/src/build.rs | 4 +-- tooling/cli.rs/src/build/rust.rs | 27 +++++++++++++++--- tooling/cli.rs/src/helpers/manifest.rs | 39 ++++++++++++++++++++++---- 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 .changes/debian-depends.md diff --git a/.changes/debian-depends.md b/.changes/debian-depends.md new file mode 100644 index 000000000..342b81e5f --- /dev/null +++ b/.changes/debian-depends.md @@ -0,0 +1,5 @@ +--- +"cli.rs": patch +--- + +Automatically add Tauri dependencies to the debian package `Depends` section. diff --git a/tooling/cli.rs/src/build.rs b/tooling/cli.rs/src/build.rs index 4254ec69c..45bda08e6 100644 --- a/tooling/cli.rs/src/build.rs +++ b/tooling/cli.rs/src/build.rs @@ -70,7 +70,7 @@ impl Build { let tauri_path = tauri_dir(); set_current_dir(&tauri_path).with_context(|| "failed to change current working directory")?; - rewrite_manifest(config.clone())?; + let manifest = rewrite_manifest(config.clone())?; let config_guard = config.lock().unwrap(); let config_ = config_guard.as_ref().unwrap(); @@ -150,7 +150,7 @@ impl Build { } let mut settings_builder = SettingsBuilder::new() .package_settings(app_settings.get_package_settings()) - .bundle_settings(app_settings.get_bundle_settings(&config_)?) + .bundle_settings(app_settings.get_bundle_settings(&config_, &manifest)?) .binaries(app_settings.get_binaries(&config_)?) .project_out_directory(out_dir); diff --git a/tooling/cli.rs/src/build/rust.rs b/tooling/cli.rs/src/build/rust.rs index 79b4fe6f3..6141c068c 100644 --- a/tooling/cli.rs/src/build/rust.rs +++ b/tooling/cli.rs/src/build/rust.rs @@ -13,7 +13,7 @@ use std::{ use anyhow::Context; use serde::Deserialize; -use crate::helpers::{app_paths::tauri_dir, config::Config}; +use crate::helpers::{app_paths::tauri_dir, config::Config, manifest::Manifest}; use tauri_bundler::{ AppCategory, BundleBinary, BundleSettings, DebianSettings, MacOsSettings, PackageSettings, UpdaterSettings, WindowsSettings, @@ -163,8 +163,13 @@ impl AppSettings { &self.cargo_package_settings } - pub fn get_bundle_settings(&self, config: &Config) -> crate::Result { + pub fn get_bundle_settings( + &self, + config: &Config, + manifest: &Manifest, + ) -> crate::Result { tauri_config_to_bundle_settings( + manifest, config.tauri.bundle.clone(), config.tauri.system_tray.clone(), config.tauri.updater.clone(), @@ -336,6 +341,7 @@ pub fn get_workspace_dir(current_dir: &Path) -> PathBuf { } fn tauri_config_to_bundle_settings( + manifest: &Manifest, config: crate::helpers::config::BundleConfig, system_tray_config: Option, updater_config: crate::helpers::config::UpdaterConfig, @@ -353,12 +359,21 @@ fn tauri_config_to_bundle_settings( #[allow(unused_mut)] let mut resources = config.resources.unwrap_or_default(); + #[allow(unused_mut)] + let mut depends = config.deb.depends.unwrap_or_default(); + #[cfg(target_os = "linux")] { if let Some(system_tray_config) = &system_tray_config { let mut icon_path = system_tray_config.icon_path.clone(); icon_path.set_extension("png"); - resources.push(icon_path.to_string_lossy().to_string()); + depends.push("libappindicator3-1".to_string()); + } + + depends.push("libwebkit2gtk-4.0".to_string()); + depends.push("libgtk-3-0".to_string()); + if manifest.features.contains(&"menu".into()) || system_tray_config.is_some() { + depends.push("libgtksourceview-3.0-1".to_string()); } } @@ -382,7 +397,11 @@ fn tauri_config_to_bundle_settings( long_description: config.long_description, external_bin: config.external_bin, deb: DebianSettings { - depends: config.deb.depends, + depends: if depends.is_empty() { + None + } else { + Some(depends) + }, use_bootstrapper: Some(config.deb.use_bootstrapper), files: config.deb.files, }, diff --git a/tooling/cli.rs/src/helpers/manifest.rs b/tooling/cli.rs/src/helpers/manifest.rs index 30a78c280..4ce2048de 100644 --- a/tooling/cli.rs/src/helpers/manifest.rs +++ b/tooling/cli.rs/src/helpers/manifest.rs @@ -12,7 +12,21 @@ use std::{ io::{Read, Write}, }; -pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { +pub struct Manifest { + pub features: Vec, +} + +fn features_to_vec(features: &Array) -> Vec { + let mut string_features = Vec::new(); + for feat in features.iter() { + if let Value::String(feature) = feat { + string_features.push(feature.value().to_string()); + } + } + string_features +} + +pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result { let manifest_path = tauri_dir().join("Cargo.toml"); let mut manifest_str = String::new(); let mut manifest_file = File::open(&manifest_path) @@ -49,7 +63,16 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { if let Some(tauri) = tauri_entry.as_table_mut() { let manifest_features = tauri.entry("features"); - *manifest_features = Item::Value(Value::Array(features)); + if let Item::Value(Value::Array(f)) = &manifest_features { + for feat in f.iter() { + if let Value::String(feature) = feat { + if feature.value() == "menu" { + features.push("menu").unwrap(); + } + } + } + } + *manifest_features = Item::Value(Value::Array(features.clone())); } else if let Some(tauri) = tauri_entry.as_value_mut() { match tauri { Value::InlineTable(table) => { @@ -63,7 +86,7 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { } } } - *manifest_features = Value::Array(features); + *manifest_features = Value::Array(features.clone()); } Value::String(version) => { let mut def = InlineTable::default(); @@ -71,7 +94,7 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { "version", version.to_string().replace("\"", "").replace(" ", ""), ); - def.get_or_insert("features", Value::Array(features)); + def.get_or_insert("features", Value::Array(features.clone())); *tauri = Value::InlineTable(def); } _ => { @@ -81,7 +104,9 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { } } } else { - return Ok(()); + return Ok(Manifest { + features: features_to_vec(&features), + }); } let mut manifest_file = @@ -98,5 +123,7 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> { )?; manifest_file.flush()?; - Ok(()) + Ok(Manifest { + features: features_to_vec(&features), + }) }