mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Windows: Add missing dependencies
This commit is contained in:
parent
a0116827e6
commit
f4d3d8ee1e
1 changed files with 100 additions and 0 deletions
|
@ -18,6 +18,7 @@ import subprocess
|
|||
import sys
|
||||
import urllib
|
||||
import zipfile
|
||||
import stat
|
||||
|
||||
from time import time
|
||||
|
||||
|
@ -587,6 +588,105 @@ class MachCommands(CommandBase):
|
|||
for ssl_lib in ["libcryptoMD.dll", "libsslMD.dll"]:
|
||||
shutil.copy(path.join(env['OPENSSL_LIB_DIR'], "../bin" + msvc_x64, ssl_lib),
|
||||
servo_exe_dir)
|
||||
# Search for the generated nspr4.dll
|
||||
build_path = path.join(servo_exe_dir, "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, servo_exe_dir)
|
||||
# copy needed gstreamer DLLs in to servo.exe dir
|
||||
gst_x64 = "X86_64" if msvc_x64 == "64" else "X86"
|
||||
gst_root = ""
|
||||
gst_default_path = path.join("C:\\gstreamer\\1.0", gst_x64)
|
||||
gst_env = "GSTREAMER_1_0_ROOT_" + gst_x64
|
||||
if os.path.exists(path.join(gst_default_path, "bin", "libz.dll")):
|
||||
gst_root = gst_default_path
|
||||
elif os.environ.get(gst_env) is not None:
|
||||
gst_root = os.environ.get(gst_env)
|
||||
else:
|
||||
print("Could not found GStreamer installation directory.")
|
||||
status = 1
|
||||
gst_dlls = [
|
||||
"libz.dll",
|
||||
"libintl-8.dll",
|
||||
"liborc-0.4-0.dll",
|
||||
"libwinpthread-1.dll",
|
||||
"libffi-7.dll",
|
||||
"libgobject-2.0-0.dll",
|
||||
"libglib-2.0-0.dll",
|
||||
"libgmodule-2.0-0.dll",
|
||||
"libgstreamer-1.0-0.dll",
|
||||
"libgstplayer-1.0-0.dll",
|
||||
"libgstapp-1.0-0.dll",
|
||||
"libgstaudio-1.0-0.dll",
|
||||
"libgstvideo-1.0-0.dll",
|
||||
"libgsttag-1.0-0.dll",
|
||||
"libgstbase-1.0-0.dll",
|
||||
"libgstpbutils-1.0-0.dll",
|
||||
]
|
||||
if gst_root:
|
||||
for gst_lib in gst_dlls:
|
||||
shutil.copy(path.join(gst_root, "bin", gst_lib),
|
||||
servo_exe_dir)
|
||||
# copy some MSVC DLLs to servo.exe dir
|
||||
msvc_redist_dir = None
|
||||
vs_platform = os.environ.get("PLATFORM", "").lower()
|
||||
vc_dir = os.environ.get("VCINSTALLDIR", "")
|
||||
vs_version = os.environ.get("VisualStudioVersion", "")
|
||||
msvc_deps = [
|
||||
"api-ms-win-crt-runtime-l1-1-0.dll",
|
||||
"msvcp140.dll",
|
||||
"vcruntime140.dll",
|
||||
]
|
||||
# Check if it's Visual C++ Build Tools or Visual Studio 2015
|
||||
vs14_vcvars = path.join(vc_dir, "vcvarsall.bat")
|
||||
is_vs14 = True if os.path.isfile(vs14_vcvars) or vs_version == "14.0" else False
|
||||
if is_vs14:
|
||||
msvc_redist_dir = path.join(vc_dir, "redist", vs_platform, "Microsoft.VC140.CRT")
|
||||
elif vs_version == "15.0":
|
||||
redist_dir = path.join(os.environ.get("VCINSTALLDIR", ""), "Redist", "MSVC")
|
||||
if os.path.isdir(redist_dir):
|
||||
for p in os.listdir(redist_dir)[::-1]:
|
||||
redist_path = path.join(redist_dir, p)
|
||||
for v in ["VC141", "VC150"]:
|
||||
# there are two possible paths
|
||||
# `x64\Microsoft.VC*.CRT` or `onecore\x64\Microsoft.VC*.CRT`
|
||||
redist1 = path.join(redist_path, vs_platform, "Microsoft.{}.CRT".format(v))
|
||||
redist2 = path.join(redist_path, "onecore", vs_platform, "Microsoft.{}.CRT".format(v))
|
||||
if os.path.isdir(redist1):
|
||||
msvc_redist_dir = redist1
|
||||
break
|
||||
elif os.path.isdir(redist2):
|
||||
msvc_redist_dir = redist2
|
||||
break
|
||||
if msvc_redist_dir:
|
||||
break
|
||||
if msvc_redist_dir:
|
||||
redist_dirs = [
|
||||
msvc_redist_dir,
|
||||
path.join(os.environ["WindowsSdkDir"], "Redist", "ucrt", "DLLs", vs_platform),
|
||||
]
|
||||
for msvc_dll in msvc_deps:
|
||||
dll_found = False
|
||||
for dll_dir in redist_dirs:
|
||||
dll = path.join(dll_dir, msvc_dll)
|
||||
servo_dir_dll = path.join(servo_exe_dir, msvc_dll)
|
||||
if os.path.isfile(dll):
|
||||
if os.path.isfile(servo_dir_dll):
|
||||
# avoid permission denied error when overwrite dll in servo build directory
|
||||
os.chmod(servo_dir_dll, stat.S_IWUSR)
|
||||
shutil.copy(dll, servo_exe_dir)
|
||||
dll_found = True
|
||||
break
|
||||
if not dll_found:
|
||||
print("DLL file `{}` not found!".format(msvc_dll))
|
||||
status = 1
|
||||
|
||||
elif sys.platform == "darwin":
|
||||
# On the Mac, set a lovely icon. This makes it easier to pick out the Servo binary in tools
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue