mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The utils/dev-scripts/at-to-filelist, utils/dev-scripts/split-cmdline and utils/build-parser-lib scripts needed to be reformatted with the black tool to agree with the linter.
132 lines
3.8 KiB
Python
Executable File
132 lines
3.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# split-cmdline - Split swift compiler command lines ------------*- python -*-
|
|
#
|
|
# This source file is part of the Swift.org open source project
|
|
#
|
|
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
# Licensed under Apache License v2.0 with Runtime Library Exception
|
|
#
|
|
# See https://swift.org/LICENSE.txt for license information
|
|
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
#
|
|
# ----------------------------------------------------------------------------
|
|
#
|
|
# Split swift compiler command lines into multiple lines.
|
|
#
|
|
# Reads the command line from stdin an outputs the split line to stdout.
|
|
# Example:
|
|
#
|
|
# $ swiftc -c hello.swift -### | split-cmdline
|
|
# /path-to-swift/bin/swift \
|
|
# -frontend \
|
|
# -c \
|
|
# -primary-file hello.swift \
|
|
# -target x86_64-apple-macosx10.9 \
|
|
# -enable-objc-interop \
|
|
# -color-diagnostics \
|
|
# -module-name hello \
|
|
# -o hello.o
|
|
#
|
|
# Example usage in vim:
|
|
# *) make sure that split-cmdline is in the $PATH
|
|
# *) copy-paste the swift command line the text buffer
|
|
# *) select the command line
|
|
# *) go to the command prompt (= press ':')
|
|
# :'<,'>!split-cmdline
|
|
#
|
|
# ----------------------------------------------------------------------------
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import re
|
|
import shlex
|
|
import sys
|
|
|
|
|
|
def main():
|
|
for line in sys.stdin:
|
|
first = True
|
|
is_arg_param = False
|
|
# Handle escaped spaces
|
|
args = shlex.split(line)
|
|
for arg in args:
|
|
if arg == "":
|
|
continue
|
|
if not first:
|
|
# Print option arguments in the same line
|
|
print(" " if is_arg_param else " \\\n ", end="")
|
|
first = False
|
|
|
|
# Expand @ option files
|
|
m = re.match(r"^@(\S+\.txt)$", arg)
|
|
if m:
|
|
cmd_file = m.group(1)
|
|
if os.path.isfile(cmd_file):
|
|
with open(cmd_file) as f:
|
|
for ln in f.readlines():
|
|
for name in ln.rstrip().split(";"):
|
|
if name != "":
|
|
print(name + " \\")
|
|
first = True
|
|
continue
|
|
|
|
if " " in arg:
|
|
print('"' + arg + '"', end="")
|
|
else:
|
|
print(arg, end="")
|
|
|
|
# A hard-coded list of options which expect a parameter
|
|
is_arg_param = arg in [
|
|
"-o",
|
|
"-target",
|
|
"-isysroot",
|
|
"-emit-sil",
|
|
"-emit-ir",
|
|
"-module-name",
|
|
"-framework",
|
|
"-Xlinker",
|
|
"-arch",
|
|
"-D",
|
|
"-sdk",
|
|
"-module-cache-path",
|
|
"-F",
|
|
"-output-file-map",
|
|
"-emit-module-path",
|
|
"-Xcc",
|
|
"-I",
|
|
"-iquote",
|
|
"-emit-objc-header-path",
|
|
"-Xfrontend",
|
|
"-filelist",
|
|
"-num-threads",
|
|
"-Xclang",
|
|
"-x",
|
|
"-L",
|
|
"-rpath",
|
|
"-macosx_version_min",
|
|
"-syslibroot",
|
|
"-add_ast_path",
|
|
"-import-objc-header",
|
|
"-serialize-diagnostics-path",
|
|
"-emit-dependencies-path",
|
|
"-emit-reference-dependencies-path",
|
|
"-primary-file",
|
|
"-resource-dir",
|
|
"--sdk",
|
|
"--toolchain",
|
|
"-emit-module-doc-path",
|
|
"-module-link-name",
|
|
"-group-info-path",
|
|
"-fileno",
|
|
"-swift-version",
|
|
"-Xllvm",
|
|
]
|
|
|
|
# Print 2 new lines after each command line
|
|
print("\n")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|