From 9b2b47ae3a4f5a5c8d644198742775f4d70c846c Mon Sep 17 00:00:00 2001
From: Nikos Skalkotos <skalkoto@grnet.gr>
Date: Mon, 6 Jan 2014 19:35:32 +0200
Subject: [PATCH] Make winexe an optional dependency

Check the presence of the winexe executable at runtime only if the
input media is a Windows system
---
 image_creator/os_type/windows.py | 5 +++++
 image_creator/winexe.py          | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/image_creator/os_type/windows.py b/image_creator/os_type/windows.py
index 7c4c127..b758e03 100644
--- a/image_creator/os_type/windows.py
+++ b/image_creator/os_type/windows.py
@@ -139,6 +139,11 @@ class Windows(OSBase):
             raise FatalError(
                 'For windows support libguestfs 1.16.11 or above is required')
 
+        # Check if winexe is installed
+        if not WinEXE.is_installed():
+            raise FatalError(
+                "For windows support `Winexe' needs to be installed")
+
         device = self.image.g.part_to_dev(self.root)
 
         self.last_part_num = self.image.g.part_list(device)[-1]['part_num']
diff --git a/image_creator/winexe.py b/image_creator/winexe.py
index ebac409..b6c00bc 100644
--- a/image_creator/winexe.py
+++ b/image_creator/winexe.py
@@ -38,6 +38,7 @@
 import subprocess
 import time
 import signal
+import distutils
 
 from image_creator.util import FatalError
 
@@ -50,6 +51,10 @@ class WinexeTimeout(FatalError):
 class WinEXE:
     """Wrapper class for the winexe command"""
 
+    @staticmethod
+    def is_installed(program='winexe'):
+        return distutils.spawn.find_executable(program) is not None
+
     def __init__(self, username, password, hostname, program='winexe'):
         self._host = hostname
         self._user = username
-- 
GitLab