Patchwork qt4: remove trailing slash from prefix

login
register
mail settings
Submitter Paul Barker
Date May 7, 2013, 9:05 a.m.
Message ID <1367917522-29378-1-git-send-email-paul@paulbarker.me.uk>
Download mbox | patch
Permalink /patch/49399/
State Accepted
Commit 61a7329a5c1f0b84f447256134f5a77917f07f38
Headers show

Comments

Paul Barker - May 7, 2013, 9:05 a.m.
The trailing slashs on "Prefix=${prefix}/" and "-prefix ${prefix}/" are passed
through to the generated pkgconfig files and may be joined to paths like
"/include" yielding a final path with a double forward-slash (eg.
"/usr//include"). This may end up in the debugging symbols in other applications
or libraries which depend on qt4 which in turn causes the debugedit program to
fail with the message "canonicalization unexpectedly shrank by one character"
when it tries to replace the double forward-slash with a single forward-slash.
Thus the function split_and_strip_files fails and ultimately do_package fails.

As this slash is removed from the prefix it is added into the regular expression
used to fix up pkgconfig files later in the recipe.

This error was seen in vlc in meta-openembedded and should be solved by this
change in openembedded-core.

Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
---
 meta/recipes-qt/qt4/qt4.inc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
Paul Barker - May 8, 2013, 6:07 p.m.
On 7 May 2013 10:05, Paul Barker <paul@paulbarker.me.uk> wrote:
> The trailing slashs on "Prefix=${prefix}/" and "-prefix ${prefix}/" are passed
> through to the generated pkgconfig files and may be joined to paths like
> "/include" yielding a final path with a double forward-slash (eg.
> "/usr//include"). This may end up in the debugging symbols in other applications
> or libraries which depend on qt4 which in turn causes the debugedit program to
> fail with the message "canonicalization unexpectedly shrank by one character"
> when it tries to replace the double forward-slash with a single forward-slash.
> Thus the function split_and_strip_files fails and ultimately do_package fails.
>
> As this slash is removed from the prefix it is added into the regular expression
> used to fix up pkgconfig files later in the recipe.
>
> This error was seen in vlc in meta-openembedded and should be solved by this
> change in openembedded-core.
>
> Signed-off-by: Paul Barker <paul@paulbarker.me.uk>

Martin, could you check whether applying this patch to oe-core fixes
the vlc do_package failure you were seeing?

Thanks,

--
Paul Barker

Email: paul@paulbarker.me.uk
http://www.paulbarker.me.uk
Martin Jansa - May 8, 2013, 7:14 p.m.
On Wed, May 08, 2013 at 07:07:57PM +0100, Paul Barker wrote:
> On 7 May 2013 10:05, Paul Barker <paul@paulbarker.me.uk> wrote:
> > The trailing slashs on "Prefix=${prefix}/" and "-prefix ${prefix}/" are passed
> > through to the generated pkgconfig files and may be joined to paths like
> > "/include" yielding a final path with a double forward-slash (eg.
> > "/usr//include"). This may end up in the debugging symbols in other applications
> > or libraries which depend on qt4 which in turn causes the debugedit program to
> > fail with the message "canonicalization unexpectedly shrank by one character"
> > when it tries to replace the double forward-slash with a single forward-slash.
> > Thus the function split_and_strip_files fails and ultimately do_package fails.
> >
> > As this slash is removed from the prefix it is added into the regular expression
> > used to fix up pkgconfig files later in the recipe.
> >
> > This error was seen in vlc in meta-openembedded and should be solved by this
> > change in openembedded-core.
> >
> > Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
> 
> Martin, could you check whether applying this patch to oe-core fixes
> the vlc do_package failure you were seeing?

Yes I plan to include it in next build, but I would like to fix
webkit-efl build with newer binutils first, because that adds 3.9M lines 
from log.do_compile and resulting logs from world have 600M :/
Martin Jansa - May 19, 2013, 7:59 a.m.
On Wed, May 08, 2013 at 09:14:16PM +0200, Martin Jansa wrote:
> On Wed, May 08, 2013 at 07:07:57PM +0100, Paul Barker wrote:
> > On 7 May 2013 10:05, Paul Barker <paul@paulbarker.me.uk> wrote:
> > > The trailing slashs on "Prefix=${prefix}/" and "-prefix ${prefix}/" are passed
> > > through to the generated pkgconfig files and may be joined to paths like
> > > "/include" yielding a final path with a double forward-slash (eg.
> > > "/usr//include"). This may end up in the debugging symbols in other applications
> > > or libraries which depend on qt4 which in turn causes the debugedit program to
> > > fail with the message "canonicalization unexpectedly shrank by one character"
> > > when it tries to replace the double forward-slash with a single forward-slash.
> > > Thus the function split_and_strip_files fails and ultimately do_package fails.
> > >
> > > As this slash is removed from the prefix it is added into the regular expression
> > > used to fix up pkgconfig files later in the recipe.
> > >
> > > This error was seen in vlc in meta-openembedded and should be solved by this
> > > change in openembedded-core.
> > >
> > > Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
> > 
> > Martin, could you check whether applying this patch to oe-core fixes
> > the vlc do_package failure you were seeing?
> 
> Yes I plan to include it in next build, but I would like to fix
> webkit-efl build with newer binutils first, because that adds 3.9M lines 
> from log.do_compile and resulting logs from world have 600M :/

Yes it fixed it, thanks!

Patch

diff --git a/meta/recipes-qt/qt4/qt4.inc b/meta/recipes-qt/qt4/qt4.inc
index 37fc1dd..84c0ae9 100644
--- a/meta/recipes-qt/qt4/qt4.inc
+++ b/meta/recipes-qt/qt4/qt4.inc
@@ -213,7 +213,7 @@  do_configure() {
 	cp -f ${WORKDIR}/linux.conf mkspecs/common/
 
 	echo "[Paths]"                                 > $QT_CONF_PATH
-	echo "Prefix=${prefix}/"                      >> $QT_CONF_PATH
+	echo "Prefix=${prefix}"                       >> $QT_CONF_PATH
 	echo "Documentation=${docdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
 	echo "Headers=${includedir}/${QT_DIR_NAME}"   >> $QT_CONF_PATH
 	echo "Libraries=${libdir}"                    >> $QT_CONF_PATH
@@ -229,7 +229,7 @@  do_configure() {
 	${EXTRA_QMAKE_MUNGE}|| true
 
 	echo yes | QT_LICENSE_FILE="${QT_LICENSE_FILE}" ./configure -v \
-			-prefix ${prefix}/ \
+			-prefix ${prefix} \
 			-bindir ${bindir} \
 			-libdir ${libdir} \
 			-datadir ${datadir}/${QT_DIR_NAME} \
@@ -358,7 +358,7 @@  do_install() {
 
 	# QT abuses $includedir to point to its headers, which breaks pkgconfig sysroot, so manually fix it up here:
 	for pc in ${D}${libdir}/pkgconfig/*.pc ; do
-		sed -i -e "s:prefix}include/${QT_DIR_NAME}/$(basename $pc .pc):prefix}/include:" \
+		sed -i -e "s:prefix}/include/${QT_DIR_NAME}/$(basename $pc .pc):prefix}/include:" \
 				-e 's:IP{:I${:g' $pc
 	done