[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1] libacpi: use temporary files for generated files
On 29.10.2020 11:57, Anthony PERARD wrote: > On Thu, Oct 29, 2020 at 09:47:09AM +0100, Jan Beulich wrote: >> On 28.10.2020 19:13, Anthony PERARD wrote: >>> On Tue, Oct 27, 2020 at 12:06:56PM +0100, Jan Beulich wrote: >>>> On 27.10.2020 11:57, Andrew Cooper wrote: >>>>> On 27/10/2020 10:37, Jan Beulich wrote: >>>>>> On 27.10.2020 11:27, Olaf Hering wrote: >>>>>>> Am Tue, 27 Oct 2020 11:16:04 +0100 >>>>>>> schrieb Jan Beulich <jbeulich@xxxxxxxx>: >>>>>>> >>>>>>>> This pattern is used when a rule consists of multiple commands >>>>>>>> having their output appended to one another's. >>>>>>> My understanding is: a rule is satisfied as soon as the file exists. >>>>>> No - once make has found that a rule's commands need running, it'll >>>>>> run the full set and only check again afterwards. >>>>> >>>>> It stops at the first command which fails. >>>>> >>>>> Olaf is correct, but the problem here is an incremental build issue, not >>>>> a parallel build issue. >>>>> >>>>> Intermediate files must not use the name of the target, or a failure and >>>>> re-build will use the (bogus) intermediate state rather than rebuilding >>>>> it. >>>> >>>> But there's no intermediate file here - the file gets created in one >>>> go. Furthermore doesn't make delete the target file(s) when a rule >>>> fails? (One may not want to rely on this, and hence indeed keep multi- >>>> part rules update intermediate files of different names.) >>> >>> What if something went badly enough and sed didn't managed to write the >>> whole file and make never had a chance to remove the bogus file? >> >> How's this different from an object file getting only partly written >> and not deleted? We'd have to use the temporary file approach in >> literally every rule if we wanted to cater for this. > > I though that things like `gcc' would write the final object to a > temporary place then rename it to the final destination, but that > doesn't seems to be the case. > > I tried to see what happens if the `sed' command fails, and the target is > created, empty, and doesn't gets deleted by make. So an incremental > build uses a broken file without trying to rebuild it. IOW it's rather a courtesy of the compiler / assembler / linker to delete their output files on error. > If we want `make' to delete target when a rule fails, I think we need to > add '.DELETE_ON_ERROR:' somewhere. Ah, indeed. I thought this was the default nowadays, but the doc says it isn't. I think this would be preferable over touching individual rules to go through temporary files. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |