I tried upgrading my gentoo box from parrot 0.4.0 to 0.4.2 by copying
the ebuild for 0.4.0 to 0.4.2 and emerging that.

It failed in the make install phase when it tried to install the
installable_ files to the live filesystem rather than to the install
target tree.

The ebuild calls make install with args that result in this invocation
of install_files.pl:

,----
| /usr/bin/perl5.8.8 tools/dev/install_files.pl \
|     --buildprefix=/portage/parrot-0.4.2/image/ \
|     --prefix=/usr/lib/parrot-0.4.2 \
|     --exec-prefix=/usr/lib/parrot-0.4.2 \
|     --bindir=/usr/lib/parrot-0.4.2/bin \
|     --libdir=/usr/lib/parrot-0.4.2/lib \
|     --includedir=/usr/lib/parrot-0.4.2/include \
|     --destdir= \
|     --docdir=/usr/lib/parrot-0.4.2/share/doc/parrot \
|     MANIFEST MANIFEST.generated
`----

Running that with --dry-run=1 results in this at the end:

,----
| ...
| runtime/parrot/library/parrotlib.pbc -> 
/portage/parrot-0.4.2/image/usr/lib/parrot-0.4.2/lib/parrot/library/parrotlib.pbc
| runtime/parrot/library/pcre.pbc -> 
/portage/parrot-0.4.2/image/usr/lib/parrot-0.4.2/lib/parrot/library/pcre.pbc
| installable_disassemble -> /usr/lib/parrot-0.4.2/bin/disassemble
| installable_disassemble.exe -> /usr/lib/parrot-0.4.2/bin/disassemble.exe
| ...
`----

As you can see, the installable files are not prefixed by the value of
the --buildprefix as every other file in the MANIFEST.generated is.

The install_files.pl in 0.4.0 lacked @installable_exe and just
used @files.  Just before pushing to @files, this is run:

,----
| $dest = File::Spec->catdir($options{buildprefix}, $dest)
|   if $options{buildprefix};
`----

but that is not run before pushing to @installable_exe.

I see that --destdir was also added since 0.4.0, and changing the
ebuild to use DESTDIR=${D} instead of BUILDPREFIX=${D} does allow
the install to complete.  But I wonder what the correct results
should be when both DESTDIR and BUILDPREFIX are specified to make?

-JimC
-- 
James H. Cloos, Jr. <[EMAIL PROTECTED]>

Reply via email to