Quotes aren't needed when the arguments aren't expanded by the shell. Now paths with spaces and other nontrivial characters work.
50 lines
1.1 KiB
Python
50 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
"""This script manages Cargo builds
|
|
while keeping the artifact directory within the build tree
|
|
instead of the source tree.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
source_dir = Path(__file__).absolute().parent
|
|
|
|
args = sys.argv[1:]
|
|
binary_dir = "debug"
|
|
|
|
if '--release' in args:
|
|
binary_dir = "release"
|
|
|
|
# The file produced by Cargo will have a special name
|
|
try:
|
|
i = args.index('--rename')
|
|
except ValueError:
|
|
filename = None
|
|
else:
|
|
args.pop(i)
|
|
filename = args.pop(i)
|
|
|
|
# The target destination of the produced file is a positional argument
|
|
out_path = [arg for arg in args if not arg.startswith('--')]
|
|
if out_path:
|
|
out_path = out_path[0]
|
|
i = args.index(out_path)
|
|
args.pop(i)
|
|
|
|
subprocess.run(['sh', "{}/cargo.sh".format(source_dir.as_posix()), 'build']
|
|
+ args,
|
|
check=True)
|
|
|
|
if out_path:
|
|
out_path = Path(out_path).absolute()
|
|
out_basename = out_path.name
|
|
filename = filename or out_basename
|
|
subprocess.run(['cp', '-a',
|
|
'./{}/{}'.format(binary_dir, filename),
|
|
out_path],
|
|
check=True)
|
|
|