Source.clean(self)
self.removeArchives()
- def update (self):
+ def update (self, cmdProtocol = None):
if not self.isArchiveUpToDate():
self.fetchAndVerifyArchive()
self.postExtract(dstPath)
class GitRepo (Source):
- def __init__(self, url, revision, baseDir, extractDir = "src"):
+ def __init__(self, httpsUrl, sshUrl, revision, baseDir, extractDir = "src"):
Source.__init__(self, baseDir, extractDir)
- self.url = url
+ self.httpsUrl = httpsUrl
+ self.sshUrl = sshUrl
self.revision = revision
- def update (self):
+ def selectUrl(self, cmdProtocol = None):
+ if cmdProtocol == None:
+ # reuse parent repo protocol
+ proc = subprocess.Popen(['git', 'ls-remote', '--get-url', 'origin'], stdout=subprocess.PIPE)
+ (stdout, stderr) = proc.communicate()
+
+ if proc.returncode != 0:
+ raise Exception("Failed to execute 'git ls-remote origin', got %d" % proc.returncode)
+ if (stdout[:3] == 'ssh') or (stdout[:3] == 'git'):
+ protocol = 'ssh'
+ else:
+ assert stdout[:5] == 'https'
+ protocol = 'https'
+ else:
+ protocol = cmdProtocol
+
+ if protocol == 'ssh':
+ if self.sshUrl != None:
+ url = self.sshUrl
+ else:
+ assert self.httpsUrl != None
+ url = self.httpsUrl
+ else:
+ assert protocol == 'https'
+ url = self.httpsUrl
+
+ assert url != None
+ return url
+
+ def update (self, cmdProtocol = None):
fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
+ url = self.selectUrl(cmdProtocol)
if not os.path.exists(fullDstPath):
- execute(["git", "clone", "--no-checkout", self.url, fullDstPath])
+ execute(["git", "clone", "--no-checkout", url, fullDstPath])
pushWorkingDir(fullDstPath)
try:
- execute(["git", "fetch", self.url, "+refs/heads/*:refs/remotes/origin/*"])
+ execute(["git", "fetch", url, "+refs/heads/*:refs/remotes/origin/*"])
execute(["git", "checkout", self.revision])
finally:
popWorkingDir()
PACKAGES = [
SourcePackage(
- "http://zlib.net/zlib-1.2.8.tar.gz",
- "zlib-1.2.8.tar.gz",
- "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d",
+ "http://zlib.net/zlib-1.2.11.tar.gz",
+ "zlib-1.2.11.tar.gz",
+ "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1",
"zlib"),
SourcePackage(
- "http://prdownloads.sourceforge.net/libpng/libpng-1.6.17.tar.gz",
- "libpng-1.6.17.tar.gz",
- "a18233c99e1dc59a256180e6871d9305a42e91b3f98799b3ceb98e87e9ec5e31",
+ "http://prdownloads.sourceforge.net/libpng/libpng-1.6.27.tar.gz",
+ "libpng-1.6.27.tar.gz",
+ "c9d164ec247f426a525a7b89936694aefbc91fb7a50182b198898b8fc91174b4",
"libpng",
postExtract = postExtractLibpng),
GitRepo(
"https://github.com/KhronosGroup/SPIRV-Tools.git",
- "38036a7203ca604c0f25b0dc33da169ac58e2900",
+ None,
+ "5c19de25107d496a15c7869b3e1dab0a0f85913d",
"spirv-tools"),
GitRepo(
"https://github.com/KhronosGroup/glslang.git",
+ None,
"e3aa654c4b0c761b28d7864192ca8ceea6faf70a",
"glslang"),
GitRepo(
"https://github.com/KhronosGroup/SPIRV-Headers.git",
+ None,
"bd47a9abaefac00be692eae677daed1b977e625c",
"spirv-headers"),
]
parser = argparse.ArgumentParser(description = "Fetch external sources")
parser.add_argument('--clean', dest='clean', action='store_true', default=False,
help='Remove sources instead of fetching')
+ parser.add_argument('--protocol', dest='protocol', default=None, choices=['ssh', 'https'],
+ help="Select protocol to checkout git repositories.")
return parser.parse_args()
if __name__ == "__main__":
if args.clean:
pkg.clean()
else:
- pkg.update()
+ pkg.update(args.protocol)