anki/qt/bazelfixes.py
Damien Elmes e58646909f get PyQt working directly with ./run on macOS
It's no longer necessary to copy everything into bazel-copy, and you
can safely remove that folder.
2021-10-16 18:07:29 +10:00

60 lines
1.7 KiB
Python

# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import os
import sys
def fix_pywin32_in_bazel(force=False):
if sys.platform != "win32":
return
if not force and "BAZEL_SH" not in os.environ:
return
# get path to pywin32 package
path = None
for path in sys.path:
if "pywin32" in path:
break
# trigger pywin32 bootstrap
import site
site.addsitedir(path)
# sys.path has been extended; use final
# path to locate dll folder and add it to path
path = sys.path[-1]
path = path.replace("Pythonwin", "pywin32_system32")
os.environ["PATH"] += ";" + path
# import pythoncom module
import importlib
import importlib.machinery
name = "pythoncom"
filename = os.path.join(path, "pythoncom38.dll")
loader = importlib.machinery.ExtensionFileLoader(name, filename)
spec = importlib.machinery.ModuleSpec(name=name, loader=loader, origin=filename)
_mod = importlib._bootstrap._load(spec)
def fix_extraneous_path_in_bazel():
# source folder conflicts with bazel-out source
if sys.path[0].endswith("qt"):
del sys.path[0]
def fix_run_on_macos():
if not sys.platform.startswith("darwin"):
return
exec_folder = os.path.dirname(sys.argv[0])
qt_version = 5 if "runanki_qt5" in exec_folder else 6
pyqt_repo = os.path.join(exec_folder, f"../../../../../../../external/pyqt{qt_version}")
if os.path.exists(pyqt_repo):
# pyqt must point to real folder, not a symlink
sys.path.insert(0, pyqt_repo)
# set the correct data folder base
data = os.path.join(exec_folder, "aqt", "data")
os.environ["AQT_DATA_FOLDER"] = data