diff options
-rw-r--r-- | python/servo/package_commands.py | 45 | ||||
-rw-r--r-- | support/windows/Servo.wxs | 19 | ||||
-rw-r--r-- | support/windows/Servo.wxs.mako | 1 |
3 files changed, 64 insertions, 1 deletions
diff --git a/python/servo/package_commands.py b/python/servo/package_commands.py index 1e91032dea6..40cf9ddadbb 100644 --- a/python/servo/package_commands.py +++ b/python/servo/package_commands.py @@ -18,6 +18,7 @@ import shutil import subprocess import sys import tempfile +import urllib from mach.decorators import ( CommandArgument, @@ -145,6 +146,20 @@ def copy_windows_dependencies(binary_path, destination): for d in deps: shutil.copy(path.join(binary_path, d), destination) + # Search for the generated nspr4.dll + build_path = path.join(binary_path, "build") + nspr4 = "nspr4.dll" + nspr4_path = None + for root, dirs, files in os.walk(build_path): + if nspr4 in files: + nspr4_path = path.join(root, nspr4) + break + + if nspr4_path is None: + print("WARNING: could not find nspr4.dll") + else: + shutil.copy(nspr4_path, destination) + def change_prefs(resources_path, platform): print("Swapping prefs") @@ -332,7 +347,7 @@ class PackageCommands(CommandBase): import mako.template template_path = path.join(dir_to_root, "support", "windows", "Servo.wxs.mako") template = mako.template.Template(open(template_path).read()) - wxs_path = path.join(dir_to_msi, "Servo.wxs") + wxs_path = path.join(dir_to_msi, "Installer.wxs") open(wxs_path, "w").write(template.render( exe_path=target_dir, dir_to_temp=dir_to_temp_servo, @@ -353,6 +368,34 @@ class PackageCommands(CommandBase): except subprocess.CalledProcessError as e: print("WiX light exited with return value %d" % e.returncode) return e.returncode + print("Packaged Servo into " + path.join(dir_to_msi, "Installer.msi")) + + # Download GStreamer installer. Only once. + dir_to_gst_deps = path.join(dir_to_msi, 'Gstreamer.msi') + gstreamer_msi_path = path.join(target_dir, 'Gstreamer.msi') + if not os.path.exists(gstreamer_msi_path): + print('Fetching GStreamer installer. This may take a while...') + gstreamer_url = 'https://gstreamer.freedesktop.org/data/pkg/windows/1.14.2/gstreamer-1.0-x86-1.14.2.msi' + urllib.urlretrieve(gstreamer_url, gstreamer_msi_path) + shutil.copy(gstreamer_msi_path, dir_to_gst_deps) + + # Generate bundle with GStreamer and Servo installers. + print("Creating bundle") + shutil.copy(path.join(dir_to_root, 'support', 'windows', 'Servo.wxs'), dir_to_msi) + bundle_wxs_path = path.join(dir_to_msi, 'Servo.wxs') + try: + with cd(dir_to_msi): + subprocess.check_call(['candle', bundle_wxs_path, '-ext', 'WixBalExtension']) + except subprocess.CalledProcessError as e: + print("WiX candle exited with return value %d" % e.returncode) + return e.returncode + try: + wxsobj_path = "{}.wixobj".format(path.splitext(bundle_wxs_path)[0]) + with cd(dir_to_msi): + subprocess.check_call(['light', wxsobj_path, '-ext', 'WixBalExtension']) + except subprocess.CalledProcessError as e: + print("WiX light exited with return value %d" % e.returncode) + return e.returncode print("Packaged Servo into " + path.join(dir_to_msi, "Servo.msi")) print("Creating ZIP") diff --git a/support/windows/Servo.wxs b/support/windows/Servo.wxs new file mode 100644 index 00000000000..d6ef3a04981 --- /dev/null +++ b/support/windows/Servo.wxs @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + <Bundle Name="Servo" + Version="1.0" + UpgradeCode="91b09c7e-6c0d-4166-b806-1dc724acf728"> + <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> + <Chain> + <MsiPackage + SourceFile="Gstreamer.msi" + DisplayName="GStreamer" + ForcePerMachine="yes"/> + <MsiPackage + SourceFile="Installer.msi" + Compressed="yes" + DisplayName="Servo" + ForcePerMachine="yes"/> + </Chain> + </Bundle> +</Wix> diff --git a/support/windows/Servo.wxs.mako b/support/windows/Servo.wxs.mako index 69cd69a4a1b..f22fce69dfb 100644 --- a/support/windows/Servo.wxs.mako +++ b/support/windows/Servo.wxs.mako @@ -40,6 +40,7 @@ Advertise="yes"/> </File> ${include_dependencies()} + <Environment Id="PATH" Name="PATH" Value="C:\gstreamer\1.0\x86\bin;C:\gstreamer\1.0\x86_64\bin" Permanent="yes" Part="last" Action="set" System="yes" /> </Component> ${include_directory(resources_path, "resources")} |