[PATCH] D159223: [llvm-windres] Implement the windres flag --use-temp-file
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 1 09:49:08 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2bcc0fdc58a2: [llvm-windres] Implement the windres flag --use-temp-file (authored by mstorsjo).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D159223/new/
https://reviews.llvm.org/D159223
Files:
llvm/test/tools/llvm-rc/windres-preproc.test
llvm/tools/llvm-rc/WindresOpts.td
llvm/tools/llvm-rc/llvm-rc.cpp
Index: llvm/tools/llvm-rc/llvm-rc.cpp
===================================================================
--- llvm/tools/llvm-rc/llvm-rc.cpp
+++ llvm/tools/llvm-rc/llvm-rc.cpp
@@ -461,7 +461,14 @@
// done this double escaping) probably is confined to cases like these
// quoted string defines, and those happen to work the same across unix
// and windows.
- std::string Unescaped = unescape(Arg->getValue());
+ //
+ // If GNU windres is executed with --use-temp-file, it doesn't use
+ // popen() to invoke the preprocessor, but uses another function which
+ // actually preserves tricky characters better. To mimic this behaviour,
+ // don't unescape arguments here.
+ std::string Value = Arg->getValue();
+ if (!InputArgs.hasArg(WINDRES_use_temp_file))
+ Value = unescape(Value);
switch (Arg->getOption().getID()) {
case WINDRES_include_dir:
// Technically, these are handled the same way as e.g. defines, but
@@ -475,17 +482,19 @@
break;
case WINDRES_define:
Opts.PreprocessArgs.push_back("-D");
- Opts.PreprocessArgs.push_back(Unescaped);
+ Opts.PreprocessArgs.push_back(Value);
break;
case WINDRES_undef:
Opts.PreprocessArgs.push_back("-U");
- Opts.PreprocessArgs.push_back(Unescaped);
+ Opts.PreprocessArgs.push_back(Value);
break;
case WINDRES_preprocessor_arg:
- Opts.PreprocessArgs.push_back(Unescaped);
+ Opts.PreprocessArgs.push_back(Value);
break;
}
}
+ // TODO: If --use-temp-file is set, we shouldn't be unescaping
+ // the --preprocessor argument either, only splitting it.
if (InputArgs.hasArg(WINDRES_preprocessor))
Opts.PreprocessCmd =
unescapeSplit(InputArgs.getLastArgValue(WINDRES_preprocessor));
Index: llvm/tools/llvm-rc/WindresOpts.td
===================================================================
--- llvm/tools/llvm-rc/WindresOpts.td
+++ llvm/tools/llvm-rc/WindresOpts.td
@@ -48,6 +48,10 @@
defm language : LongShort<"l", "language", "Default language to use (0x0-0xffff)">;
+def use_temp_file: Flag<["--"], "use-temp-file">,
+ HelpText<"Mimic GNU windres preprocessor option handling "
+ "(don't unescape preprocessor options)">;
+
defm verbose : F<"v", "verbose", "Enable verbose output">;
defm version : F<"V", "version", "Display version">;
@@ -57,6 +61,3 @@
def _HASH_HASH_HASH : Flag<["-"], "###">;
def no_preprocess : Flag<["--"], "no-preprocess">;
-
-// Unimplemented options for compatibility
-def use_temp_file: Flag<["--"], "use-temp-file">;
Index: llvm/test/tools/llvm-rc/windres-preproc.test
===================================================================
--- llvm/test/tools/llvm-rc/windres-preproc.test
+++ llvm/test/tools/llvm-rc/windres-preproc.test
@@ -4,6 +4,7 @@
; REQUIRES: shell
; RUN: llvm-windres -### --include-dir %p/incdir1 --include %p/incdir2 "-DFOO1=\\\"foo bar\\\"" -UFOO2 -D FOO3 --preprocessor-arg "-DFOO4=\\\"baz baz\\\"" -DFOO5=\"bar\" %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK1
+; RUN: llvm-windres -### --include-dir %p/incdir1 --include %p/incdir2 "-DFOO1=\"foo bar\"" -UFOO2 -D FOO3 --preprocessor-arg "-DFOO4=\"baz baz\"" "-DFOO5=bar" %p/Inputs/empty.rc %t.res --use-temp-file | FileCheck %s --check-prefix=CHECK1
; CHECK1: {{^}} "clang" "--driver-mode=gcc" "-target" "{{.*}}-{{.*}}{{mingw32|windows-gnu}}" "-E" "-xc" "-DRC_INVOKED" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc" "-I" "{{.*}}incdir1" "-I" "{{.*}}incdir2" "-D" "FOO1=\"foo bar\"" "-U" "FOO2" "-D" "FOO3" "-DFOO4=\"baz baz\"" "-D" "FOO5=bar"{{$}}
; RUN: llvm-windres -### --preprocessor "i686-w64-mingw32-gcc -E -DFOO=\\\"foo\\ bar\\\"" %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK2
; CHECK2: {{^}} "i686-w64-mingw32-gcc" "-E" "-DFOO=\"foo bar\"" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc"{{$}}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159223.555420.patch
Type: text/x-patch
Size: 3917 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230901/c328217f/attachment.bin>
More information about the llvm-commits
mailing list