Date: Wed, 20 Dec 2000 13:02:41 +0200 From: Peter Pentchev <roam@orbitel.bg> To: Alfred Perlstein <bright@wintelcom.net>, asami@FreeBSD.org, ports@FreeBSD.org Subject: Re: ports lockfile? Message-ID: <20001220130240.G644@ringworld.oblivion.bg> In-Reply-To: <20001220123326.F644@ringworld.oblivion.bg>; from roam@orbitel.bg on Wed, Dec 20, 2000 at 12:33:26PM %2B0200 References: <20001219113535.Q19572@fw.wintelcom.net> <20001220094157.C644@ringworld.oblivion.bg> <20001219235750.I19572@fw.wintelcom.net> <20001220121640.E644@ringworld.oblivion.bg> <20001220123326.F644@ringworld.oblivion.bg>
next in thread | previous in thread | raw e-mail | index | archive | help
(and yes, I love talking to myself ;) On Wed, Dec 20, 2000 at 12:33:26PM +0200, Peter Pentchev wrote: > 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 OK, so S// *can* substitute whole words. However, apparently I'm missing something in make's '.if' syntax. Anybody, hit me with a cluebar, hit me hard, tell me why should the attached complain about a malformed conditional in the LOCKDIRS != :S// test.. G'luck, Peter -- This sentence would be seven words long if it were six words shorter. .if ("${LOCKDIRS}" != "${LOCKDIRS:S,^${.CURDIR}$,,}") LOCKED= yes .else # set it explicitly to avoid inheriting a 'yes' LOCKED= no .endif pre-everything: .if ${LOCKED} != "yes" @${ECHO} "Attempting to acquire a lock on ${.CURDIR}/Makefile.." # I wonder if the following would result in a funny chain of LOCKDIRS # in a multi-port build make invocations.. @${ECHO} lockf ${.CURDIR}/Makefile make ${MAKEFLAGS} LOCKDIRS="${LOCKDIRS} ${.CURDIR}" .endif do-build: .if ${LOCKED} == "yes" @${ECHO} "the real build" .endif .include <bsd.port.mk> 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?20001220130240.G644>