| ''' | 
 | Downloads and extracts WiX to a local directory | 
 | ''' | 
 |  | 
 | __author__ = 'Steve Dower <steve.dower@microsoft.com>' | 
 |  | 
 | 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') |