1e5c31af7Sopenharmony_ci# -*- coding: utf-8 -*- 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci#------------------------------------------------------------------------- 4e5c31af7Sopenharmony_ci# drawElements Quality Program utilities 5e5c31af7Sopenharmony_ci# -------------------------------------- 6e5c31af7Sopenharmony_ci# 7e5c31af7Sopenharmony_ci# Copyright 2015 The Android Open Source Project 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 10e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 11e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 12e5c31af7Sopenharmony_ci# 13e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 14e5c31af7Sopenharmony_ci# 15e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 16e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 17e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 19e5c31af7Sopenharmony_ci# limitations under the License. 20e5c31af7Sopenharmony_ci# 21e5c31af7Sopenharmony_ci#------------------------------------------------------------------------- 22e5c31af7Sopenharmony_ci 23e5c31af7Sopenharmony_ciimport os 24e5c31af7Sopenharmony_ciimport sys 25e5c31af7Sopenharmony_ciimport shutil 26e5c31af7Sopenharmony_ciimport tarfile 27e5c31af7Sopenharmony_ciimport zipfile 28e5c31af7Sopenharmony_ciimport hashlib 29e5c31af7Sopenharmony_ciimport argparse 30e5c31af7Sopenharmony_ciimport subprocess 31e5c31af7Sopenharmony_ciimport ssl 32e5c31af7Sopenharmony_ciimport stat 33e5c31af7Sopenharmony_ciimport platform 34e5c31af7Sopenharmony_ci 35e5c31af7Sopenharmony_ciscriptPath = os.path.join(os.path.dirname(__file__), "..", "scripts") 36e5c31af7Sopenharmony_cisys.path.insert(0, scriptPath) 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_cifrom ctsbuild.common import * 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_ciEXTERNAL_DIR = os.path.realpath(os.path.normpath(os.path.dirname(__file__))) 41e5c31af7Sopenharmony_ci 42e5c31af7Sopenharmony_ciSYSTEM_NAME = platform.system() 43e5c31af7Sopenharmony_ci 44e5c31af7Sopenharmony_cidef computeChecksum (data): 45e5c31af7Sopenharmony_ci return hashlib.sha256(data).hexdigest() 46e5c31af7Sopenharmony_ci 47e5c31af7Sopenharmony_cidef onReadonlyRemoveError (func, path, exc_info): 48e5c31af7Sopenharmony_ci os.chmod(path, stat.S_IWRITE) 49e5c31af7Sopenharmony_ci os.unlink(path) 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ciclass Source: 52e5c31af7Sopenharmony_ci def __init__(self, baseDir, extractDir): 53e5c31af7Sopenharmony_ci self.baseDir = baseDir 54e5c31af7Sopenharmony_ci self.extractDir = extractDir 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci def clean (self): 57e5c31af7Sopenharmony_ci fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir) 58e5c31af7Sopenharmony_ci # Remove read-only first 59e5c31af7Sopenharmony_ci readonlydir = os.path.join(fullDstPath, ".git") 60e5c31af7Sopenharmony_ci if os.path.exists(readonlydir): 61e5c31af7Sopenharmony_ci shutil.rmtree(readonlydir, onerror = onReadonlyRemoveError) 62e5c31af7Sopenharmony_ci if os.path.exists(fullDstPath): 63e5c31af7Sopenharmony_ci shutil.rmtree(fullDstPath, ignore_errors=False) 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ciclass SourcePackage (Source): 66e5c31af7Sopenharmony_ci def __init__(self, url, checksum, baseDir, extractDir = "src", postExtract=None): 67e5c31af7Sopenharmony_ci Source.__init__(self, baseDir, extractDir) 68e5c31af7Sopenharmony_ci self.url = url 69e5c31af7Sopenharmony_ci self.filename = os.path.basename(self.url) 70e5c31af7Sopenharmony_ci self.checksum = checksum 71e5c31af7Sopenharmony_ci self.archiveDir = "packages" 72e5c31af7Sopenharmony_ci self.postExtract = postExtract 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_ci def clean (self): 75e5c31af7Sopenharmony_ci Source.clean(self) 76e5c31af7Sopenharmony_ci self.removeArchives() 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_ci def update (self, cmdProtocol = None, force = False): 79e5c31af7Sopenharmony_ci if not self.isArchiveUpToDate(): 80e5c31af7Sopenharmony_ci self.fetchAndVerifyArchive() 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci if self.getExtractedChecksum() != self.checksum: 83e5c31af7Sopenharmony_ci Source.clean(self) 84e5c31af7Sopenharmony_ci self.extract() 85e5c31af7Sopenharmony_ci self.storeExtractedChecksum(self.checksum) 86e5c31af7Sopenharmony_ci 87e5c31af7Sopenharmony_ci def removeArchives (self): 88e5c31af7Sopenharmony_ci archiveDir = os.path.join(EXTERNAL_DIR, pkg.baseDir, pkg.archiveDir) 89e5c31af7Sopenharmony_ci if os.path.exists(archiveDir): 90e5c31af7Sopenharmony_ci shutil.rmtree(archiveDir, ignore_errors=False) 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_ci def isArchiveUpToDate (self): 93e5c31af7Sopenharmony_ci archiveFile = os.path.join(EXTERNAL_DIR, pkg.baseDir, pkg.archiveDir, pkg.filename) 94e5c31af7Sopenharmony_ci if os.path.exists(archiveFile): 95e5c31af7Sopenharmony_ci return computeChecksum(readBinaryFile(archiveFile)) == self.checksum 96e5c31af7Sopenharmony_ci else: 97e5c31af7Sopenharmony_ci return False 98e5c31af7Sopenharmony_ci 99e5c31af7Sopenharmony_ci def getExtractedChecksumFilePath (self): 100e5c31af7Sopenharmony_ci return os.path.join(EXTERNAL_DIR, pkg.baseDir, pkg.archiveDir, "extracted") 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ci def getExtractedChecksum (self): 103e5c31af7Sopenharmony_ci extractedChecksumFile = self.getExtractedChecksumFilePath() 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ci if os.path.exists(extractedChecksumFile): 106e5c31af7Sopenharmony_ci return readFile(extractedChecksumFile) 107e5c31af7Sopenharmony_ci else: 108e5c31af7Sopenharmony_ci return None 109e5c31af7Sopenharmony_ci 110e5c31af7Sopenharmony_ci def storeExtractedChecksum (self, checksum): 111e5c31af7Sopenharmony_ci checksum_bytes = checksum.encode("utf-8") 112e5c31af7Sopenharmony_ci writeBinaryFile(self.getExtractedChecksumFilePath(), checksum_bytes) 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_ci def connectToUrl (self, url): 115e5c31af7Sopenharmony_ci result = None 116e5c31af7Sopenharmony_ci 117e5c31af7Sopenharmony_ci if sys.version_info < (3, 0): 118e5c31af7Sopenharmony_ci from urllib2 import urlopen 119e5c31af7Sopenharmony_ci else: 120e5c31af7Sopenharmony_ci from urllib.request import urlopen 121e5c31af7Sopenharmony_ci 122e5c31af7Sopenharmony_ci if args.insecure: 123e5c31af7Sopenharmony_ci print("Ignoring certificate checks") 124e5c31af7Sopenharmony_ci ssl_context = ssl._create_unverified_context() 125e5c31af7Sopenharmony_ci result = urlopen(url, context=ssl_context) 126e5c31af7Sopenharmony_ci else: 127e5c31af7Sopenharmony_ci result = urlopen(url) 128e5c31af7Sopenharmony_ci 129e5c31af7Sopenharmony_ci return result 130e5c31af7Sopenharmony_ci 131e5c31af7Sopenharmony_ci def fetchAndVerifyArchive (self): 132e5c31af7Sopenharmony_ci print("Fetching %s" % self.url) 133e5c31af7Sopenharmony_ci 134e5c31af7Sopenharmony_ci req = self.connectToUrl(self.url) 135e5c31af7Sopenharmony_ci data = req.read() 136e5c31af7Sopenharmony_ci checksum = computeChecksum(data) 137e5c31af7Sopenharmony_ci dstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.archiveDir, self.filename) 138e5c31af7Sopenharmony_ci 139e5c31af7Sopenharmony_ci if checksum != self.checksum: 140e5c31af7Sopenharmony_ci raise Exception("Checksum mismatch for %s, expected %s, got %s" % (self.filename, self.checksum, checksum)) 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ci if not os.path.exists(os.path.dirname(dstPath)): 143e5c31af7Sopenharmony_ci os.makedirs(os.path.dirname(dstPath)) 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ci writeBinaryFile(dstPath, data) 146e5c31af7Sopenharmony_ci 147e5c31af7Sopenharmony_ci def extract (self): 148e5c31af7Sopenharmony_ci print("Extracting %s to %s/%s" % (self.filename, self.baseDir, self.extractDir)) 149e5c31af7Sopenharmony_ci 150e5c31af7Sopenharmony_ci srcPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.archiveDir, self.filename) 151e5c31af7Sopenharmony_ci tmpPath = os.path.join(EXTERNAL_DIR, ".extract-tmp-%s" % self.baseDir) 152e5c31af7Sopenharmony_ci dstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir) 153e5c31af7Sopenharmony_ci 154e5c31af7Sopenharmony_ci if self.filename.endswith(".zip"): 155e5c31af7Sopenharmony_ci archive = zipfile.ZipFile(srcPath) 156e5c31af7Sopenharmony_ci else: 157e5c31af7Sopenharmony_ci archive = tarfile.open(srcPath) 158e5c31af7Sopenharmony_ci 159e5c31af7Sopenharmony_ci if os.path.exists(tmpPath): 160e5c31af7Sopenharmony_ci shutil.rmtree(tmpPath, ignore_errors=False) 161e5c31af7Sopenharmony_ci 162e5c31af7Sopenharmony_ci os.mkdir(tmpPath) 163e5c31af7Sopenharmony_ci 164e5c31af7Sopenharmony_ci archive.extractall(tmpPath) 165e5c31af7Sopenharmony_ci archive.close() 166e5c31af7Sopenharmony_ci 167e5c31af7Sopenharmony_ci extractedEntries = os.listdir(tmpPath) 168e5c31af7Sopenharmony_ci if len(extractedEntries) != 1 or not os.path.isdir(os.path.join(tmpPath, extractedEntries[0])): 169e5c31af7Sopenharmony_ci raise Exception("%s doesn't contain single top-level directory" % self.filename) 170e5c31af7Sopenharmony_ci 171e5c31af7Sopenharmony_ci topLevelPath = os.path.join(tmpPath, extractedEntries[0]) 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ci if not os.path.exists(dstPath): 174e5c31af7Sopenharmony_ci os.mkdir(dstPath) 175e5c31af7Sopenharmony_ci 176e5c31af7Sopenharmony_ci for entry in os.listdir(topLevelPath): 177e5c31af7Sopenharmony_ci if os.path.exists(os.path.join(dstPath, entry)): 178e5c31af7Sopenharmony_ci raise Exception("%s exists already" % entry) 179e5c31af7Sopenharmony_ci 180e5c31af7Sopenharmony_ci shutil.move(os.path.join(topLevelPath, entry), dstPath) 181e5c31af7Sopenharmony_ci 182e5c31af7Sopenharmony_ci shutil.rmtree(tmpPath, ignore_errors=True) 183e5c31af7Sopenharmony_ci 184e5c31af7Sopenharmony_ci if self.postExtract != None: 185e5c31af7Sopenharmony_ci self.postExtract(dstPath) 186e5c31af7Sopenharmony_ci 187e5c31af7Sopenharmony_ciclass SourceFile (Source): 188e5c31af7Sopenharmony_ci def __init__(self, url, filename, checksum, baseDir, extractDir = "src"): 189e5c31af7Sopenharmony_ci Source.__init__(self, baseDir, extractDir) 190e5c31af7Sopenharmony_ci self.url = url 191e5c31af7Sopenharmony_ci self.filename = filename 192e5c31af7Sopenharmony_ci self.checksum = checksum 193e5c31af7Sopenharmony_ci 194e5c31af7Sopenharmony_ci def update (self, cmdProtocol = None, force = False): 195e5c31af7Sopenharmony_ci if not self.isFileUpToDate(): 196e5c31af7Sopenharmony_ci Source.clean(self) 197e5c31af7Sopenharmony_ci self.fetchAndVerifyFile() 198e5c31af7Sopenharmony_ci 199e5c31af7Sopenharmony_ci def isFileUpToDate (self): 200e5c31af7Sopenharmony_ci file = os.path.join(EXTERNAL_DIR, pkg.baseDir, pkg.extractDir, pkg.filename) 201e5c31af7Sopenharmony_ci if os.path.exists(file): 202e5c31af7Sopenharmony_ci data = readFile(file) 203e5c31af7Sopenharmony_ci return computeChecksum(data.encode('utf-8')) == self.checksum 204e5c31af7Sopenharmony_ci else: 205e5c31af7Sopenharmony_ci return False 206e5c31af7Sopenharmony_ci 207e5c31af7Sopenharmony_ci def connectToUrl (self, url): 208e5c31af7Sopenharmony_ci result = None 209e5c31af7Sopenharmony_ci 210e5c31af7Sopenharmony_ci if sys.version_info < (3, 0): 211e5c31af7Sopenharmony_ci from urllib2 import urlopen 212e5c31af7Sopenharmony_ci else: 213e5c31af7Sopenharmony_ci from urllib.request import urlopen 214e5c31af7Sopenharmony_ci 215e5c31af7Sopenharmony_ci if args.insecure: 216e5c31af7Sopenharmony_ci print("Ignoring certificate checks") 217e5c31af7Sopenharmony_ci ssl_context = ssl._create_unverified_context() 218e5c31af7Sopenharmony_ci result = urlopen(url, context=ssl_context) 219e5c31af7Sopenharmony_ci else: 220e5c31af7Sopenharmony_ci result = urlopen(url) 221e5c31af7Sopenharmony_ci 222e5c31af7Sopenharmony_ci return result 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_ci def fetchAndVerifyFile (self): 225e5c31af7Sopenharmony_ci print("Fetching %s" % self.url) 226e5c31af7Sopenharmony_ci 227e5c31af7Sopenharmony_ci req = self.connectToUrl(self.url) 228e5c31af7Sopenharmony_ci data = req.read() 229e5c31af7Sopenharmony_ci checksum = computeChecksum(data) 230e5c31af7Sopenharmony_ci dstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir, self.filename) 231e5c31af7Sopenharmony_ci 232e5c31af7Sopenharmony_ci if checksum != self.checksum: 233e5c31af7Sopenharmony_ci raise Exception("Checksum mismatch for %s, expected %s, got %s" % (self.filename, self.checksum, checksum)) 234e5c31af7Sopenharmony_ci 235e5c31af7Sopenharmony_ci if not os.path.exists(os.path.dirname(dstPath)): 236e5c31af7Sopenharmony_ci os.mkdir(os.path.dirname(dstPath)) 237e5c31af7Sopenharmony_ci 238e5c31af7Sopenharmony_ci writeBinaryFile(dstPath, data) 239e5c31af7Sopenharmony_ci 240e5c31af7Sopenharmony_ciclass GitRepo (Source): 241e5c31af7Sopenharmony_ci def __init__(self, httpsUrl, sshUrl, revision, baseDir, extractDir = "src", removeTags = [], patch = ""): 242e5c31af7Sopenharmony_ci Source.__init__(self, baseDir, extractDir) 243e5c31af7Sopenharmony_ci self.httpsUrl = httpsUrl 244e5c31af7Sopenharmony_ci self.sshUrl = sshUrl 245e5c31af7Sopenharmony_ci self.revision = revision 246e5c31af7Sopenharmony_ci self.removeTags = removeTags 247e5c31af7Sopenharmony_ci self.patch = patch 248e5c31af7Sopenharmony_ci 249e5c31af7Sopenharmony_ci def checkout(self, url, fullDstPath, force): 250e5c31af7Sopenharmony_ci if not os.path.exists(os.path.join(fullDstPath, '.git')): 251e5c31af7Sopenharmony_ci execute(["git", "clone", "--no-checkout", url, fullDstPath]) 252e5c31af7Sopenharmony_ci 253e5c31af7Sopenharmony_ci pushWorkingDir(fullDstPath) 254e5c31af7Sopenharmony_ci try: 255e5c31af7Sopenharmony_ci for tag in self.removeTags: 256e5c31af7Sopenharmony_ci proc = subprocess.Popen(['git', 'tag', '-l', tag], stdout=subprocess.PIPE) 257e5c31af7Sopenharmony_ci (stdout, stderr) = proc.communicate() 258e5c31af7Sopenharmony_ci if len(stdout) > 0: 259e5c31af7Sopenharmony_ci execute(["git", "tag", "-d",tag]) 260e5c31af7Sopenharmony_ci force_arg = ['--force'] if force else [] 261e5c31af7Sopenharmony_ci execute(["git", "fetch"] + force_arg + ["--tags", url, "+refs/heads/*:refs/remotes/origin/*"]) 262e5c31af7Sopenharmony_ci execute(["git", "checkout"] + force_arg + [self.revision]) 263e5c31af7Sopenharmony_ci 264e5c31af7Sopenharmony_ci if(self.patch != ""): 265e5c31af7Sopenharmony_ci patchFile = os.path.join(EXTERNAL_DIR, self.patch) 266e5c31af7Sopenharmony_ci execute(["git", "reset", "--hard", "HEAD"]) 267e5c31af7Sopenharmony_ci execute(["git", "apply", patchFile]) 268e5c31af7Sopenharmony_ci finally: 269e5c31af7Sopenharmony_ci popWorkingDir() 270e5c31af7Sopenharmony_ci 271e5c31af7Sopenharmony_ci def update (self, cmdProtocol, force = False): 272e5c31af7Sopenharmony_ci fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir) 273e5c31af7Sopenharmony_ci url = self.httpsUrl 274e5c31af7Sopenharmony_ci backupUrl = self.sshUrl 275e5c31af7Sopenharmony_ci 276e5c31af7Sopenharmony_ci # If url is none then start with ssh 277e5c31af7Sopenharmony_ci if cmdProtocol == 'ssh' or url == None: 278e5c31af7Sopenharmony_ci url = self.sshUrl 279e5c31af7Sopenharmony_ci backupUrl = self.httpsUrl 280e5c31af7Sopenharmony_ci 281e5c31af7Sopenharmony_ci try: 282e5c31af7Sopenharmony_ci self.checkout(url, fullDstPath, force) 283e5c31af7Sopenharmony_ci except: 284e5c31af7Sopenharmony_ci if backupUrl != None: 285e5c31af7Sopenharmony_ci self.checkout(backupUrl, fullDstPath, force) 286e5c31af7Sopenharmony_ci 287e5c31af7Sopenharmony_cidef postExtractLibpng (path): 288e5c31af7Sopenharmony_ci shutil.copy(os.path.join(path, "scripts", "pnglibconf.h.prebuilt"), 289e5c31af7Sopenharmony_ci os.path.join(path, "pnglibconf.h")) 290e5c31af7Sopenharmony_ci 291e5c31af7Sopenharmony_ciPACKAGES = [ 292e5c31af7Sopenharmony_ci SourcePackage( 293e5c31af7Sopenharmony_ci "http://zlib.net/fossils/zlib-1.2.13.tar.gz", 294e5c31af7Sopenharmony_ci "b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30", 295e5c31af7Sopenharmony_ci "zlib"), 296e5c31af7Sopenharmony_ci SourcePackage( 297e5c31af7Sopenharmony_ci "http://prdownloads.sourceforge.net/libpng/libpng-1.6.27.tar.gz", 298e5c31af7Sopenharmony_ci "c9d164ec247f426a525a7b89936694aefbc91fb7a50182b198898b8fc91174b4", 299e5c31af7Sopenharmony_ci "libpng", 300e5c31af7Sopenharmony_ci postExtract = postExtractLibpng), 301e5c31af7Sopenharmony_ci SourceFile( 302e5c31af7Sopenharmony_ci "https://raw.githubusercontent.com/baldurk/renderdoc/v1.1/renderdoc/api/app/renderdoc_app.h", 303e5c31af7Sopenharmony_ci "renderdoc_app.h", 304e5c31af7Sopenharmony_ci "e7b5f0aa5b1b0eadc63a1c624c0ca7f5af133aa857d6a4271b0ef3d0bdb6868e", 305e5c31af7Sopenharmony_ci "renderdoc"), 306e5c31af7Sopenharmony_ci GitRepo( 307e5c31af7Sopenharmony_ci "https://github.com/KhronosGroup/SPIRV-Tools.git", 308e5c31af7Sopenharmony_ci "git@github.com:KhronosGroup/SPIRV-Tools.git", 309e5c31af7Sopenharmony_ci "bfc94f63a7adbcf8ae166f5f108ac9f69079efc0", 310e5c31af7Sopenharmony_ci "spirv-tools"), 311e5c31af7Sopenharmony_ci GitRepo( 312e5c31af7Sopenharmony_ci "https://github.com/KhronosGroup/glslang.git", 313e5c31af7Sopenharmony_ci None, 314e5c31af7Sopenharmony_ci "c5117b328afc86e16edff6ed6afe0fe7872a7cf3", 315e5c31af7Sopenharmony_ci "glslang", 316e5c31af7Sopenharmony_ci removeTags = ["main-tot"]), 317e5c31af7Sopenharmony_ci GitRepo( 318e5c31af7Sopenharmony_ci "https://github.com/KhronosGroup/SPIRV-Headers.git", 319e5c31af7Sopenharmony_ci "git@github.com:KhronosGroup/SPIRV-Headers.git", 320e5c31af7Sopenharmony_ci "b8b9eb8640c8c0107ba580fbcb10f969022ca32c", 321e5c31af7Sopenharmony_ci "spirv-headers"), 322e5c31af7Sopenharmony_ci GitRepo( 323e5c31af7Sopenharmony_ci "https://github.com/KhronosGroup/Vulkan-Docs.git", 324e5c31af7Sopenharmony_ci "git@github.com:KhronosGroup/Vulkan-Docs.git", 325e5c31af7Sopenharmony_ci "b9aad705f0d9e5e6734ac2ad671d5d1de57b05e0", 326e5c31af7Sopenharmony_ci "vulkan-docs"), 327e5c31af7Sopenharmony_ci GitRepo( 328e5c31af7Sopenharmony_ci "https://github.com/google/amber.git", 329e5c31af7Sopenharmony_ci None, 330e5c31af7Sopenharmony_ci "933ecb4d6288675a92eb1650e0f52b1d7afe8273", 331e5c31af7Sopenharmony_ci "amber"), 332e5c31af7Sopenharmony_ci GitRepo( 333e5c31af7Sopenharmony_ci "https://github.com/open-source-parsers/jsoncpp.git", 334e5c31af7Sopenharmony_ci "git@github.com:open-source-parsers/jsoncpp.git", 335e5c31af7Sopenharmony_ci "9059f5cad030ba11d37818847443a53918c327b1", 336e5c31af7Sopenharmony_ci "jsoncpp"), 337e5c31af7Sopenharmony_ci # NOTE: The samples application is not well suited to external 338e5c31af7Sopenharmony_ci # integration, this fork contains the small fixes needed for use 339e5c31af7Sopenharmony_ci # by the CTS. 340e5c31af7Sopenharmony_ci GitRepo( 341e5c31af7Sopenharmony_ci "https://github.com/Igalia/vk_video_samples.git", 342e5c31af7Sopenharmony_ci "git@github.com:Igalia/vk_video_samples.git", 343e5c31af7Sopenharmony_ci "138bbe048221d315962ddf8413aa6a08cc62a381", 344e5c31af7Sopenharmony_ci "nvidia-video-samples"), 345e5c31af7Sopenharmony_ci GitRepo( 346e5c31af7Sopenharmony_ci "https://github.com/Igalia/ESExtractor.git", 347e5c31af7Sopenharmony_ci "git@github.com:Igalia/ESExtractor.git", 348e5c31af7Sopenharmony_ci "v0.3.3", 349e5c31af7Sopenharmony_ci "ESExtractor"), 350e5c31af7Sopenharmony_ci] 351e5c31af7Sopenharmony_ci 352e5c31af7Sopenharmony_cidef parseArgs (): 353e5c31af7Sopenharmony_ci versionsForInsecure = ((2,7,9), (3,4,3)) 354e5c31af7Sopenharmony_ci versionsForInsecureStr = ' or '.join(('.'.join(str(x) for x in v)) for v in versionsForInsecure) 355e5c31af7Sopenharmony_ci 356e5c31af7Sopenharmony_ci parser = argparse.ArgumentParser(description = "Fetch external sources") 357e5c31af7Sopenharmony_ci parser.add_argument('--clean', dest='clean', action='store_true', default=False, 358e5c31af7Sopenharmony_ci help='Remove sources instead of fetching') 359e5c31af7Sopenharmony_ci parser.add_argument('--insecure', dest='insecure', action='store_true', default=False, 360e5c31af7Sopenharmony_ci help="Disable certificate check for external sources." 361e5c31af7Sopenharmony_ci " Minimum python version required " + versionsForInsecureStr) 362e5c31af7Sopenharmony_ci parser.add_argument('--protocol', dest='protocol', default='https', choices=['ssh', 'https'], 363e5c31af7Sopenharmony_ci help="Select protocol to checkout git repositories.") 364e5c31af7Sopenharmony_ci parser.add_argument('--force', dest='force', action='store_true', default=False, 365e5c31af7Sopenharmony_ci help="Pass --force to git fetch and checkout commands") 366e5c31af7Sopenharmony_ci 367e5c31af7Sopenharmony_ci args = parser.parse_args() 368e5c31af7Sopenharmony_ci 369e5c31af7Sopenharmony_ci if args.insecure: 370e5c31af7Sopenharmony_ci for versionItem in versionsForInsecure: 371e5c31af7Sopenharmony_ci if (sys.version_info.major == versionItem[0]): 372e5c31af7Sopenharmony_ci if sys.version_info < versionItem: 373e5c31af7Sopenharmony_ci parser.error("For --insecure minimum required python version is " + 374e5c31af7Sopenharmony_ci versionsForInsecureStr) 375e5c31af7Sopenharmony_ci break; 376e5c31af7Sopenharmony_ci 377e5c31af7Sopenharmony_ci return args 378e5c31af7Sopenharmony_ci 379e5c31af7Sopenharmony_cidef run(*popenargs, **kwargs): 380e5c31af7Sopenharmony_ci process = subprocess.Popen(*popenargs, **kwargs) 381e5c31af7Sopenharmony_ci 382e5c31af7Sopenharmony_ci try: 383e5c31af7Sopenharmony_ci stdout, stderr = process.communicate(None) 384e5c31af7Sopenharmony_ci except: 385e5c31af7Sopenharmony_ci process.kill() 386e5c31af7Sopenharmony_ci process.wait() 387e5c31af7Sopenharmony_ci raise 388e5c31af7Sopenharmony_ci 389e5c31af7Sopenharmony_ci retcode = process.poll() 390e5c31af7Sopenharmony_ci 391e5c31af7Sopenharmony_ci if retcode: 392e5c31af7Sopenharmony_ci raise subprocess.CalledProcessError(retcode, process.args, output=stdout, stderr=stderr) 393e5c31af7Sopenharmony_ci 394e5c31af7Sopenharmony_ci return retcode, stdout, stderr 395e5c31af7Sopenharmony_ci 396e5c31af7Sopenharmony_ciif __name__ == "__main__": 397e5c31af7Sopenharmony_ci args = parseArgs() 398e5c31af7Sopenharmony_ci 399e5c31af7Sopenharmony_ci for pkg in PACKAGES: 400e5c31af7Sopenharmony_ci if args.clean: 401e5c31af7Sopenharmony_ci pkg.clean() 402e5c31af7Sopenharmony_ci else: 403e5c31af7Sopenharmony_ci pkg.update(args.protocol, args.force) 404