Modified: trunk/Tools/CISupport/built-product-archive (295542 => 295543)
--- trunk/Tools/CISupport/built-product-archive 2022-06-14 22:22:40 UTC (rev 295542)
+++ trunk/Tools/CISupport/built-product-archive 2022-06-14 22:51:38 UTC (rev 295543)
@@ -26,6 +26,7 @@
from __future__ import print_function
import errno
+import fnmatch
import optparse
import os
import shutil
@@ -146,10 +147,8 @@
command = ['/usr/bin/zip', '-j', archiveFile, pathToLauncher, pathToReadme]
return subprocess.call(command)
-def createZip(directoryToZip, configuration, embedParentDirectoryNameOnDarwin=False, minify=False):
+def createZip(directoryToZip, configuration, excludePatterns=None, embedParentDirectoryNameOnDarwin=False):
archiveDir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "WebKitBuild"))
- if minify:
- configuration = 'minified-' + configuration
archiveFile = os.path.join(archiveDir, configuration + ".zip")
try:
@@ -159,18 +158,50 @@
raise
if sys.platform == 'darwin':
- command = ['ditto', '-c', '-k', '--sequesterRsrc']
+ command = ['ditto', '-ckv', '--sequesterRsrc']
if embedParentDirectoryNameOnDarwin:
command += ['--keepParent']
+ if excludePatterns:
+ bomFile = os.path.join(archiveDir, configuration + '.bom')
+ mkbom = subprocess.Popen(('mkbom', '-s', '-i-', bomFile), stdin=subprocess.PIPE, text=True)
+ for root, dirs, files in os.walk(directoryToZip):
+ relativePath = root.replace(directoryToZip, '.', 1)
+ mkbom.stdin.write(relativePath + '\n')
+ for name in files:
+ archiveMemberName = os.path.join(relativePath, name)
+ if any(fnmatch.fnmatch(name, pattern) for pattern in excludePatterns):
+ print('Ignoring:', archiveMemberName)
+ else:
+ mkbom.stdin.write(archiveMemberName + '\n')
+ dirsToIgnore = {name for pattern in excludePatterns for name in fnmatch.filter(dirs, pattern)}
+ for name in reversed(dirs):
+ if name not in dirsToIgnore:
+ continue
+ print('Ignoring:', os.path.join(relativePath, name))
+ dirs.remove(name)
+ mkbom.stdin.close()
+ if mkbom.wait():
+ return 1
+ command += ['--bom', bomFile]
command += [directoryToZip, archiveFile]
- return subprocess.call(command) or addFilesToArchive(archiveFile, PATH_TO_LAUNCHER, PATH_TO_README)
+ return subprocess.call(command) or addFilesToArchive(archiveFile, PATH_TO_LAUNCHER, PATH_TO_README)
elif sys.platform == 'cygwin':
- return subprocess.call(["zip", "-r", archiveFile, "bin64"], cwd=directoryToZip)
+ zipCommand = ["zip", "-r", archiveFile, "bin64"]
+ if excludePatterns:
+ for excludePattern in excludePatterns:
+ zipCommand += ['-x', excludePattern]
+ return subprocess.call(zipCommand, cwd=directoryToZip)
elif sys.platform == 'win32':
+ if excludePatterns:
+ raise NotImplementedError('win32 createZip does not support exclude patterns')
createZipManually(directoryToZip, archiveFile)
return 0
elif sys.platform.startswith('linux'):
- return subprocess.call(["zip", "-y", "-r", archiveFile, "."], cwd=directoryToZip)
+ zipCommand = ["zip", "-y", "-r", archiveFile, "."]
+ if excludePatterns:
+ for excludePattern in excludePatterns:
+ zipCommand += ['-x', excludePattern]
+ return subprocess.call(zipCommand, cwd=directoryToZip)
def dirContainsdwo(directory):
@@ -181,21 +212,8 @@
return True
return False
+MINIFIED_EXCLUDED_PATTERNS = ('*.a', '*.dSYM', 'DerivedSources')
-def minifyDirectory(platform, directory):
- if platform in ['mac', 'ios', 'tvos', 'watchos']:
- dir_patterns = ('.dSYM', 'DerivedSources')
- file_patterns = ('.a',)
- for root, dirs, files in os.walk(directory):
- if any(root.endswith(pattern) for pattern in dir_patterns):
- print('Removing: {}'.format(root))
- shutil.rmtree(root)
- for name in files:
- if any(name.endswith(pattern) for pattern in file_patterns):
- print('Removing: {}'.format(os.path.join(root, name)))
- os.remove(os.path.join(root, name))
-
-
def archiveBuiltProduct(configuration, platform, fullPlatform, minify=False):
assert platform in ('gtk', 'ios', 'jsc', 'mac', 'tvos', 'watchos', 'win', 'wincairo', 'wpe')
global _configurationBuildDirectory
@@ -204,19 +222,19 @@
combinedDirectory = os.path.join(_topLevelBuildDirectory, 'combined-mac-and-{}'.format(platform))
removeDirectoryIfExists(combinedDirectory)
os.makedirs(combinedDirectory)
- if minify:
- minifyDirectory(platform, _configurationBuildDirectory)
- minifyDirectory(platform, _hostBuildDirectory)
if subprocess.call(['/bin/cp', '-pR', _configurationBuildDirectory, combinedDirectory]):
return 1
if subprocess.call(['/bin/cp', '-pR', _hostBuildDirectory, combinedDirectory]):
return 1
-
- return createZip(combinedDirectory, configuration, minify=minify)
+ if minify:
+ return createZip(combinedDirectory, 'minified-' + configuration, excludePatterns=MINIFIED_EXCLUDED_PATTERNS)
+ else:
+ return createZip(combinedDirectory, configuration)
elif platform == 'mac':
if minify:
- minifyDirectory(platform, _configurationBuildDirectory)
- return createZip(_configurationBuildDirectory, configuration, embedParentDirectoryNameOnDarwin=True, minify=minify)
+ return createZip(_configurationBuildDirectory, 'minified-' + configuration, excludePatterns=MINIFIED_EXCLUDED_PATTERNS, embedParentDirectoryNameOnDarwin=True)
+ else:
+ return createZip(_configurationBuildDirectory, configuration, embedParentDirectoryNameOnDarwin=True)
elif platform in ('win', 'wincairo'):
binType = 'bin64' if os.path.exists(os.path.join(_configurationBuildDirectory, 'bin64')) else 'bin32'
binDirectory = os.path.join(_configurationBuildDirectory, binType)