Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 409045 - vim 7.3.x compile failing due to undefined subroutine ExtUtils::ParseXS::errors
Summary: vim 7.3.x compile failing due to undefined subroutine ExtUtils::ParseXS::errors
Status: RESOLVED INVALID
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo Perl team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-20 18:10 UTC by J.C. Wren
Modified: 2012-03-30 15:33 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
/var/tmp/portage/app-editors/vim-7.3.462/temp/build.log (build.log,30.52 KB, text/plain)
2012-03-20 18:12 UTC, J.C. Wren
Details

Note You need to log in before you can comment on or make changes to this bug.
Description J.C. Wren 2012-03-20 18:10:53 UTC
vim 7.3.x failing to compile because of undefined subroutine ExtUtils::ParseXS::errors. 

Reproducible: Always

Steps to Reproduce:
1.emerge -u vim
2.
3.
Actual Results:  
/usr/bin/perl -e 'unless ( $] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$_ $_\n" }}' > auto/if_perl.c
/usr/bin/perl /usr/bin/xsubpp -prototypes -typemap \
    /usr/lib/perl5/5.12.4/ExtUtils/typemap if_perl.xs >> auto/if_perl.c
Undefined subroutine &ExtUtils::ParseXS::errors called at /usr/bin/xsubpp line 44.
make[1]: *** [auto/if_perl.c] Error 255
make[1]: Leaving directory `/var/tmp/portage/app-editors/vim-7.3.462/work/vim73/src'
make: *** [first] Error 2
emake failed


Expected Results:  
vim compiles, installs.

Emerged perl and libperl with the same USE flags per https://bugs.gentoo.org/show_bug.cgi?id=18129 after experience that issue. https://bugs.gentoo.org/show_bug.cgi?id=378107 addressed this, however it's marked as closed/resolved and is unable to be re-opened.

I haven't been able to compile vim for a couple months now, and it's hard to believe others aren't hitting this. It's occurring on 4 machines, two running ACCEPT="x86", the other two with ACCEPT="~x86". One of the x86 is a hardened install, one of the ~x86 is also hardened, and the other two vanilla machines.

Emerge info below, build log attached.


# emerge --info
Portage 2.1.10.49 (default/linux/x86/10.0, gcc-4.5.3, glibc-2.14.1-r2, 3.2.5-gentoo-quad i686)
=================================================================
System uname: Linux-3.2.5-gentoo-quad-i686-Intel-R-_Core-TM-2_Quad_CPU_Q9300_@_2.50GHz-with-gentoo-2.1
Timestamp of tree: Tue, 20 Mar 2012 04:45:01 +0000
app-shells/bash:          4.2_p24
dev-java/java-config:     2.1.11-r3
dev-lang/python:          2.7.2-r3, 3.2.2
dev-util/cmake:           2.8.7-r5
dev-util/pkgconfig:       0.26
sys-apps/baselayout:      2.1
sys-apps/openrc:          0.9.9.3
sys-apps/sandbox:         2.5
sys-devel/autoconf:       2.13, 2.68
sys-devel/automake:       1.10.3, 1.11.3
sys-devel/binutils:       2.22-r1
sys-devel/gcc:            4.5.3-r2
sys-devel/gcc-config:     1.5.1-r1
sys-devel/libtool:        2.4.2
sys-devel/make:           3.82-r3
sys-kernel/linux-headers: 3.2-r1 (virtual/os-headers)
sys-libs/glibc:           2.14.1-r2
Repositories: gentoo msp430 local-repo ardunio
ACCEPT_KEYWORDS="x86 ~arm ~x86"
ACCEPT_LICENSE="*"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -march=core2 -pipe -fomit-frame-pointer"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /var/qmail/alias /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-O2 -march=core2 -pipe -fomit-frame-pointer"
DISTDIR="/usr/portage/distfiles"
FEATURES="assume-digests binpkg-logs distlocks ebuild-locks fixlafiles news parallel-fetch protect-owned sandbox sfperms splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"
FFLAGS=""
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
LINGUAS="en"
MAKEOPTS="-j1"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/var/lib/layman/msp430 /usr/local/portage /usr/local/overlays/arduino"
SYNC="rsync://portage.private.com/gentoo-portage"
USE="3dnow 3dnowext X a52 accessibility acl acpi alsa apache2 apng arts berkdb bzip2 cairo cdr cli client consolekit cracklib cups cupsddk curl cxx dbus declarative device-mapper dri dvd dvdr dvdread enca encode esd extras fam ffmpeg firefox flac fortran ftpd fuse gd gdbm gnutls gphoto2 gpm gstreamer gtk gudev hpcups httpd iconv icu imagemagick jpeg kde kdepim kpathsea lcms libwww lua mad messenger mikmod minizip mmx mmxext mng modules mozdevelop mozdom mozilla moznocompose mp3 mpeg mplayer mudflap mysql mysqli ncurses nfsv3 nls nptl nptlonly nvidia offensive ogg opengl openmp pam pcre pda pdf perl plasma png policykit pppd python qt3support qt4 quicktime rdoc readline samba sdl secure-delete semantic-desktop server session smp snmp spell sql sqlite sse ssl static-libs subversion svg sysfs tagwriting tcpd threads tiff tk truetype udev unicode usb vorbis webkit win32codecs x86 xinerama xml xorg xv zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en" PHP_TARGETS="php5-3" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="nvidia" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Comment 1 J.C. Wren 2012-03-20 18:12:55 UTC
Created attachment 306037 [details]
/var/tmp/portage/app-editors/vim-7.3.462/temp/build.log
Comment 2 J.C. Wren 2012-03-20 18:23:32 UTC
Not sure if this has any bearing on the problem.

# emerge -s ParseXS
Searching...    
[ Results for search key : ParseXS ]
[ Applications found : 2 ]

*  perl-core/ExtUtils-ParseXS
      Latest version available: 2.22.06
      Latest version installed: 2.22.06
      Size of files: 39 kB
      Homepage:      http://search.cpan.org/dist/ExtUtils-ParseXS/
      Description:   Converts Perl XS code into C code
      License:       || ( Artistic GPL-1 GPL-2 GPL-3 )

*  virtual/perl-ExtUtils-ParseXS
      Latest version available: 2.22.06
      Latest version installed: 2.22.06
      Size of files: 0 kB
      Homepage:      
      Description:   Converts Perl XS code into C code
      License:       

# grep VERSION /usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS.pm
  $VERSION = '3.15';
  (other references to VERSION omitted)
#
Comment 3 Torsten Veller (RETIRED) gentoo-dev 2012-03-20 19:20:13 UTC
(In reply to comment #2)

> # grep VERSION /usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS.pm
>   $VERSION = '3.15';
>   (other references to VERSION omitted)

How did you install this ExtUtils::ParseXS version? (Ebuilds do not (well, they should not -- and ExtUtils-ParseXS *does* not) install into the site_perl/ directory.)
Comment 4 J.C. Wren 2012-03-20 19:22:54 UTC
3.15 would have been installed with the CPAN shell. Here's all the files that match ParseXS.*pm

# locate ParseXS | grep pm
/usr/lib/perl5/5.12.4/ExtUtils/ParseXS.pm
/usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS.pm
/usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS/Constants.pm
/usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS/CountLines.pm
/usr/lib/perl5/site_perl/5.12.4/ExtUtils/ParseXS/Utilities.pm
/usr/share/man/man3/ExtUtils::ParseXS.3pm
/usr/share/man/man3/ExtUtils::ParseXS::Constants.3pm
/usr/share/man/man3/ExtUtils::ParseXS::Utilities.3pm
Comment 5 Torsten Veller (RETIRED) gentoo-dev 2012-03-20 19:42:00 UTC
(In reply to comment #4)
> 3.15 would have been installed with the CPAN shell. Here's all the files
> that match ParseXS.*pm

Short answer: Remove the version installed via CPAN and install the package.masked ebuild if you want to help testing and fixing the other broken configure scripts.

Using CPAN to install dual-life modules seems to be problematic.

Thanks for the bug report. Maybe I can think of a better way to solve the problem by using Perl's {site,vendor}{prefix,bin,script,...}exp settings (without the use of the alternatives.eclass symlinks).
Comment 6 J.C. Wren 2012-03-20 20:01:04 UTC
I know this probably seems like a naive question, but what's the best way to unmask the version in portage? Perhaps this?

echo ">=perl-core/ExtUtils-ParseXS-3.0" > /etc/portage/package.mask/parsexs
echo ">=virtual/perl-ExtUtils-ParseXS-3.0" >> /etc/portage/package.mask/parsexs

I'm not sure why/how the CPAN version was installed. Some other package may have demanded it when upgrading another module in CPAN. And I've always been a little concerned about perl modules pulled from portage vs those from CPAN.
Comment 7 Torsten Veller (RETIRED) gentoo-dev 2012-03-21 11:43:55 UTC
(In reply to comment #6)
> I know this probably seems like a naive question, but what's the best way to
> unmask the version in portage? Perhaps this?
> 
> echo ">=perl-core/ExtUtils-ParseXS-3.0" > /etc/portage/package.mask/parsexs
> echo ">=virtual/perl-ExtUtils-ParseXS-3.0" >>
> /etc/portage/package.mask/parsexs

That should be package.unmask. 
You copied the package.mask entry and added it to package.unmask.
Or use portage's autounmask feature:
emerge -1av '>=virtual/perl-ExtUtils-ParseXS-3.0' --autounmask --autounmask-write
(see man emerge)
Comment 8 Kent Fredric (IRC: kent\n) (RETIRED) gentoo-dev 2012-03-21 12:02:12 UTC
(In reply to comment #6)
> I know this probably seems like a naive question, but what's the best way to
> unmask the version in portage? Perhaps this?
> 
> echo ">=perl-core/ExtUtils-ParseXS-3.0" > /etc/portage/package.mask/parsexs
> echo ">=virtual/perl-ExtUtils-ParseXS-3.0" >>
> /etc/portage/package.mask/parsexs
> 
> I'm not sure why/how the CPAN version was installed. Some other package may
> have demanded it when upgrading another module in CPAN. And I've always been
> a little concerned about perl modules pulled from portage vs those from CPAN.


You probably should avoid touching system perl with CPAN* wherever possible. 

The easy solutions to this are local::lib ( dev-perl/local-lib  on perl-experimental )  which gives you a user-centric install directory for your modules which Just Works,  or perlbrew ( dev-perl/App-perlbrew on perl-experimental ) which allows you to compile arbitrary versions of perls and have them installed within the user profile, on top of having a private library. 

local::lib : https://metacpan.org/module/local::lib 
perlbrew   : https://metacpan.org/module/App::perlbrew
perl-experiemental overlay: git.overlays.gentoo.org/gitweb/?p=proj/perl-overlay.git 

You probably knew all this, and I may have told you before, but its hard to know who I have and haven't told and hard to know what to assume people know, so I regurgitate something like this every time I see "Installing to / with CPAN" , apologies if this is repetitive. 

While I'm here, I may as well also mention `cpanm` , https://metacpan.org/module/App::cpanminus , dev-perl/App-cpanm on perl-experimental.   

</regurgitation>
Comment 9 J.C. Wren 2012-03-21 20:22:08 UTC
Actually, I did echo to package.unmask/parsexs but when I typed in the line, I typed the wrong thing :)  Regardless, I deleted package.unmask and used the emerge command.

Installed 3.15 out of portage (verified by looking at VERSION in ParseXS.pm) and I'm back to this mess:

if_perl.c:1703:1: error: static declaration of 'XS_VIBUF_Delete' follows non-static declaration
if_perl.xs:932:1: note: previous declaration of 'XS_VIBUF_Delete' was here
if_perl.c:1780:1: error: static declaration of 'XS_VIBUF_Append' follows non-static declaration
if_perl.xs:933:1: note: previous declaration of 'XS_VIBUF_Append' was here
make[1]: *** [objects/if_perl.o] Error 1
make[1]: Leaving directory `/var/tmp/portage/app-editors/vim-7.3.462/work/vim73/src'
make: *** [first] Error 2
emake failed

re-emerged perl and libperl, tried it again, same results.
Comment 10 J.C. Wren 2012-03-21 20:32:07 UTC
(In reply to comment #8)
> (In reply to comment #6)
> > I know this probably seems like a naive question, but what's the best way to
> > unmask the version in portage? Perhaps this?
> > 
> > echo ">=perl-core/ExtUtils-ParseXS-3.0" > /etc/portage/package.mask/parsexs
> > echo ">=virtual/perl-ExtUtils-ParseXS-3.0" >>
> > /etc/portage/package.mask/parsexs
> > 
> > I'm not sure why/how the CPAN version was installed. Some other package may
> > have demanded it when upgrading another module in CPAN. And I've always been
> > a little concerned about perl modules pulled from portage vs those from CPAN.
> 
> 
> You probably should avoid touching system perl with CPAN* wherever possible. 
> 
> The easy solutions to this are local::lib ( dev-perl/local-lib  on
> perl-experimental )  which gives you a user-centric install directory for
> your modules which Just Works,  or perlbrew ( dev-perl/App-perlbrew on
> perl-experimental ) which allows you to compile arbitrary versions of perls
> and have them installed within the user profile, on top of having a private
> library. 
> 
> local::lib : https://metacpan.org/module/local::lib 
> perlbrew   : https://metacpan.org/module/App::perlbrew
> perl-experiemental overlay:
> git.overlays.gentoo.org/gitweb/?p=proj/perl-overlay.git 
> 
> You probably knew all this, and I may have told you before, but its hard to
> know who I have and haven't told and hard to know what to assume people
> know, so I regurgitate something like this every time I see "Installing to /
> with CPAN" , apologies if this is repetitive. 
> 
> While I'm here, I may as well also mention `cpanm` ,
> https://metacpan.org/module/App::cpanminus , dev-perl/App-cpanm on
> perl-experimental.   
> 
> </regurgitation>

No problem on the "maybe I told you this before", I understand where you're coming from.

It seems to me if there are system components that rely on specific versions of things in perl, THEY should be creating a private local::lib. When I upgrade the  system-wide modules, I'm generally doing this for a reason. I know what modules *my* code uses, and it doesn't seem like I should have to protect what the system needs. Some of my applications run under different UIDs, and having to worry if the local::lib needs to be upgraded for them or not would turn into a major PITA, not to mention the amount of duplication.

I'm not being accusatory or anything here, and I'm certainly open to other ideas and explanations. I've been running CPAN upgrades system-wide for a loooong time, and this is the first time that I recall where it broke something like this.

Actually, why does vim even need perl?
Comment 11 Torsten Veller (RETIRED) gentoo-dev 2012-03-29 13:31:54 UTC
(In reply to comment #9)
> Installed 3.15 out of portage (verified by looking at VERSION in ParseXS.pm)
> and I'm back to this mess:
> 
> if_perl.c:1703:1: error: static declaration of 'XS_VIBUF_Delete' follows
> non-static declaration
...
> re-emerged perl and libperl, tried it again, same results.

This should be fixed in the latest vim (as already mentioned in bug 378107 comment 30).

(In reply to comment #10)
> Actually, why does vim even need perl?

http://vimdoc.sourceforge.net/htmldoc/if_perl.html

I think there is nothing for the perl team here to do.  Closing the bug.
Ah right, I am trying to remember the site, alternatives.eclass problem.
Comment 12 J.C. Wren 2012-03-30 15:33:01 UTC
This seems to be resolved. I'm able to finally compile vim on all three machines.

Thanks!