Merge release 2.7.1 into 2.8a0
This commit is contained in:
+46
-71
@@ -22,13 +22,16 @@ from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from utils.common import (
|
||||
ROOT_DIR, SETUP_DIR, appdataXml, copyPackageFiles, copySourceCode,
|
||||
extractVersion, makeCheckSum, toUpload, writeFile
|
||||
extractVersion, freshFolder, makeCheckSum, removeRedundantQt, systemCall,
|
||||
toUpload, writeFile
|
||||
)
|
||||
|
||||
|
||||
@@ -49,115 +52,87 @@ def appImage(args: argparse.Namespace) -> None:
|
||||
|
||||
print("")
|
||||
print("Build AppImage")
|
||||
print("==============")
|
||||
print("")
|
||||
print("="*120)
|
||||
|
||||
linuxTag = args.linux_tag
|
||||
pythonVer = args.python_version
|
||||
mLinux = args.linux
|
||||
mArch = args.arch
|
||||
pyVer = args.python
|
||||
|
||||
# Version Info
|
||||
# ============
|
||||
|
||||
pkgVers, _, relDate = extractVersion()
|
||||
relDate = datetime.datetime.strptime(relDate, "%Y-%m-%d")
|
||||
print("")
|
||||
|
||||
# Set Up Folder
|
||||
# =============
|
||||
|
||||
bldDir = ROOT_DIR / "dist_appimage"
|
||||
bldPkg = f"novelwriter_{pkgVers}"
|
||||
bldPkg = f"novelwriter-{pkgVers}-{mArch}"
|
||||
bldImg = f"{bldPkg}.AppImage"
|
||||
outDir = bldDir / bldPkg
|
||||
imgDir = bldDir / "appimage"
|
||||
|
||||
# Set Up Folders
|
||||
# ==============
|
||||
appDir = bldDir / f"novelWriter-{mArch}"
|
||||
|
||||
bldDir.mkdir(exist_ok=True)
|
||||
|
||||
if outDir.exists():
|
||||
print("Removing old build files ...")
|
||||
print("")
|
||||
shutil.rmtree(outDir)
|
||||
|
||||
outDir.mkdir()
|
||||
|
||||
if imgDir.exists():
|
||||
print("Removing old build metadata files ...")
|
||||
print("")
|
||||
shutil.rmtree(imgDir)
|
||||
|
||||
imgDir.mkdir()
|
||||
freshFolder(outDir)
|
||||
freshFolder(imgDir)
|
||||
freshFolder(appDir)
|
||||
|
||||
# Remove old AppImages
|
||||
if images := bldDir.glob("*.AppImage"):
|
||||
print("Removing old AppImages")
|
||||
print("")
|
||||
for image in images:
|
||||
image.unlink()
|
||||
|
||||
# Copy novelWriter Source
|
||||
# =======================
|
||||
|
||||
print("Copying novelWriter source ...")
|
||||
print("")
|
||||
|
||||
copySourceCode(outDir)
|
||||
|
||||
print("")
|
||||
print("Copying or generating additional files ...")
|
||||
print("")
|
||||
|
||||
copyPackageFiles(outDir)
|
||||
|
||||
# Write Metadata
|
||||
# ==============
|
||||
|
||||
writeFile(imgDir / "novelwriter.appdata.xml", appdataXml())
|
||||
print("Wrote: novelwriter.appdata.xml")
|
||||
|
||||
writeFile(imgDir / "requirements.txt", str(outDir))
|
||||
writeFile(imgDir / "entrypoint.sh", (
|
||||
'#! /bin/bash \n'
|
||||
# f"export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${{APPDIR}}/usr/lib/{mArch}-linux-gnu/\n"
|
||||
'{{ python-executable }} -sE ${APPDIR}/opt/python{{ python-version }}/bin/novelwriter "$@"'
|
||||
))
|
||||
print("Wrote: entrypoint.sh")
|
||||
|
||||
writeFile(imgDir / "requirements.txt", str(outDir))
|
||||
print("Wrote: requirements.txt")
|
||||
|
||||
shutil.copyfile(SETUP_DIR / "data" / "novelwriter.desktop", imgDir / "novelwriter.desktop")
|
||||
print("Copied: novelwriter.desktop")
|
||||
|
||||
shutil.copyfile(SETUP_DIR / "icons" / "novelwriter.svg", imgDir / "novelwriter.svg")
|
||||
print("Copied: novelwriter.svg")
|
||||
|
||||
shutil.copyfile(
|
||||
SETUP_DIR / "data" / "hicolor" / "256x256" / "apps" / "novelwriter.png",
|
||||
imgDir / "novelwriter.png"
|
||||
)
|
||||
shutil.copyfile(SETUP_DIR / "icons" / "novelwriter.png", imgDir / "novelwriter.png")
|
||||
print("Copied: novelwriter.png")
|
||||
|
||||
# Build AppImage
|
||||
# ==============
|
||||
# Build AppDir
|
||||
systemCall([
|
||||
sys.executable, "-m", "python_appimage", "build", "app", "--no-packaging",
|
||||
"-l", f"{mLinux}_{mArch}", "-p", pyVer, "appimage"
|
||||
], cwd=bldDir)
|
||||
|
||||
try:
|
||||
subprocess.call([
|
||||
sys.executable, "-m", "python_appimage", "build", "app",
|
||||
"-l", linuxTag, "-p", pythonVer, "appimage"
|
||||
], cwd=bldDir)
|
||||
except Exception as exc:
|
||||
print("AppImage build: FAILED")
|
||||
print("")
|
||||
print(str(exc))
|
||||
print("")
|
||||
sys.exit(1)
|
||||
# Copy Libraries
|
||||
libPath = Path(f"/usr/lib/{mArch}-linux-gnu")
|
||||
siteDir = appDir / "opt" / f"python{pyVer}" / "lib" / f"python{pyVer}" / "site-packages"
|
||||
qt6Lib = siteDir / "PyQt6" / "Qt6" / "lib"
|
||||
shutil.copyfile(libPath / "libxcb-cursor.so.0", qt6Lib / "libxcb-cursor.so.0")
|
||||
|
||||
bldFile = list(bldDir.glob("*.AppImage"))[0]
|
||||
outFile = bldDir / f"novelWriter-{pkgVers}.AppImage"
|
||||
bldFile.rename(outFile)
|
||||
shaFile = makeCheckSum(outFile.name, cwd=bldDir)
|
||||
# Remove Redundant
|
||||
removeRedundantQt(siteDir)
|
||||
|
||||
toUpload(outFile)
|
||||
# Build Image
|
||||
appToolExec = os.environ.get("APPIMAGE_TOOL_EXEC", "appimagetool")
|
||||
env = os.environ.copy()
|
||||
env["ARCH"] = mArch
|
||||
systemCall([
|
||||
appToolExec, "--no-appstream", "--updateinformation",
|
||||
f"gh-releases-zsync|vkbo|novelwriter|latest|novelwriter-*-{mArch}.AppImage.zsync",
|
||||
str(appDir), bldImg
|
||||
], cwd=bldDir, env=env)
|
||||
|
||||
updFile = bldDir / f"{bldImg}.zsync"
|
||||
bldFile = bldDir / bldImg
|
||||
shaFile = makeCheckSum(bldFile.name, cwd=bldDir)
|
||||
|
||||
toUpload(bldFile)
|
||||
toUpload(updFile)
|
||||
toUpload(shaFile)
|
||||
|
||||
return
|
||||
|
||||
@@ -24,12 +24,11 @@ import argparse
|
||||
import datetime
|
||||
import email.utils
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from utils.common import (
|
||||
ROOT_DIR, SETUP_DIR, checkAssetsExist, copyPackageFiles, copySourceCode,
|
||||
extractVersion, makeCheckSum, toUpload, writeFile
|
||||
extractVersion, makeCheckSum, systemCall, toUpload, writeFile
|
||||
)
|
||||
|
||||
SIGN_KEY = "D6A9F6B8F227CF7C6F6D1EE84DBBE4B734B0BD08"
|
||||
@@ -134,10 +133,10 @@ def makeDebianPackage(
|
||||
signArgs = [f"-k{signKey}"]
|
||||
|
||||
if sourceBuild:
|
||||
subprocess.call(["debuild", "-S", *signArgs], cwd=outDir)
|
||||
systemCall(["debuild", "-S", *signArgs], cwd=outDir)
|
||||
toUpload(bldDir / f"{bldPkg}.tar.xz")
|
||||
else:
|
||||
subprocess.call(["dpkg-buildpackage", *signArgs], cwd=outDir)
|
||||
systemCall(["dpkg-buildpackage", *signArgs], cwd=outDir)
|
||||
shutil.copyfile(bldDir / f"{bldPkg}.tar.xz", bldDir / f"{bldPkg}.debian.tar.xz")
|
||||
toUpload(bldDir / f"{bldPkg}.debian.tar.xz")
|
||||
toUpload(bldDir / f"{bldPkg}_all.deb")
|
||||
@@ -185,6 +184,7 @@ def launchpad(args: argparse.Namespace) -> None:
|
||||
("24.04", "noble"),
|
||||
("24.10", "oracular"),
|
||||
("25.04", "plucky"),
|
||||
("25.10", "questing"),
|
||||
]
|
||||
|
||||
print("Building Ubuntu packages for:")
|
||||
|
||||
+8
-99
@@ -23,14 +23,16 @@ from __future__ import annotations
|
||||
import argparse
|
||||
import compileall
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.request
|
||||
import zipfile
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from utils.common import ROOT_DIR, SETUP_DIR, copySourceCode, extractVersion, readFile, writeFile
|
||||
from utils.common import (
|
||||
ROOT_DIR, SETUP_DIR, copySourceCode, extractVersion, readFile,
|
||||
removeRedundantQt, systemCall, writeFile
|
||||
)
|
||||
|
||||
|
||||
def prepareCode(outDir: Path) -> None:
|
||||
@@ -86,99 +88,11 @@ def embedPython(bldDir: Path, outDir: Path) -> None:
|
||||
def installRequirements(libDir: Path) -> None:
|
||||
"""Install dependencies."""
|
||||
print("Install dependencies ...")
|
||||
|
||||
try:
|
||||
subprocess.call([
|
||||
sys.executable, "-m",
|
||||
"pip", "install", "-r", "requirements.txt", "--target", str(libDir)
|
||||
])
|
||||
except Exception as exc:
|
||||
print("Failed with error:")
|
||||
print(str(exc))
|
||||
sys.exit(1)
|
||||
|
||||
systemCall([
|
||||
sys.executable, "-m", "pip", "install", "-r", "requirements.txt", "--target", libDir
|
||||
])
|
||||
print("Done")
|
||||
print("")
|
||||
|
||||
return
|
||||
|
||||
|
||||
def removeRedundantQt(libDir: Path) -> None:
|
||||
"""Delete Qt files that are not needed"""
|
||||
|
||||
def unlinkIfFound(file: Path) -> None:
|
||||
if file.is_file():
|
||||
file.unlink()
|
||||
print(f"Deleted: {file}")
|
||||
|
||||
def deleteFolder(folder: Path) -> None:
|
||||
if folder.is_dir():
|
||||
shutil.rmtree(folder)
|
||||
print(f"Deleted: {folder}")
|
||||
|
||||
def unlinkIfPrefix(folder: Path, prefix: tuple[str, ...]) -> None:
|
||||
if folder.is_dir():
|
||||
for item in folder.iterdir():
|
||||
if item.name.startswith(prefix):
|
||||
if item.is_file():
|
||||
unlinkIfFound(item)
|
||||
elif item.is_dir():
|
||||
deleteFolder(item)
|
||||
|
||||
print("Deleting Redundant Files")
|
||||
print("========================")
|
||||
print("")
|
||||
|
||||
pyQt6Dir = libDir / "PyQt6"
|
||||
bindDir = libDir / "PyQt6" / "bindings"
|
||||
qt6Dir = libDir / "PyQt6" / "Qt6"
|
||||
binDir = libDir / "PyQt6" / "Qt6" / "bin"
|
||||
plugDir = libDir / "PyQt6" / "Qt6" / "plugins"
|
||||
qmDir = libDir / "PyQt6" / "Qt6" / "translations"
|
||||
dictDir = libDir / "enchant" / "data" / "mingw64" / "share" / "enchant" / "hunspell"
|
||||
|
||||
for item in dictDir.iterdir():
|
||||
if not item.name.startswith(("en_GB", "en_US")):
|
||||
unlinkIfFound(item)
|
||||
|
||||
for item in qmDir.iterdir():
|
||||
if not item.name.startswith("qtbase"):
|
||||
unlinkIfFound(item)
|
||||
|
||||
bulkDel = ("QtQml", "Qt6Qml", "QtQuick", "Qt6Quick")
|
||||
unlinkIfPrefix(pyQt6Dir, bulkDel)
|
||||
unlinkIfPrefix(bindDir, bulkDel)
|
||||
unlinkIfPrefix(binDir, bulkDel)
|
||||
|
||||
delQt6 = [
|
||||
"Qt6Bluetooth", "Qt6DBus", "Qt6Designer", "Qt6Help", "Qt6Multimedia",
|
||||
"Qt6MultimediaWidgets", "Qt6Network", "Qt6Nfc", "Qt6OpenGL", "Qt6Positioning",
|
||||
"Qt6PositioningQuick", "Qt6Sensors", "Qt6SerialPort", "Qt6Sql", "Qt6Test",
|
||||
"Qt6TextToSpeech", "Qt6WebChannel", "Qt6WebSockets", "Qt6Xml",
|
||||
]
|
||||
for item in delQt6:
|
||||
qtItem = item.replace("Qt6", "Qt")
|
||||
unlinkIfFound(binDir / f"{item}.dll")
|
||||
unlinkIfFound(pyQt6Dir / f"{qtItem}.pyd")
|
||||
unlinkIfFound(pyQt6Dir / f"{qtItem}.pyi")
|
||||
deleteFolder(bindDir / qtItem)
|
||||
|
||||
delList = [
|
||||
binDir / "opengl32sw.dll",
|
||||
qt6Dir / "qml",
|
||||
plugDir / "renderers",
|
||||
plugDir / "sensors",
|
||||
plugDir / "sqldrivers",
|
||||
plugDir / "texttospeech",
|
||||
plugDir / "webview",
|
||||
]
|
||||
for item in delList:
|
||||
unlinkIfFound(item)
|
||||
deleteFolder(item)
|
||||
|
||||
print("Done")
|
||||
print("")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -238,12 +152,7 @@ def main(args: argparse.Namespace) -> None:
|
||||
writeFile(ROOT_DIR / "setup.iss", issData)
|
||||
print("")
|
||||
|
||||
try:
|
||||
subprocess.call(["iscc", "setup.iss"])
|
||||
except Exception as exc:
|
||||
print("Inno Setup failed with error:")
|
||||
print(str(exc))
|
||||
sys.exit(1)
|
||||
systemCall(["iscc", "setup.iss"])
|
||||
|
||||
print("")
|
||||
print("Done")
|
||||
|
||||
+104
-17
@@ -22,6 +22,7 @@ from __future__ import annotations
|
||||
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
@@ -50,11 +51,11 @@ def extractVersion(beQuiet: bool = False) -> tuple[str, str, str]:
|
||||
if aLine.startswith("__date__"):
|
||||
relDate = getValue(aLine)
|
||||
except Exception as exc:
|
||||
print(f"Could not read file: {initFile}")
|
||||
print(str(exc))
|
||||
print(f"Could not read file: {initFile}", flush=True)
|
||||
print(str(exc), flush=True)
|
||||
|
||||
if not beQuiet:
|
||||
print(f"novelWriter version: {numVers} ({hexVers}) at {relDate}")
|
||||
print(f"novelWriter version: {numVers} ({hexVers}) at {relDate}", flush=True)
|
||||
|
||||
return numVers, hexVers, relDate
|
||||
|
||||
@@ -77,16 +78,16 @@ def copySourceCode(dst: Path) -> None:
|
||||
for item in src.glob("**/*"):
|
||||
relSrc = item.relative_to(ROOT_DIR)
|
||||
if item.suffix in (".pyc", ".pyo"):
|
||||
print(f"Ignore: {relSrc}")
|
||||
print("Ignored:", relSrc, flush=True)
|
||||
continue
|
||||
if item.parent.is_dir() and item.parent.name != "__pycache__":
|
||||
dstDir = dst / relSrc.parent
|
||||
if not dstDir.exists():
|
||||
dstDir.mkdir(parents=True)
|
||||
print(f"Folder: {dstDir}")
|
||||
print("Created:", dstDir.relative_to(ROOT_DIR), flush=True)
|
||||
if item.is_file():
|
||||
shutil.copyfile(item, dst / relSrc)
|
||||
print(f"Copied: {dst / relSrc}")
|
||||
print("Copied:", relSrc, flush=True)
|
||||
return
|
||||
|
||||
|
||||
@@ -95,26 +96,23 @@ def copyPackageFiles(dst: Path, setupPy: bool = False) -> None:
|
||||
copyFiles = ["LICENSE.md", "CREDITS.md", "pyproject.toml"]
|
||||
for copyFile in copyFiles:
|
||||
shutil.copyfile(copyFile, dst / copyFile)
|
||||
print(f"Copied: {copyFile}")
|
||||
print("Copied:", copyFile, flush=True)
|
||||
|
||||
writeFile(dst / "MANIFEST.in", (
|
||||
"include LICENSE.md\n"
|
||||
"include CREDITS.md\n"
|
||||
"recursive-include novelwriter/assets *\n"
|
||||
))
|
||||
print("Wrote: MANIFEST.in")
|
||||
|
||||
if setupPy:
|
||||
writeFile(dst / "setup.py", (
|
||||
"import setuptools\n"
|
||||
"setuptools.setup()\n"
|
||||
))
|
||||
print("Wrote: setup.py")
|
||||
|
||||
text = readFile(ROOT_DIR / "pyproject.toml")
|
||||
text = text.replace("setup/description_pypi.md", "data/description_short.txt")
|
||||
writeFile(dst / "pyproject.toml", text)
|
||||
print("Wrote: pyproject.toml")
|
||||
|
||||
return
|
||||
|
||||
@@ -139,10 +137,10 @@ def makeCheckSum(sumFile: str, cwd: Path | None = None) -> str:
|
||||
shaFile = cwd / f"{sumFile}.sha256"
|
||||
with open(shaFile, mode="w", encoding="utf-8") as fOut:
|
||||
subprocess.call(["shasum", "-a", "256", sumFile], stdout=fOut, cwd=cwd)
|
||||
print(f"SHA256 Sum: {shaFile}")
|
||||
print(f"SHA256 Sum: {shaFile}", flush=True)
|
||||
except Exception as exc:
|
||||
print("Could not generate sha256 file")
|
||||
print(str(exc))
|
||||
print("Could not generate sha256 file", flush=True)
|
||||
print(str(exc), flush=True)
|
||||
return ""
|
||||
|
||||
return str(shaFile)
|
||||
@@ -156,17 +154,17 @@ def checkAssetsExist() -> bool:
|
||||
|
||||
sampleZip = ROOT_DIR / "novelwriter" / "assets" / "sample.zip"
|
||||
if sampleZip.is_file():
|
||||
print(f"Found: {sampleZip}")
|
||||
print(f"Found: {sampleZip}", flush=True)
|
||||
hasSample = True
|
||||
|
||||
pdfManual = ROOT_DIR / "novelwriter" / "assets" / "manual.pdf"
|
||||
if pdfManual.is_file():
|
||||
print(f"Found: {pdfManual}")
|
||||
print(f"Found: {pdfManual}", flush=True)
|
||||
hasManual = True
|
||||
|
||||
i18nAssets = ROOT_DIR / "novelwriter" / "assets" / "i18n"
|
||||
if len(list(i18nAssets.glob("*.qm"))) > 0:
|
||||
print(f"Found: {i18nAssets}/*.qm")
|
||||
print(f"Found: {i18nAssets}/*.qm", flush=True)
|
||||
hasQmData = True
|
||||
|
||||
return hasSample and hasManual and hasQmData
|
||||
@@ -188,4 +186,93 @@ def readFile(file: Path) -> str:
|
||||
|
||||
def writeFile(file: Path, text: str) -> int:
|
||||
"""Write string to file."""
|
||||
return file.write_text(text, encoding="utf-8")
|
||||
result = file.write_text(text, encoding="utf-8")
|
||||
print("Wrote:", file.relative_to(ROOT_DIR), flush=True)
|
||||
return result
|
||||
|
||||
|
||||
def freshFolder(path: Path) -> None:
|
||||
"""Make sure a folder exists and is empty."""
|
||||
if path.exists():
|
||||
print("Removing:", str(path), flush=True)
|
||||
shutil.rmtree(path)
|
||||
path.mkdir()
|
||||
return
|
||||
|
||||
|
||||
def systemCall(cmd: list, cwd: Path | str | None = None, env: dict | None = None) -> int:
|
||||
"""Make a system call using subprocess."""
|
||||
if isinstance(cwd, Path):
|
||||
cwd = str(cwd)
|
||||
try:
|
||||
code = subprocess.call([str(c) for c in cmd], cwd=cwd, env=env)
|
||||
except Exception as exc:
|
||||
print("ERROR:", str(exc), flush=True)
|
||||
sys.exit(1)
|
||||
return code
|
||||
|
||||
|
||||
def removeRedundantQt(qtBase: Path) -> None:
|
||||
"""Delete Qt files that are not needed"""
|
||||
|
||||
def unlinkIfFound(file: Path) -> None:
|
||||
if file.is_file():
|
||||
file.unlink()
|
||||
print("Deleted:", file.relative_to(ROOT_DIR), flush=True)
|
||||
|
||||
def deleteFolder(folder: Path) -> None:
|
||||
if folder.is_dir():
|
||||
shutil.rmtree(folder)
|
||||
print("Deleted:", folder.relative_to(ROOT_DIR), flush=True)
|
||||
|
||||
def unlinkIfPrefix(folder: Path, prefix: tuple[str, ...]) -> None:
|
||||
if folder.is_dir():
|
||||
for item in folder.iterdir():
|
||||
if item.name.startswith(prefix):
|
||||
if item.is_file():
|
||||
unlinkIfFound(item)
|
||||
elif item.is_dir():
|
||||
deleteFolder(item)
|
||||
|
||||
print("Deleting redundant files ...")
|
||||
|
||||
pyQt6Dir = qtBase / "PyQt6"
|
||||
bindDir = qtBase / "PyQt6" / "bindings"
|
||||
qt6Dir = qtBase / "PyQt6" / "Qt6"
|
||||
binDir = qtBase / "PyQt6" / "Qt6" / "bin"
|
||||
libDir = qtBase / "PyQt6" / "Qt6" / "lib"
|
||||
plugDir = qtBase / "PyQt6" / "Qt6" / "plugins"
|
||||
qmDir = qtBase / "PyQt6" / "Qt6" / "translations"
|
||||
dictDir = qtBase / "enchant" / "data" / "mingw64" / "share" / "enchant" / "hunspell"
|
||||
|
||||
# Prune Dictionaries
|
||||
if dictDir.exists():
|
||||
for item in dictDir.iterdir():
|
||||
if not item.name.startswith(("en_GB", "en_US")):
|
||||
unlinkIfFound(item)
|
||||
|
||||
# Prune Translations
|
||||
for item in qmDir.iterdir():
|
||||
if not item.name.startswith("qtbase"):
|
||||
unlinkIfFound(item)
|
||||
|
||||
# Delete Modules
|
||||
modules = [
|
||||
"Qt6Qml", "Qt6Quick", "Qt6Bluetooth", "Qt6Nfc",
|
||||
"Qt6Sensors", "Qt6SerialPort", "Qt6Test",
|
||||
]
|
||||
modules.extend([x.replace("Qt6", "Qt") for x in modules])
|
||||
modules.extend([f"lib{x}" for x in modules])
|
||||
modules = tuple(modules)
|
||||
|
||||
unlinkIfPrefix(pyQt6Dir, modules)
|
||||
unlinkIfPrefix(bindDir, modules)
|
||||
unlinkIfPrefix(binDir, modules)
|
||||
unlinkIfPrefix(libDir, modules)
|
||||
|
||||
# Other Files
|
||||
deleteFolder(qt6Dir / "qml")
|
||||
deleteFolder(plugDir / "qmlls")
|
||||
deleteFolder(plugDir / "qmllint")
|
||||
|
||||
return
|
||||
|
||||
+3
-3
@@ -25,7 +25,7 @@ import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
from utils.common import ROOT_DIR
|
||||
from utils.common import ROOT_DIR, systemCall
|
||||
|
||||
|
||||
def updateDocsTranslationSources(args: argparse.Namespace) -> None:
|
||||
@@ -40,7 +40,7 @@ def updateDocsTranslationSources(args: argparse.Namespace) -> None:
|
||||
locsDir.mkdir(exist_ok=True)
|
||||
|
||||
print("Generating POT Files")
|
||||
subprocess.call(["make", "gettext"], cwd=docsDir)
|
||||
systemCall(["make", "gettext"], cwd=docsDir)
|
||||
print("")
|
||||
|
||||
lang = args.lang
|
||||
@@ -55,7 +55,7 @@ def updateDocsTranslationSources(args: argparse.Namespace) -> None:
|
||||
print("")
|
||||
|
||||
for code in update:
|
||||
subprocess.call(["sphinx-intl", "update", "-p", "build/gettext", "-l", code], cwd=docsDir)
|
||||
systemCall(["sphinx-intl", "update", "-p", "build/gettext", "-l", code], cwd=docsDir)
|
||||
print("")
|
||||
|
||||
print("Done")
|
||||
|
||||
Reference in New Issue
Block a user