On Tue, Mar 8, 2011 at 18:12, Michael Witten <[email protected]> wrote: > On Tue, Mar 8, 2011 at 16:11, Philip Guenther <[email protected]> wrote: >> On Tue, Mar 8, 2011 at 1:37 PM, Michael Witten <[email protected]> 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 >
Um... Hello? _______________________________________________ Bug-make mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-make
