[gnome-boxes/restore-efi-support: 1/2] Revert "Revert the UEFI series"



commit 4792d39ea5cb7bb2e17b2aac9843aa643896bb58
Author: Felipe Borges <felipeborges gnome org>
Date:   Tue Nov 26 14:35:55 2019 +0100

    Revert "Revert the UEFI series"
    
    This reverts commit 0ff259ccaeb858bf30a6acc6bfb1cf5617b1797a.

 build-aux/flatpak/org.gnome.Boxes.json | 10 ++++------
 meson_options.txt                      |  5 +++++
 src/installer-media.vala               | 14 ++++++++++++++
 src/meson.build                        |  3 +++
 src/vm-configurator.vala               | 33 ++++++++++++++++++++++++++++++---
 src/vm-creator.vala                    |  3 ++-
 6 files changed, 58 insertions(+), 10 deletions(-)
---
diff --git a/build-aux/flatpak/org.gnome.Boxes.json b/build-aux/flatpak/org.gnome.Boxes.json
index cd7cc5b8..5a3eea70 100644
--- a/build-aux/flatpak/org.gnome.Boxes.json
+++ b/build-aux/flatpak/org.gnome.Boxes.json
@@ -173,9 +173,8 @@
             "name" : "libvirt-glib",
             "sources" : [
                 {
-                    "type" : "archive",
-                    "url" : "http://libvirt.org/sources/glib/libvirt-glib-2.0.0.tar.gz";,
-                    "sha256" : "94e8c410c67501303d3b32ca8ce2c36edf898511ec4de9b7f29cd35d274b3d6a"
+                    "type" : "git",
+                    "url": "https://libvirt.org/git/libvirt-glib.git";
                 }
             ]
         },
@@ -422,9 +421,8 @@
             "name" : "libosinfo",
             "sources" : [
                 {
-                    "type" : "archive",
-                    "url" : "https://releases.pagure.org/libosinfo/libosinfo-1.4.0.tar.gz";,
-                    "sha256": "a29e61a82b1a5727b145403914812273dfa033a0c07a15500078726bb3b84165"
+                    "type" : "git",
+                    "url" : "https://gitlab.com/libosinfo/libosinfo.git";
                 },
                 {
                     "type" : "file",
diff --git a/meson_options.txt b/meson_options.txt
index c55a4712..a5f1be87 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -29,3 +29,8 @@ option ('profile',
   ],
   value: 'default'
 )
+
+option ('uefi',
+        type: 'boolean',
+        value: true,
+        description: 'Use UEFI whenever it is possible')
diff --git a/src/installer-media.vala b/src/installer-media.vala
index dd66c8a9..db3e2480 100644
--- a/src/installer-media.vala
+++ b/src/installer-media.vala
@@ -55,6 +55,20 @@
         }
     }
 
+    public bool supports_efi {
+        get {
+            if (os == null)
+                return false;
+
+            foreach (var iter in os.get_firmware_list (null) .get_elements ()) {
+                var firmware = iter as Firmware;
+                if (firmware.get_firmware_type () == "efi")
+                    return true;
+            }
+            return false;
+        }
+    }
+
     public bool prefers_q35 {
         get {
             if (os == null)
diff --git a/src/meson.build b/src/meson.build
index c78b8fbd..f0a3a674 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -193,6 +193,9 @@ else
   dependencies += libovf.get_variable('govf_vapi')
 endif
 
+if get_option('uefi')
+    vala_args += '--define=USE_UEFI'
+endif
 
 executable ('gnome-boxes', vala_sources + resources,
             include_directories: config_h_dir,
diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index f3ca1888..7dba8c49 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -38,7 +38,7 @@
     private const string LIBOSINFO_XML = "<libosinfo>%s</libosinfo>";
     private const string LIBOSINFO_OS_ID_XML = "<os id=\"%s\"/>";
 
-    public static Domain create_domain_config (InstallerMedia install_media, string target_path, 
Capabilities caps)
+    public static Domain create_domain_config (InstallerMedia install_media, string target_path, 
Capabilities caps, DomainCapabilities domain_caps)
                                         throws VMConfiguratorError {
         var domain = new Domain ();
 
@@ -51,7 +51,7 @@ public static Domain create_domain_config (InstallerMedia install_media, string
         var virt_type = guest_kvm_enabled (best_caps) ? DomainVirtType.KVM : DomainVirtType.QEMU;
         domain.set_virt_type (virt_type);
 
-        set_os_config (domain, install_media, best_caps);
+        set_os_config (domain, install_media, best_caps, domain_caps);
 
         string[] features = {};
         if (guest_supports_feature (best_caps, "acpi"))
@@ -368,17 +368,44 @@ private static void set_post_install_os_config (Domain domain) {
 
         os.set_arch (old_os.get_arch ());
         os.set_machine (old_os.get_machine ());
+#if USE_UEFI
+        os.set_firmware (old_os.get_firmware ());
+#endif
 
         domain.set_os (os);
     }
 
-    private static void set_os_config (Domain domain, InstallerMedia install_media, CapabilitiesGuest 
guest_caps) {
+    private static bool domain_caps_supports_efi (DomainCapabilities domain_caps) {
+        foreach (var firmware in domain_caps.get_os ().get_firmwares()) {
+            if (firmware == GVirConfig.DomainOsFirmware.EFI)
+                return true;
+        }
+
+        return false;
+    }
+
+    private static bool supports_efi (InstallerMedia install_media, DomainCapabilities domain_caps) {
+        if (install_media == null || !install_media.supports_efi)
+            return false;
+
+        if (domain_caps == null || !domain_caps_supports_efi (domain_caps))
+            return false;
+
+        return true;
+    }
+
+    private static void set_os_config (Domain domain, InstallerMedia install_media, CapabilitiesGuest 
guest_caps, DomainCapabilities domain_caps) {
         var os = new DomainOs ();
         os.set_os_type (DomainOsType.HVM);
         os.set_arch (guest_caps.get_arch ().get_name ());
         if (install_media.prefers_q35)
             os.set_machine ("q35");
 
+#if USE_UEFI
+        if (supports_efi (install_media, domain_caps))
+            os.set_firmware (GVirConfig.DomainOsFirmware.EFI);
+#endif
+
         var boot_devices = new GLib.List<DomainOsBootDevice> ();
         install_media.set_direct_boot_params (os);
         boot_devices.append (DomainOsBootDevice.CDROM);
diff --git a/src/vm-creator.vala b/src/vm-creator.vala
index 7fe0d7f6..8aa9af29 100644
--- a/src/vm-creator.vala
+++ b/src/vm-creator.vala
@@ -209,7 +209,8 @@ protected void set_post_install_config (LibvirtMachine machine) {
                                                                     StorageVol   volume,
                                                                     Cancellable? cancellable) throws 
GLib.Error {
         var caps = yield connection.get_capabilities_async (cancellable);
-        var config = VMConfigurator.create_domain_config (install_media, volume.get_path (), caps);
+        var domcaps = yield connection.get_domain_capabilities_async (null, null, null, null, 0, 
cancellable);
+        var config = VMConfigurator.create_domain_config (install_media, volume.get_path (), caps, domcaps);
         config.name = name;
         config.title = title;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]