diff --git a/gns3server/modules/qemu/__init__.py b/gns3server/modules/qemu/__init__.py index 7d0b5efd..ba40f028 100644 --- a/gns3server/modules/qemu/__init__.py +++ b/gns3server/modules/qemu/__init__.py @@ -19,6 +19,7 @@ QEMU server module. """ +import sys import os import socket import shutil @@ -43,15 +44,6 @@ from .schemas import QEMU_ALLOCATE_UDP_PORT_SCHEMA from .schemas import QEMU_ADD_NIO_SCHEMA from .schemas import QEMU_DELETE_NIO_SCHEMA -QEMU_BINARIES = ["qemu.exe", - "qemu-system-arm", - "qemu-system-mips", - "qemu-system-ppc", - "qemu-system-sparc", - "qemu-system-x86", - "qemu-system-i386", - "qemu-system-x86_64"] - import logging log = logging.getLogger(__name__) @@ -603,6 +595,8 @@ class Qemu(IModule): :param qemu_path: path to Qemu """ + if sys.platform.startswith("win"): + return "" try: output = subprocess.check_output([qemu_path, "--version"]) match = re.search("QEMU emulator version ([0-9a-z\-\.]+)", output.decode("utf-8")) @@ -627,15 +621,22 @@ class Qemu(IModule): qemus = [] paths = [os.getcwd()] + os.environ["PATH"].split(":") # look for Qemu binaries in the current working directory and $PATH + if sys.platform.startswith("win"): + # add specific Windows paths + paths.append(os.path.join(os.getcwd(), "qemu")) + if "PROGRAMFILES(X86)" in os.environ and os.path.exists(os.environ["PROGRAMFILES(X86)"]): + paths.append(os.path.join(os.environ["PROGRAMFILES(X86)"], "qemu")) + if "PROGRAMFILES" in os.environ and os.path.exists(os.environ["PROGRAMFILES"]): + paths.append(os.path.join(os.environ["PROGRAMFILES"], "qemu")) for path in paths: - for qemu_binary in QEMU_BINARIES: - try: - if qemu_binary in os.listdir(path) and os.access(os.path.join(path, qemu_binary), os.X_OK): - qemu_path = os.path.join(path, qemu_binary) + try: + for f in os.listdir(path): + if f.startswith("qemu-system") and os.access(os.path.join(path, f), os.X_OK): + qemu_path = os.path.join(path, f) version = self._get_qemu_version(qemu_path) qemus.append({"path": qemu_path, "version": version}) - except OSError: - continue + except OSError: + continue response = {"server": self._host, "qemus": qemus}