import subprocess
import sys
+IGNORE_PATTERNS = ['do_not_use', 'protoc']
def FindFiles(path, pattern):
"""Finds files matching |pattern| under |path|.
files = []
for root, _, filenames in os.walk(path):
for filename in fnmatch.filter(filenames, pattern):
- if 'do_not_use' not in filename and 'protoc' not in filename:
- # We use the relative path here to avoid "argument list too long"
- # errors on Linux.
+ if filename not in IGNORE_PATTERNS:
+ # We use the relative path here to avoid "argument list too
+ # long" errors on Linux. Note: This doesn't always work, so
+ # we use the find command on Linux.
files.append(os.path.relpath(os.path.join(root, filename)))
return files
os.remove(output_lib)
if sys.platform.startswith('linux'):
- objects = FindFiles(search_path, '*.o')
- cmd = 'ar crs '
+ pattern = '*.o'
+ cmd = 'ar crs'
elif sys.platform == 'darwin':
- objects = FindFiles(search_path, '*.a')
+ pattern = '*.a'
cmd = 'libtool -static -v -o '
elif sys.platform == 'win32':
- objects = FindFiles(search_path, '*.lib')
+ pattern = '*.lib'
cmd = 'lib /OUT:'
else:
sys.stderr.write('Platform not supported: %r\n\n' % sys.platform)
return 1
- cmd += output_lib + ' ' + ' '.join(objects)
+ if sys.platform.startswith('linux'):
+ cmd = ' '.join(['find', search_path, '-name "' + pattern + '"' +
+ ' -and -not -name ' +
+ ' -and -not -name '.join(IGNORE_PATTERNS) +
+ ' -exec', cmd, output_lib, '{} +'])
+ else:
+ cmd = ' '.join([cmd + output_lib] + FindFiles(search_path, pattern))
print cmd
subprocess.check_call(cmd, shell=True)
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv))
-