mirror of
https://github.com/QuasarApp/QuasarAppCI.git
synced 2025-04-26 22:04:32 +00:00
286 lines
7.7 KiB
Python
286 lines
7.7 KiB
Python
# This Python file uses the following encoding: utf-8
|
|
|
|
from BuildBotLib.make import Make
|
|
from BuildBotLib.basemodule import BaseModule
|
|
from buildbot.plugins import util, steps
|
|
import subprocess
|
|
|
|
|
|
class QtUpdater(Make):
|
|
|
|
def __init__(self):
|
|
Make.__init__(self)
|
|
self.qtDefaultHelp = []
|
|
self.lastTargetDir = ""
|
|
|
|
def linuxXmakeCmd(self, props):
|
|
version = props.getProperty("branch")
|
|
|
|
command = [
|
|
'aqt',
|
|
"install",
|
|
"--outputdir", self.home + "/Qt",
|
|
version,
|
|
'linux',
|
|
'desktop'
|
|
]
|
|
|
|
self.lastTargetDir = str(self.home + "/Qt/" + version + "/gcc_64")
|
|
|
|
return command
|
|
|
|
def windowsXmakeCmd(self, props):
|
|
command = [
|
|
'qmake-windows',
|
|
'-spec', 'win32-g++',
|
|
"-r",
|
|
"CONFIG+=qtquickcompiler",
|
|
'ONLINE="~/repo"'
|
|
]
|
|
|
|
return command
|
|
|
|
def androidXmakeCmd(self, props):
|
|
|
|
version = props.getProperty("branch")
|
|
|
|
command = [
|
|
'aqt',
|
|
"install",
|
|
"--outputdir", self.home + "/Qt",
|
|
version,
|
|
'linux',
|
|
'android'
|
|
]
|
|
|
|
self.lastTargetDir = str(self.home + "/Qt/" + version + "/android")
|
|
|
|
return command
|
|
|
|
def isConfigureonly(self, step):
|
|
return step.getProperty('configureonly')
|
|
|
|
def getArrayQtParams(self, text):
|
|
array = text.split('\n')
|
|
res = []
|
|
|
|
excludePlugins = ['freetype', 'xcb', 'webengine']
|
|
|
|
for item in array:
|
|
index = item.find('/qt')
|
|
if index <= -1:
|
|
continue
|
|
|
|
item = item.replace(" ", "")
|
|
lenngth = item.find('.')
|
|
|
|
if (lenngth <= -1):
|
|
continue
|
|
|
|
value = "-qt" + item[0: lenngth]
|
|
|
|
toContinue = False
|
|
for plugin in excludePlugins:
|
|
toContinue = toContinue or (value.find(plugin) >= 0)
|
|
|
|
if toContinue:
|
|
continue
|
|
|
|
res.append(value)
|
|
|
|
return res
|
|
|
|
def getHelp(self, props):
|
|
|
|
result = ""
|
|
dirpath = props.getProperty("builddir")
|
|
stdout = subprocess.getoutput([dirpath + '/build/configure -h'])
|
|
result = "QT HELP: + \n" + stdout
|
|
|
|
self.qtDefaultHelp = self.getArrayQtParams(stdout)
|
|
|
|
if (len(self.qtDefaultHelp) <= 0):
|
|
result = "qt help is Empty. stdout= " + stdout
|
|
else:
|
|
result += " ".join(self.qtDefaultHelp)
|
|
|
|
return ["echo", result]
|
|
|
|
def lsLinux(self, steps):
|
|
|
|
res = "ln -sf " + self.lastTargetDir + "/bin/qmake "
|
|
res += self.home + "/.local/bin/qmake-linux"
|
|
return str(res)
|
|
|
|
def lsWindows(self, steps):
|
|
|
|
res = "ln -sf " + self.lastTargetDir + "/bin/qmake "
|
|
res += self.home + "/.local/bin/qmake-windows"
|
|
return str(res)
|
|
|
|
def lsAndroid(self, steps):
|
|
|
|
res = "ln -sf " + self.lastTargetDir + "/bin/qmake "
|
|
res += self.home + "/.local/bin/qmake-android"
|
|
return str(res)
|
|
|
|
def cpExtraWindows(self):
|
|
|
|
cmd = ""
|
|
path = "/usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/*.dll"
|
|
path2 = "/usr/x86_64-w64-mingw32/lib/*.dll"
|
|
|
|
cmd += "cp " + path + " " + self.lastTargetDir + "/bin/"
|
|
cmd += "; cp " + path2 + " " + self.lastTargetDir + "/bin/"
|
|
|
|
return cmd
|
|
|
|
def getGeneralConfigureOptions(self, props):
|
|
list = [
|
|
"-opensource",
|
|
"-confirm-license",
|
|
"-release",
|
|
"-nomake", "examples",
|
|
"-nomake", "tests",
|
|
"-skip", "qtdocgallery",
|
|
"-skip", "qtpim",
|
|
"-skip", "qtwebengine",
|
|
"-ccache"
|
|
]
|
|
|
|
list += self.qtDefaultHelp
|
|
return list
|
|
|
|
def getTargetDir(self, configureOptions, branch, platform):
|
|
|
|
if (not len(branch)):
|
|
branch = "Custom"
|
|
|
|
if (not len(platform)):
|
|
branch = "Unknown"
|
|
|
|
self.lastTargetDir = str(self.home + "/Qt/" + branch + "/" + platform)
|
|
return ["-prefix", self.lastTargetDir]
|
|
|
|
def getWindowsConfigOptions(self, props):
|
|
list = [
|
|
"-skip", "qtactiveqt",
|
|
"-skip", "qtwebglplugin",
|
|
"-skip", "qtlocation",
|
|
"-skip", "qtvirtualkeyboard",
|
|
"-skip", "qtwinextras",
|
|
"-skip", "qtactiveqt",
|
|
"-opengl", "desktop",
|
|
"-xplatform", "win32-g++",
|
|
"-device-option", "CROSS_COMPILE=x86_64-w64-mingw32-",
|
|
"-no-pch"
|
|
]
|
|
|
|
list += self.getGeneralConfigureOptions(props)
|
|
list += self.getTargetDir(list, props.getProperty('branch'), "Windows")
|
|
|
|
return ["./configure"] + list
|
|
|
|
def installStep(self, platform):
|
|
|
|
platformLsCmd = {
|
|
'linux': self.lsLinux,
|
|
'windows': self.lsWindows,
|
|
'android': self.lsAndroid,
|
|
}
|
|
|
|
return self.getWraper(platformLsCmd[platform])
|
|
|
|
def installExtraStep(self, platform):
|
|
cpCmd = {
|
|
'windows': self.cpExtraWindows(),
|
|
}
|
|
|
|
return self.generateCmd(cpCmd.get(platform, ""))
|
|
|
|
def generateInstallStep(self, platform):
|
|
|
|
def dustepIf(step):
|
|
return not self.isConfigureonly(step)
|
|
|
|
res = [self.generateStep(self.installStep(platform),
|
|
platform,
|
|
"install qt into worker",
|
|
dustepIf)]
|
|
|
|
res += [self.generateStep(self.installExtraStep(platform),
|
|
platform,
|
|
"copy qt assets into worker",
|
|
dustepIf)]
|
|
|
|
res += [self.generateStep(['git', 'clean', '-xdf'],
|
|
platform,
|
|
"clean old build data",
|
|
lambda step: True)]
|
|
|
|
return res
|
|
|
|
def generatePlatformSteps(self, platform):
|
|
|
|
platformXcmd = {
|
|
'linux': self.linuxXmakeCmd,
|
|
'windows': self.windowsXmakeCmd,
|
|
'android': self.androidXmakeCmd,
|
|
}
|
|
|
|
res = []
|
|
|
|
res += [self.generateStep(platformXcmd[platform],
|
|
platform,
|
|
self.makePrefix() + 'Make',
|
|
lambda step: True)]
|
|
|
|
return res
|
|
|
|
def getFactory(self):
|
|
factory = util.BuildFactory()
|
|
|
|
factory.addStep(
|
|
steps.Git(
|
|
repourl="https://github.com/qt/qt5.git",
|
|
branch=util.Interpolate('%(prop:branch)s'),
|
|
mode='full',
|
|
method='fresh',
|
|
submodules=True,
|
|
name='git operations',
|
|
description='operations of git like pull clone fetch',
|
|
)
|
|
)
|
|
|
|
factory.addStep(
|
|
steps.ShellCommand(
|
|
command=self.getWraper(self.getHelp),
|
|
name='read help',
|
|
haltOnFailure=True,
|
|
description='read help for generate the configure command',
|
|
)
|
|
)
|
|
|
|
factory.addSteps(self.generatePlatformSteps('linux'))
|
|
factory.addSteps(self.generateInstallStep('linux'))
|
|
|
|
factory.addSteps(self.generatePlatformSteps('windows'))
|
|
factory.addSteps(self.generateInstallStep('windows'))
|
|
|
|
factory.addSteps(self.generatePlatformSteps('android'))
|
|
factory.addSteps(self.generateInstallStep('android'))
|
|
|
|
return factory
|
|
|
|
def getPropertyes(self):
|
|
|
|
base = BaseModule.getPropertyes(self)
|
|
|
|
return base + [
|
|
util.BooleanParameter(
|
|
name='configureonly',
|
|
label='disable build and install qt (confugure only)',
|
|
default=False
|
|
)
|
|
]
|