[all-commits] [llvm/llvm-project] 2bcc0f: [llvm-windres] Implement the windres flag --use-te...

Martin Storsjö via All-commits all-commits at lists.llvm.org
Fri Sep 1 09:49:06 PDT 2023

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 2bcc0fdc58a220cb9921b47ec8a32c85f2511a47
  Author: Martin Storsjö <martin at martin.st>
  Date:   2023-09-01 (Fri, 01 Sep 2023)

  Changed paths:
    M llvm/test/tools/llvm-rc/windres-preproc.test
    M llvm/tools/llvm-rc/WindresOpts.td
    M llvm/tools/llvm-rc/llvm-rc.cpp

  Log Message:
  [llvm-windres] Implement the windres flag --use-temp-file

Whether a temp file or a pipe is used for preprocessing is an
internal detail, this flag has a notable effect on the preprocessing
in GNU windres. Without this flag, GNU windres passes command
arguments as-is to popen(), which means they get evaluated by a
shell without being re-escaped for this case. To mimic this,
llvm-windres has manually tried to unescape arguments.

When GNU windres is given the --use-temp-file flag, it uses a
different API for invoking the preprocessor, and this API takes care
of preserving special characters in the command line arguments.
For users of GNU windres, this means that by using --use-temp-file,
they don't need to do the (quite terrible) double escaping of
quotes/spaces etc.

The xz project uses the --use-temp-file flag when invoking
GNU windres, see
However as llvm-windres didn't implement this flag and just
assumed the GNU windres popen() behaviour, they had to use a
different codepath for llvm-windres.

That separate codepath for llvm-windres broke later when llvm-windres
got slightly more accurate unescaping of lone quotes in
0f4c6b120f21d582ab7c5c4f2b2a475086c34938 /
https://reviews.llvm.org/D146848 (fixing a discrepancy to GNU
windres as found in https://github.com/llvm/llvm-project/issues/57334),
and this was reported in

Not touching the implementation of the --preprocessor option
with respect to the --use-temp-file flag; that option is doubly
tricky as GNU windres changed its behaviour in a backwards incompatible
way recently (and llvm-windres currently matches the old behaviour).
https://sourceware.org/bugzilla/show_bug.cgi?id=27594 and
for the behaviour change.)

Differential Revision: https://reviews.llvm.org/D159223

More information about the All-commits mailing list