On Tue, Mar 8, 2011 at 16:11, Philip Guenther <guent...@gmail.com> wrote: > On Tue, Mar 8, 2011 at 1:37 PM, Michael Witten <mfwit...@gmail.com> wrote: >> The `--dry-run' flag is supposed to be safe in that nothing >> in the file system is actually modified. > > That's not actually true. To quote the docs: > > `-n' > `--just-print' > `--dry-run' > `--recon' > "No-op". The activity is to print what recipe would be used to > make the targets up to date, but not actually execute it. Some > recipes are still executed, even with this flag (*note How the > `MAKE' Variable Works: MAKE Variable.). > > and then later on the same page: > > The `-n', `-t', and `-q' options do not affect recipe lines that > begin with `+' characters or contain the strings `$(MAKE)' or > `${MAKE}'. Note that only the line containing the `+' character or the > strings `$(MAKE)' or `${MAKE}' is run regardless of these options. > Other lines in the same rule are not run unless they too begin with `+' > or contain `$(MAKE)' or `${MAKE}' (*Note How the `MAKE' Variable Works: > MAKE Variable.) > > > At least part of that behavior is required by the POSIX specification > and has a few decades of history behind it.
Well, ok, but my patch still stands. According to [the development version of]: info '(make)Instead of Execution' we have: `-t' `--touch' "Touch". Marks targets as up to date without actually changing them. In other words, `make' pretends to update the targets but does not really change their contents; instead only their modified times are updated. Comparing this with the text quoted for `--dry-run', it can be seen that the operative words here are: `--dry-run' The activity is to print what recipe would be used TO MAKE THE TARGETS UP TO DATE, but not actually execute it. `--touch' MARKS TARGETS AS UP TO DATE without actually changing. Similarly, this is what my system's POSIX documentation: man 1p make has to say: -n Write commands that would be executed on standard output, but do not execute them. However, lines with a plus sign ( '+' ) prefix shall be executed. In this mode, lines with an at sign ( '@' ) character prefix shall be written to standard output. -t Update the modification time of each target as though a `touch target' had been executed. Targets that have prerequisites but no commands (see Target Rules ), or that are already up-to-date, shall not be touched in this manner. Write messages to standard output for each target file indicating the name of the file and that it was touched. Normally, the makefile command lines associated with each target are not executed. However, a command line with a plus sign ( '+' ) prefix shall be executed. In particular: -n Write COMMANDS THAT WOULD BE EXECUTED on standard output, but do not execute them. -t Update the modification time of each target AS THOUGH A `touch target' HAD BEEN EXECUTED. Indeed, `-t' is not simply a directive to touch the targets; in large part, it is meant to act as a substitute for the `recipe' (except for special command lines detailed above): -t ... Targets that have prerequisites but no commands (see Target Rules ), or that are already up-to-date, shall not be touched in this manner. Thus, it makes most sense for `--dry-run' (`-n') to mask `--touch' (`-t') rather than the other way around (which is the current, buggy, unexpected, possibly ruinous behavior). Sincerely, Michael Witten _______________________________________________ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make