Sfoglia il codice sorgente

feat(cli.rs): fill debian `depends` with tauri dependencies (#1767)

Lucas Fernandes Nogueira 4 anni fa
parent
commit
72b8048b5a

+ 5 - 0
.changes/debian-depends.md

@@ -0,0 +1,5 @@
+---
+"cli.rs": patch
+---
+
+Automatically add Tauri dependencies to the debian package `Depends` section.

+ 2 - 2
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);
 

+ 23 - 4
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<BundleSettings> {
+  pub fn get_bundle_settings(
+    &self,
+    config: &Config,
+    manifest: &Manifest,
+  ) -> crate::Result<BundleSettings> {
     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<crate::helpers::config::SystemTrayConfig>,
   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,
     },

+ 33 - 6
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<String>,
+}
+
+fn features_to_vec(features: &Array) -> Vec<String> {
+  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<Manifest> {
   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),
+  })
 }