Re: epel 6 fedpkg build or koji scratch builds failing — I'm stumped

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Richard W.M. Jones wrote:
> On Thu, Nov 24, 2011 at 03:01:03PM +0000, Paul Howarth wrote:
>> http://marc.info/?l=pptpclient-devel&m=132102054518031
>
> This is indeed rather unexpected behaviour of make!
>
> BTW I think your patch is incomplete, since it will create an
> incomplete config.h if the disk runs out of space.  I think this would
> be better, and should also avoid the parallel make problem:
>
> config.h:
> 	echo "/* text added by Makefile target config.h */" > $@-t
> 	echo "#define PPTP_LINUX_VERSION \"$(VERSION)$(RELEASE)\"" >> $@-t
> 	echo "#define PPPD_BINARY \"$(PPPD)\"" >> $@-t
> 	echo "#define IP_BINARY \"$(IP)\"" >> $@-t
> 	mv $@-t $@

Yes, that is better and does solve the problem.

Here's a good rule I've been following since I was first burned by this:
"never redirect directly to a Makefile target". (where "target" means $@
or any literal that is equivalent).  That means redirect output to a
temporary file like Rich did above, and only when that process is known
to have succeeded do you rename the temporary file to $@.

However, I would volunteer some additional suggestions:

  - use a {...} group (cheaper than a (...) subshell) so we redirect only once;
    that reduces the duplication of the "$@-t", and eliminates the dichotomy
    of the initial "> $@-t", while all subsequent ones are ">> $@-t".

  - use outer single quotes so you don't have to backslash-escape the
    inner double quote chars.  less syntax is more maintainable.

  - make the file read-only, so it is clearer that it is generated,
    and thus harder to change accidentally.  The only down-side to
    this part is that you then have to be careful to remove any
    preexisting $@ or $@-t, since redirecting onto a read-only file
    will often fail.

config.h:
        rm -f $@ $@-t;							\
	{								\
	  echo '/* text added by Makefile target config.h */';		\
	  echo '#define PPTP_LINUX_VERSION "$(VERSION)$(RELEASE)"';	\
	  echo '#define PPPD_BINARY "$(PPPD)"';				\
	  echo '#define IP_BINARY "$(IP)"';				\
	} > $@-t && chmod a-w $@-t && mv $@-t $@
-- 
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/devel



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux