Date: Wed, 20 Dec 2000 12:33:26 +0200 From: Peter Pentchev <roam@orbitel.bg> To: Alfred Perlstein <bright@wintelcom.net> Cc: asami@FreeBSD.org, ports@FreeBSD.org Subject: Re: ports lockfile? Message-ID: <20001220123326.F644@ringworld.oblivion.bg> In-Reply-To: <20001220121640.E644@ringworld.oblivion.bg>; from roam@orbitel.bg on Wed, Dec 20, 2000 at 12:16:41PM %2B0200 References: <20001219113535.Q19572@fw.wintelcom.net> <20001220094157.C644@ringworld.oblivion.bg> <20001219235750.I19572@fw.wintelcom.net> <20001220121640.E644@ringworld.oblivion.bg>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Dec 20, 2000 at 12:16:41PM +0200, Peter Pentchev wrote: > On Tue, Dec 19, 2000 at 11:57:50PM -0800, Alfred Perlstein wrote: [snip] > > > > Well here's the very tricky part that I really haven't worked out > > how to do this, the lockf program runs a program with the lock, so > > I need to make the lockf program run make again. > > > > If I define something when re-running the make then any recursive > > makes will have this defined right? So I won't be able to lock > > the dependancy makes. > > > > It'd be interesting to add an option to make so that it will lock > > the initial makefile used. That sounds pretty hackish so any > > alternative ideas would be welcome and helpful. > > I'm thinking along the lines of having a LOCKDIRS variable, listing > all locked dirs from all ports in the build process, then having > bsd.port.mk check for it *outside any targets*, if that is possible. > (most probably not.. just thinking out loud, please ignore the static ;) > If it is not defined, bsd.port.mk should do something like > > lockf Makefile make ${MAKEFLAGS} LOCKDIRS="${LOCKDIRS} ${.CURDIR}" > > I hope what I've written is at least vaguely understandable; fact is, > I myself am not very clear on what I mean :) Got no time to play > around with this right now, unfortunately :( Just tossing out > a wild idea.. More random thoughts about 'checking outside of any targets'. I think bsd.port.mk could perform a check for ${.CURDIR} being listed in ${LOCKDIRS} as near the start as possible, and set an appropriate flag variable. Later, all targets check this flag, and if there is no lock obtained, they simply revert to no-ops. This should avoid a possible problem with: make w/o lock - check for lock (LOCKDIRS), find none - flock make, adding .CURDIR to LOCKDIRS --- check for lock, detect one --- build --- exit releasing lock - proceed with build - oops! :) Now.. is there a way to do variable substitution so that we S// out a whole (whitespace-delimited) word (in this case, ${.CURDIR}) out of a variable (in this case, LOCKDIRS) ? The lock-check would then become something like .if ${LOCKDIR} == ${LOCKDIR:S,something about ${.CURDIR},,} # no lock - the S// substituted nothing # set a 'do the lockf and noop everything else' flag .else # set a 'locked, proceed as usual' flag (or just do not set the other one :) .endif G'luck, Peter -- If I were you, who would be reading this sentence? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001220123326.F644>