''' Downloads and extracts WiX to a local directory ''' __author__ = 'Steve Dower ' import io import os import sys from pathlib import Path from subprocess import Popen from zipfile import ZipFile EXTERNALS_DIR = None for p in (Path.cwd() / __file__).parents: if any(p.glob("PCBuild/*.vcxproj")): EXTERNALS_DIR = p / "externals" break if not EXTERNALS_DIR: print("Cannot find project root") sys.exit(1) WIX_BINARIES_ZIP = 'http://wixtoolset.org/downloads/v3.10.0.1823/wix310-binaries.zip' TARGET_BIN_ZIP = EXTERNALS_DIR / "wix.zip" TARGET_BIN_DIR = EXTERNALS_DIR / "wix" POWERSHELL_COMMAND = "[IO.File]::WriteAllBytes('{}', (Invoke-WebRequest {} -UseBasicParsing).Content)" if __name__ == '__main__': if TARGET_BIN_DIR.exists() and any(TARGET_BIN_DIR.glob("*")): print('WiX is already installed') sys.exit(0) try: TARGET_BIN_DIR.mkdir() except FileExistsError: pass print('Downloading WiX to', TARGET_BIN_ZIP) p = Popen(["powershell.exe", "-Command", POWERSHELL_COMMAND.format(TARGET_BIN_ZIP, WIX_BINARIES_ZIP)]) p.wait() print('Extracting WiX to', TARGET_BIN_DIR) with ZipFile(str(TARGET_BIN_ZIP)) as z: z.extractall(str(TARGET_BIN_DIR)) TARGET_BIN_ZIP.unlink() print('Extracted WiX')