make/tests/scripts/options
Paul Smith 667d70eac2 [SV 62118] Correctly handle -f- options on re-exec
The -f, -file, and --makefile options were not properly handled when
re-exec'ing due to makefile updates.  This problem, plus a patch and
tests, was reported by Dmitry Goncharov <dgoncharov@users.sf.net>.

While examining this I found another bug: after re-exec we forgot the
batch file was temporary and never deleted it.

I decided to fix all these problems at once using a different fix
than Dmitry's: I created a new internal-only command-line option,
--temp-stdin.  When reconstructing the make options for a re-exec,
replace the -f/--file/--makefile option that reads from stdin with
--temp-stdin=<filename> so that the re-exec'd version of make knows
it's a temporary batch file and will delete it.

We no longer need to add the -o options because the re-exec'd make
knows this is a temporary makefile and treats it as such.

To simplify, replace the --file and --makefile options taking a
filename, with just -f<filename> on re-exec.

Some examples of the rewrite:

  User command line               Re-exec command line
  -----------------               --------------------
  -f-                             --temp-stdin=<batch>
  --file -                        --temp-stdin=<batch>
  -f - --makefile a.mk            --temp-stdin=<batch> -fa.mk
  --file=a.mk                     -fa.mk
  -fa.mk                          -fa.mk
  -Rf a.mk                        -Rf a.mk
  -Rf-                            -R --temp-stdin=<batch>

* src/main.c (stdin_offset): Remember the offset into the makefiles
list of the batch file read from stdin.  Remove stdin_nm.
(struct command_switch): Create a new --temp-stdin option, which
also updates the makefiles list.
(main): Add the temporary filename to the string cache.
Move the tempfile handling after checking makefile arguments for "-"
so that files provided via --temp-stdin are also handled specially.
When rewriting re-exec options, we may need one more than we had
originally so create a new argv list.  Walk through the original
list and convert it to the new list, following the above process.
(decode_switches): Set the stdin_offset flag if we see --temp-stdin.
* tests/scripts/options/dash-f: Add many more tests, provided by
Dmitry Goncharov <dgoncharov@users.sf.net>.
2022-02-27 18:01:13 -05:00
..
dash-B [SV 102] Don't show unnecessary include file errors. 2016-04-09 20:06:46 -04:00
dash-C Refresh the test suite framework implementation. 2019-09-16 08:25:33 -04:00
dash-d * src/main.c (decode_debug_flags): [SV 607777] Preserve -d options 2021-09-06 20:36:15 -04:00
dash-e tests: Simplify customization of %ENV 2020-04-01 02:02:57 -04:00
dash-f [SV 62118] Correctly handle -f- options on re-exec 2022-02-27 18:01:13 -05:00
dash-I tests: Enhance output to contain filename/line number info 2021-11-27 14:03:44 -05:00
dash-k [SV 60595] Restart whenever any makefile is rebuilt 2021-09-03 12:08:11 -04:00
dash-l Add test suite support to Windows 2017-06-04 18:37:20 -04:00
dash-n * tests/run_make_test.pl: Fix support for valgrind. 2019-09-21 15:13:24 -04:00
dash-q [SV 47151] Exit with 1 when checking recursive make -q 2016-02-29 01:33:50 -05:00
dash-r tests: Allow run_make_test() to avoid passing -f 2022-02-27 17:47:42 -05:00
dash-s * main.c (switches): Add --no-silent to undo -s options. 2016-12-28 09:25:34 -05:00
dash-t Commit fix for bug #1418. 2003-03-25 00:15:25 +00:00
dash-W [SV 102] Don't show unnecessary include file errors. 2016-04-09 20:06:46 -04:00
eval Add test suite support to Windows 2017-06-04 18:37:20 -04:00
general Add test suite support to Windows 2017-06-04 18:37:20 -04:00
print-directory Obey order of multiple print/no-print directory options 2020-03-31 00:17:49 -04:00
symlinks * tests: Convert from File::Spec::Functions to File::Spec. 2019-09-21 16:37:56 -04:00
warn-undefined-variables Convert all "`'" quotes to "''" per new GNU Coding Standard guidelines. 2012-03-04 00:24:20 +00:00