Bug 182049

Summary: problem with qt4 plugins and clean room builds (poudriere)
Product: Ports & Packages Reporter: dennis.noordsij
Component: Individual Port(s)Assignee: freebsd-kde (group) <kde>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Latest   
Hardware: Any   
OS: Any   

Description dennis.noordsij 2013-09-12 20:10:00 UTC
The x11-toolkits/qt4-gui and devel/qt4-corelib Makefiles define:
   USES=pkgconfig

(a build-time dependency on pkg-config)

The configure script detects the existence of pkg-config, and creates
the build key as follows:
  "x86_64 usr/local/share/qt4/mkspecs/freebsd g++-4 full-config"
Note the "full-config".

(The build key is an identifier Qt uses to determine wether plugins were
compiled with the same settings, architecture, and so on. Bear with me)

Then:

graphics/qt4-imageformats and graphics/qt4-iconengines do NOT define
USES=pkgconfig

The result is that when building these in a clean room build environment
such as poudriere, the binary package for x11-toolkits/qt4-gui is installed
as one of the dependencies, however, pkg-config is _not_ installed.

The configure script detects the absence of pkg-config, and creates the
build key as follows:
  "x86_64 usr/local/share/qt4/mkspecs/freebsd g++-4 no-pkg-config"
Note the "no-pkg-config"

The result is that Qt refuses to load the built plugins with the following
message:

The plugin '/usr/local/lib/qt4/plugins/imageformats/libqtiff.so' uses incompatible Qt library. Expected build key "x86_64 usr/local/share/qt4/mkspecs/freebsd g++-4 full-config", got "x86_64 usr/local/share/qt4/mkspecs/freebsd g++-4 no-pkg-config"


If one does not use a clean room build, one usually installs the plugins
after having built qt4-gui, and then pkg-config will still be installed
as a requirement for qt4-gui, so the plugins are built with the correct
build key (i.e. the same configuration).

Fix: 

Add

  USES=pkgconfig

to /usr/ports/graphics/qt4-imageformats/Makefile,
and /usr/ports/graphics/qt4-iconengines/Makefile

(Note: there may be more qt4 plugin ports, the same would apply to them)
How-To-Repeat: Build x11-toolkits/qt4-gui in poudriere, then build graphics/qt4-imageformats
in poudriere.


A good output (note absence of "no-pkg-config"):

Configuration ..........  release shared dll largefile stl mmx 3dnow sse sse2 sse3 ssse3  minimal-config small-config medium-config large-config full-config qt3support phonon accessibility reduce_exports ipv6 clock-gettime clock-monotonic getaddrinfo ipv6ifname getifaddrs system-jpeg system-mng system-png png system-tiff system-freetype system-zlib nis gnu-libiconv glib openssl x11sm xshape xsync xrender mitshm fontconfig xkb icu concurrent xmlpatterns multimedia audio-backend svg script scripttools declarative release


A bad output (note presence of "no-pkg-config"):

Configuration ..........  release shared dll largefile stl mmx 3dnow sse sse2 sse3 ssse3  minimal-config small-config medium-config large-config full-config no-pkg-config qt3support phonon accessibility reduce_exports ipv6 clock-gettime clock-monotonic getaddrinfo ipv6ifname getifaddrs system-jpeg system-mng system-png png system-tiff system-freetype system-zlib nis gnu-libiconv openssl x11sm xshape xsync xrender mitshm fontconfig xkb icu concurrent xmlpatterns multimedia audio-backend svg script scripttools declarative release
Comment 1 Mark Linimon freebsd_committer freebsd_triage 2013-09-14 02:48:16 UTC
Responsible Changed
From-To: freebsd-ports-bugs->kde

Apparently applies to both graphics/qt4-imageformats and 
graphics/qt4-iconengines.
Comment 2 Raphael Kubo da Costa freebsd_committer freebsd_triage 2013-09-30 00:12:45 UTC
State Changed
From-To: open->patched

It has been fixed in our area51 repository (r9501), and will be part of 
our 4.8.5 update hopefully soon.
Comment 3 Raphael Kubo da Costa freebsd_committer freebsd_triage 2013-10-14 00:17:10 UTC
State Changed
From-To: patched->closed

Committed. Thanks!
Comment 4 Raphael Kubo da Costa freebsd_committer freebsd_triage 2013-10-14 09:33:02 UTC
Sorry, I thought the commit filter would be smarter. This was committed
in r330266: http://svnweb.freebsd.org/changeset/ports/330266