On Thu, 2015-03-12 at 01:27 +0000, Duncan wrote: > Zac Medico posted on Wed, 11 Mar 2015 12:03:10 -0700 as excerpted: > > > On 03/11/2015 11:56 AM, Joakim Tjernlund wrote: > > > On Wed, 2015-03-11 at 11:34 -0700, Zac Medico wrote: > > > > On 03/11/2015 09:03 AM, Joakim Tjernlund wrote: > > > > > When developing code it would be really nice if one could run your > > > > > ebuild on that src tree as is(no > > > > > fetch, unpack etc.) > > > > > > > > The existing convention is to create an ebuild with version 9999 and > > > > use one of the live vcs eclasses > > > > such as git-r3 to pull the live sources in the src_unpack function. In > > > > a future EAPI, we plan to add > > > > some features related to this [1]. > > > > > > I think you misunderstand, [1] is not what I want to do(I think): > > > > > > Got my src working copy and made a few modds, not commitet yet. Now I > > > just want build/test etc. before > > > committing and to do that I just run > > > mytree/overlay/dev-util/myapp/myapp.ebuild compile and voila, my > > > code is built which I already have in mytree. > > > > Well, you can create a -9999 ebuild that copies your sources from > > $directory to $WORKDIR. Maybe use an > > environment to configure whether it pulls from a local directory or a vcs > > repository. > > @ Joakim T: > > FWIW, a commonly recommended user-level portage optimization is to point > $PORTAGE_TMPDIR at a tmpfs mount. As long as you have sufficient memory, > that lets all building take place in the tmpfs and thus in memory, > eliminating many read-accesses and > most/all write accesses to permanent storage during the build and > (fake-)install phases. > > In addition to speeding up emerge itself, this reduces build-time I/O, which > often becomes the bottleneck > on which other processes may be waiting as well, thus allowing other > processes more efficient access to > permanent storage while emerge is ongoing. Between this and setting > PORTAGE_NICENESS=20, emerge is /much/ > better behaved during builds, interrupting other processes much less and > thus letting you carry on with > other things while emerge is doing its thing, with far less interruption. > =:^) > > For instance, here I have /tmp as a tmpfs mount (with /var/tmp being a > bind-mount of the same tmpfs), and > in make.conf, have the line: > > PORTAGE_TMPDIR=/tmp > > Emerge then creates /tmp/portage, and within it, creates the usual cat/ pkg/ > build trees, etc, as it > emerges various packages. > > > Obviously, your sources in permanent storage are going to be cache-copied > into memory as you do the build anyway, and pointing PORTAGE_TMPDIR at tmpfs > then becomes a copy to > (tmpfs) memory only. While that doesn't technically eliminate the copies > (since the read into tmpfs will > cache and you'll have the tmpfs copy as well), it DOES mean most of the work > beyond the initial read into > memory will be memory-only, so you DO eliminate the permanent-storage copies. > > Is that sufficiently close to what you were looking to do? Beyond that, > as Zac suggests, just have the ebuild grab the sources from wherever you > put them as your src_unpack, as at that point it'll be a copy to tmpfs, and > thus take essentially the same > time (or even less since it'll avoid the build-time writes to permanent > storage) as doing the in-place > build directly. Plus, creating a tmpfs mount if necessary, and setting > PORTAGE_TMPDIR, is easy, and > you'll dramatically speed-up normal builds as well. =:^) >
No, there can be no copy of sources for what I want. It just gets in the way having to do that. Hacks like this seems to work: post_src_compile() { # make it compile every time rm -f ${PORTAGE_BUILDDIR}/.compiled } post_src_install() { # make it install every time rm -f ${PORTAGE_BUILDDIR}/.installed } #hmm, doesn't seem to be an post_package function #post_package() { # rm -f ${PORTAGE_BUILDDIR}/.packaged #} src_unpack() { #dir need to exist mkdir -p ${S} || die } src_compile() { EBUILDDIR=$(dirname ${FILESDIR}) MYTRUNK=${EBUILDDIR}/../../.. # add sandbox exceptions addwrite ${MYTRUNK} cd ${MYTRUNK} || die cd "${PN}" ..... }