65 lines
1.8 KiB
Python
Executable File
65 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright 2023 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
'''Is used to find all rust files in a crate, and write the result to a
|
|
depfile. Then, used again to read the same depfile and pull out just the
|
|
source files. Lastly, it is also used to write a stamp file at the same
|
|
location as the depfile.'''
|
|
|
|
import argparse
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
FILE_REGEX = re.compile('^(.*):')
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description='Collect Rust sources for a crate')
|
|
parser.add_argument('--stamp',
|
|
action='store_true',
|
|
help='Generate a stamp file')
|
|
parser.add_argument('--generate-depfile',
|
|
action='store_true',
|
|
help='Generate a depfile')
|
|
parser.add_argument('--read-depfile',
|
|
action='store_true',
|
|
help='Read the previously generated depfile')
|
|
args, rest = parser.parse_known_args()
|
|
|
|
if (args.stamp):
|
|
stampfile = rest[0]
|
|
with open(stampfile, "w") as f:
|
|
f.write("stamp")
|
|
elif (args.generate_depfile):
|
|
rustc = rest[0]
|
|
crate_root = rest[1]
|
|
depfile = rest[2]
|
|
rustflags = rest[3:]
|
|
|
|
rustc_args = [
|
|
"--emit=dep-info=" + depfile, "-Zdep-info-omit-d-target", crate_root
|
|
]
|
|
subprocess.check_call([rustc] + rustc_args + rustflags)
|
|
elif (args.read_depfile):
|
|
depfile = rest[0]
|
|
try:
|
|
with open(depfile, "r") as f:
|
|
files = [FILE_REGEX.match(l) for l in f.readlines()]
|
|
for f in files:
|
|
if f:
|
|
print(f.group(1))
|
|
except:
|
|
pass
|
|
else:
|
|
print("ERROR: Unknown action")
|
|
parser.print_help()
|
|
return 1
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|