Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 346089

Summary: gst-plugins-base appears to pull headers from wrong location during FEATURES="test"
Product: Gentoo Linux Reporter: Brant Gurganus <brant>
Component: Current packagesAssignee: GStreamer package maintainers <gstreamer>
Status: RESOLVED DUPLICATE    
Severity: normal CC: gnome
Priority: High    
Version: unspecified   
Hardware: AMD64   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Attachments: build log
ebuild environment

Description Brant Gurganus 2010-11-19 15:45:43 UTC
When upgrading from gst-plugins-base-0.10.29 to gst-plugins-base-0.10.30 with FEATURES="test" enabled, some of the components built during the FEATURES="test" phase will have warnings about implicitly being converted to pointers. On 64-bit systems such warnings will prevent the build from merging since ints and pointers are different sizes.

Reproducible: Always

Steps to Reproduce:
1. Merge gst-plugins-base-0.10.29.
2. Update to gst-plugins-base-0.10.30 with FEATURES="test" enabled.
Actual Results:  
 * QA Notice: Package has poor programming practices which may compile
 *            fine but exhibit random runtime failures.
 * libs/tag.c:1086: warning: implicit declaration of function ‘gst_tag_list_from_exif_buffer’
 * libs/tag.c:1111: warning: implicit declaration of function ‘gst_tag_list_to_exif_buffer’
 * libs/tag.c:1127: warning: implicit declaration of function ‘gst_tag_list_to_exif_buffer_with_tiff_header’
 * libs/tag.c:1128: warning: implicit declaration of function ‘gst_tag_list_from_exif_buffer_with_tiff_header’

 * 
 * QA Notice: Package has poor programming practices which may compile
 *            but will almost certainly crash on 64bit architectures.
 * 
 * Function `gst_tag_list_from_exif_buffer' implicitly converted to pointer at libs/tag.c:1086
 * Function `gst_tag_list_to_exif_buffer' implicitly converted to pointer at libs/tag.c:1111
 * Function `gst_tag_list_to_exif_buffer_with_tiff_header' implicitly converted to pointer at libs/tag.c:1127
 * Function `gst_tag_list_from_exif_buffer_with_tiff_header' implicitly converted to pointer at libs/tag.c:1128


Expected Results:  
I would expect the warnings to not occur and have the package merge successfully.

I searched about the functions in question and found in the GStreamer release notes that they are new API additions in 0.10.30. This lead me to think they might have an Include path in the wrong order such that it is getting headers from the live system (0.10.29) instead of the build directory (0.10.30). That would explain why prototypes are missing. I tested that theory by unmerging 0.10.29 so that there are no headers on the system. After doing that, 0.10.30 will merge fine. I have not yet investigated where the header paths are wrong.
Comment 1 Brant Gurganus 2010-11-19 15:46:50 UTC
Portage 2.2_rc93 (default/linux/amd64/2008.0, gcc-4.4.5, glibc-2.11.2-r2, 2.6.36-gentoo-r1 x86_64)
=================================================================
                        System Settings
=================================================================
System uname: Linux-2.6.36-gentoo-r1-x86_64-Intel-R-_Core-TM-2_Quad_CPU_Q9650_@_3.00GHz-with-gentoo-2.1.8
Timestamp of tree: Fri, 19 Nov 2010 06:30:23 +0000
app-shells/bash:     4.1_p9
dev-lang/python:     2.6.5-r3
dev-util/cmake:      2.8.1-r2
sys-apps/baselayout: 2.1.8-r2
sys-apps/openrc:     0.6.4-r1
sys-apps/sandbox:    2.3-r1
sys-devel/autoconf:  2.13, 2.68
sys-devel/automake:  1.9.6-r3, 1.10.3, 1.11.1
sys-devel/binutils:  2.20.1
sys-devel/gcc:       4.4.5
sys-devel/gcc-config: 1.4.1
sys-devel/libtool:   2.4
sys-devel/make:      3.81-r2
virtual/os-headers:  2.6.32 (sys-kernel/linux-headers)
Repositories: funtoo
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="* -@EULA AdobeFlash-10.1"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O3 -pipe -g -fstack-protector-all"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /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 /etc/udev/rules.d"
CXXFLAGS="-march=native -O3 -pipe -g -fstack-protector-all"
DISTDIR="/usr/portage/distfiles"
FEATURES="assume-digests binpkg-logs distlocks fixlafiles fixpackages installsources mini-manifest news parallel-fetch preserve-libs protect-owned sandbox sfperms splitdebug strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox"
GENTOO_MIRRORS=""
LANG="en_US.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
LINGUAS="en_US en"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY=""
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="X a52 aac aalib acl acpi adns alac alsa amd64 apache2 avahi bash-completion berkdb bzip2 cairo cdda cdr cjk cli cracklib crypt cups curl cvs cxx dbus dga djvu dri dvd dvdr dvdread eds encode esd exif expat fam ffmpeg fftw firefox flac fontconfig gd gdbm geoip gif gimp gmp gnome gnome-keyring gnutls gpm graphviz gsm gstreamer gtk hal hardened iconv icu idn imagemagick imlib ipv6 jbig jpeg jpeg2k lame lcms libcaca libnotify libsamplerate lzo mad mikmod milter mmap mmx mng modules mono mp3 mpeg msn mudflap multilib ncurses networkmanager nls nntp nptl nptlonly nsplugin offensive ogg openexr opengl openmp pam pch pcre pdf perl plotutils png policykit pppd profile pulseaudio python raw readline scanner session smp sndfile soap speex spell sqlite sse sse2 ssl startup-notification subversion svg sysfs syslog taglib tcpd theora threads tiff tk truetype unicode usb vcd vorbis wavpack wifi wmf wxwidgets x264 xattr xft xine xinerama xml xmp xorg xpm xscreensaver xv xvid zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci 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" 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_US en" LIRC_DEVICES="mceusb" PHP_TARGETS="php5-2" RUBY_TARGETS="ruby18" 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, FFLAGS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Comment 2 Brant Gurganus 2010-11-19 15:47:30 UTC
[ebuild     U ] media-libs/gst-plugins-base-0.10.30 [0.10.29] USE="nls orc%* -debug (-introspection)"
Comment 3 Brant Gurganus 2010-11-19 15:49:30 UTC
Created attachment 254843 [details]
build log
Comment 4 Brant Gurganus 2010-11-19 15:50:33 UTC
Created attachment 254845 [details]
ebuild environment
Comment 5 Brant Gurganus 2010-11-19 17:15:40 UTC
The command used to compile the file resulting in those warnings is:

x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..    -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2   -I../../gst-libs -I../../gst-libs -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2    -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs   -g    -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2   -DGST_TEST_FILES_PATH="\"../../tests/files\"" -march=native -pipe -g -fstack-protector-all -O2 -MT libs_tag-tag.o -MD -MP -MF .deps/libs_tag-tag.Tpo -c -o libs_tag-tag.o `test -f 'libs/tag.c' || echo './'`libs/tag.c

In tag.c, <gst/tag/tag.h> is included. Because it is in angle brackets, it wants to come from the system path (build in or set by the -I option with gcc), not the local relative path.

However, the compiler command used has only -I. and -I../.. appearing before -I/usr/include/gstreamer-0.10

There is no gst/tag/tag.h in . or ../.. so it ends up using the system one at /usr/include/gstreamer-0.10/gst/tag/tag.h. However, this package is supplying that file so it should always come from the package and never from the system.

If gst-plugins-base-0.29 is unmerged, gst/tag/tag.h won't be found in /usr/include/gstreamer-0.10 so it will continue through the include paths to ../../gst-libs which is where it will find the correct gst/tag/tag.h to include.

I don't yet know what the correct fix would be, but it looks like an upstream issue and not an issue with the way the ebuild is configuring it.
Comment 6 Brant Gurganus 2010-11-19 17:26:38 UTC
I think the issue might be in tests/check/Makefile.am:

libs_tag_CFLAGS = \
        $(GST_BASE_CFLAGS) \
        $(GST_PLUGINS_BASE_CFLAGS) \
        $(AM_CFLAGS)

Comparing with _CFLAGS rules and with what I'm seeing during build, I think $(GST_BASE_CFLAGS) should be coming after $(GST_PLUGINS_BASE_CFLAGS). I manually switched the order of those and that took care of the issue.
Comment 7 Brant Gurganus 2010-11-19 17:31:14 UTC
I filed this upstream at https://bugzilla.gnome.org/show_bug.cgi?id=635286
Comment 9 Arun Raghavan (RETIRED) gentoo-dev 2010-11-27 11:32:32 UTC
Please sync your tree and rebuild - this has already been fixed:

  22 Nov 2010; Arun Raghavan <ford_prefect@gentoo.org>
  gst-plugins-base-0.10.30.ebuild,
  +files/gst-plugins-base-0.10.30-fix-tag-test-linking.patch:
  Fix include order problem in tags test. Fixes bug #346169.

*** This bug has been marked as a duplicate of bug 346169 ***