blob: 48f2f1f523357f5ca20b2595127a6cc31f1cc57d [file] [log] [blame]
#!/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())