1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
17 class CPPFlag(Action
):
20 def __call__(self
, parser
, namespace
, values
, option_string
=None):
21 if "windres" in buildconfig
.substs
["RC"].lower():
22 if option_string
== "-U":
24 if option_string
== "-I":
25 option_string
= "--include-dir"
27 self
.all_flags
.extend((option_string
, values
))
31 parser
= ArgumentParser()
33 "-D", action
=CPPFlag
, metavar
="VAR[=VAL]", help="Define a variable"
35 parser
.add_argument("-U", action
=CPPFlag
, metavar
="VAR", help="Undefine a variable")
37 "-I", action
=CPPFlag
, metavar
="DIR", help="Search path for includes"
39 parser
.add_argument("-o", dest
="output", metavar
="OUTPUT", help="Output file")
40 parser
.add_argument("input", help="Input file")
41 args
= parser
.parse_args()
43 is_windres
= "windres" in buildconfig
.substs
["RC"].lower()
45 verbose
= os
.environ
.get("BUILD_VERBOSE_LOG")
47 # llvm-rc doesn't preprocess on its own, so preprocess manually
48 # Theoretically, not windres could be rc.exe, but configure won't use it
49 # unless you really ask for it, and it will still work with preprocessed
53 fd
, path
= tempfile
.mkstemp(suffix
=".rc")
54 command
= buildconfig
.substs
["CXXCPP"] + CPPFlag
.all_flags
55 command
.extend(("-DRC_INVOKED", args
.input))
57 print("Executing:", " ".join(command
))
58 with os
.fdopen(fd
, "wb") as fh
:
59 retcode
= subprocess
.run(command
, stdout
=fh
).returncode
61 # Rely on the subprocess printing out any relevant error
66 command
= [buildconfig
.substs
["RC"]]
68 command
.extend(("-O", "coff"))
70 # Even though llvm-rc doesn't preprocess, we still need to pass at least
72 command
.extend(CPPFlag
.all_flags
)
76 command
.extend(("-o", args
.output
))
78 # Use win1252 code page for the input.
79 command
.extend(("-c", "1252", "-Fo" + args
.output
))
84 print("Executing:", " ".join(command
))
85 retcode
= subprocess
.run(command
).returncode
87 # Rely on the subprocess printing out any relevant error
90 if path
!= args
.input:
96 if __name__
== "__main__":
97 sys
.exit(generate_res())