Patchwork [meta-qt5,jansa/qt5-5.2.0] libQt5*.la references OE build directories

login
register
mail settings
Submitter Jacob Kroon
Date Jan. 18, 2014, 11:09 a.m.
Message ID <CAPbeDCnuiCyFNiOWVwSF7XzpkOiJvrN_vbMNAotSPap+xLq4vQ@mail.gmail.com>
Download mbox | patch
Permalink /patch/65155/
State Accepted, archived
Headers show

Comments

Jacob Kroon - Jan. 18, 2014, 11:09 a.m.
On Sat, Jan 18, 2014 at 11:03 AM, Jacob Kroon <jacob.kroon@gmail.com> wrote:

> Hi Andreas and Martin,
>
> On Tue, Jan 14, 2014 at 1:03 AM, Jacob Kroon <jacob.kroon@gmail.com>wrote:
>
>>
>> On Mon, 13 Jan 2014, Martin Jansa wrote:
>>
>>  On Mon, Jan 13, 2014 at 01:58:25AM +0100, Jacob Kroon wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm seeing what I believe is a problem with the *.la files in the Qt5
>>>> dev-packages.
>>>> The files references paths in my OE build environment, like so:
>>>>
>>>> ...
>>>> # Libraries that this one depends upon.
>>>> dependency_libs='-lQt5Gui
>>>> -L/home/jkroon/Projects/oe-devel/build/tmp-eglibc/
>>>> sysroots/wandboard-solo/usr/lib
>>>> -lQt5Core -lpthread '
>>>> ...
>>>> # Directory that this library needs to be installed in:
>>>> libdir='/home/jkroon/Projects/oe-devel/build/tmp-eglibc/
>>>> sysroots/wandboard-solo/usr'
>>>> ...
>>>>
>>>> I noticed this since my Qt5 autotools project wouldn't link properly
>>>> when
>>>> using the SDK, unless I first removed all libQt5*.la files.
>>>>
>>>> I'm not quite sure where to look for the problem so any pointers would
>>>> be
>>>> appreciated.
>>>>
>>>
>>> Probably bad rebase on my side, please compare
>>>
>>> mkspecs/features/qt_module.prf in 5.1.1 and 5.2.0
>>>
>>> changed in:
>>> https://github.com/meta-qt5/meta-qt5/blob/master/recipes-
>>> qt/qt5/qtbase-5.1.1/0008-qt_module-Fix-pkgconfig-replacement.patch
>>> and
>>> https://github.com/meta-qt5/meta-qt5/blob/jansa/qt5-5.2.0/
>>> recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch
>>>
>>> Or better in meta-qt5's qtbase repo:
>>> https://github.com/meta-qt5/qtbase/blob/b5.1.1/mkspecs/
>>> features/qt_module.prf
>>> https://github.com/meta-qt5/qtbase/blob/b5.2.0/mkspecs/
>>> features/qt_module.prf
>>>
>>>
>> I tried building Qt 5.1.1 from master again, the .la-files do look
>> better, "libdir" looks correct (taken from libQt5Svg.la):
>>
>> <snip>
>>
>> # Directory that this library needs to be installed in:
>> libdir='/usr/lib'
>> </snip>
>>
>> however
>>
>> <snip>
>>
>> dependency_libs='-lQt5Gui -L/home/jkroon/Projects/oe-
>> devel/build/tmp-eglibc/sysroots/wandboard-solo/usr/lib -lQt5Core
>> -lpthread '
>> </snip>
>>
>> Dunno wether this is a problem or not, I never tried building the project
>> with 5.1.1 using the SDK.
>>
>> Will hopefully have some time tomorrow to look at the links you sent.
>>
>> Thanks,
>>
>> Jacob
>>
>
> I'm trying to get the .la-files for Qt5 dev-packages correct.
>
> What I've come up with so far is attached in the patch (to be applied in
> top of "jansa-qt5-5.2.0", b8a236df79c25802c1f2eb2525e8a534e73e608e)
>
> With the patch applied I can still build both an image and an SDK, and
> also the resulting SDK can be used to build my QT5 autotools projects. But
> I get these warnings when building for instance "qtxmlpatterns":
>
> WARNING: QA Issue: qtxmlpatterns: The compile log indicates that host
> include and/or library paths were used.
>
> With my patch applied,
> recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch looks
> like this:
>
> --- qtbase-opensource-src-5.2.0.orig/mkspecs/features/qt_module.prf
> +++ qtbase-opensource-src-5.2.0/mkspecs/features/qt_module.prf
> @@ -135,30 +135,36 @@ load(qt_installs)
>      rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
>  else: \
>      rplbase = $$MODULE_BASE_OUTDIR
> -include_replace.match = $$rplbase/include
> -include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
> -include_replace.CONFIG = path
> +pkgconfig_include_replace.match = $$rplbase/include
> +pkgconfig_include_replace.replace = "\$$\\{includedir}"
> +pkgconfig_include_replace.CONFIG = path
> +pkgconfig_lib_replace.match = $$rplbase/lib
> +pkgconfig_lib_replace.replace = "\$$\\{libdir}"
> +pkgconfig_lib_replace.CONFIG = path
>  lib_replace.match = $$rplbase/lib
>  host_build: \
>      lib_replace.replace = $$[QT_HOST_LIBS]
>  else: \
>      lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
>  lib_replace.CONFIG = path
> -QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
> +QMAKE_PRL_INSTALL_REPLACE += lib_replace
>
>  unix|win32-g++* {
>     CONFIG += create_pc
>     QMAKE_PKGCONFIG_LIBDIR = $$lib_replace.replace
> -   QMAKE_PKGCONFIG_INCDIR = $$include_replace.replace
> +   QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
>     QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
>     QMAKE_PKGCONFIG_DESTDIR = pkgconfig
> -   QMAKE_PKGCONFIG_INSTALL_REPLACE += include_replace lib_replace
> +   QMAKE_PKGCONFIG_INSTALL_REPLACE += pkgconfig_include_replace
> pkgconfig_lib_replace
>  }
>
>  unix {
> +   lafile_replace.match = "-L$$[QT_INSTALL_LIBS/raw]"
> +   lafile_replace.replace = ""
> +   lafile_replace.CONFIG = path
>     CONFIG += create_libtool explicitlib
>     QMAKE_LIBTOOL_LIBDIR = $$lib_replace.replace
> -   QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
> +   QMAKE_LIBTOOL_INSTALL_REPLACE += lib_replace lafile_replace
>  }
>
> The lafile_replace does the substitution "-L/usr/lib" -> "". Maybe this is
> needed for the .prl-files aswell ? Is the QMAKE_PRL_BUILD_DIR needed at all
> ? With all the sed:ing going on, that path looks phony to me...
>
> From native "sysroots/x86_64-linux/usr/lib/libQt5Xml.prl":
> QMAKE_PRL_BUILD_DIR =
> /home/jkroon/Projects/oe-devel/build/tmp-eglibc/work/x86_64-linux/qtbase-native/5.2.0-r0/build/src/xml
> QMAKE_PRL_LIBS =
> -L/home/jkroon/Projects/oe-devel/build/tmp-eglibc/sysroots/x86_64-linux/usr/lib
> -lQt5Core -lpthread
>
> From native "sysroots/x86_64-linux/usr/lib/libQt5Xml.la":
> dependency_libs=' -lQt5Core -lpthread '
>
> libdir='/home/jkroon/Projects/oe-devel/build/tmp-eglibc/sysroots/x86_64-linux/usr/lib'
>
> From target "sysroots/wandboard-solo/usr/lib/libQt5Xml.prl":
> QMAKE_PRL_BUILD_DIR =
> /home/jkroon/Projects/oe-devel/build/tmp-eglibc/work/cortexa9hf-vfp-neon-mx6-oe-linux-gnueabi/qtbase/5.2.0-r0/build/src/xml
> QMAKE_PRL_LIBS = -L/usr/lib -lQt5Core -lpthread
>
> From target "sysroots/wandboard-solo/usr/lib/libQt5Xml.la":
> dependency_libs=' -lQt5Core -lpthread '
> libdir='/usr/lib'
>
>
I applied the "-L/usr/lib" -> "" to the .prl-files aswell, and now I don't
get any QA warnings, and everything builds, image, SDK and autotools
project using the SDK. See new version of the attached patch.

Does this look sane to you guys ?

  -- Jacob

Patch

diff --git a/recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch b/recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch
index f85fb33..9079618 100644
--- a/recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch
+++ b/recipes-qt/qt5/qtbase/0005-qt_module-Fix-pkgconfig-replacement.patch
@@ -46,57 +46,39 @@  Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
  mkspecs/features/qt_module.prf | 43 ++++++++++++++++++++++++++++++------------
  1 file changed, 31 insertions(+), 12 deletions(-)
 
-diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
-index 11509ee..2f95684 100644
---- a/mkspecs/features/qt_module.prf
-+++ b/mkspecs/features/qt_module.prf
-@@ -135,30 +135,49 @@ load(qt_installs)
+Index: qtbase-opensource-src-5.2.0/mkspecs/features/qt_module.prf
+===================================================================
+--- qtbase-opensource-src-5.2.0.orig/mkspecs/features/qt_module.prf
++++ qtbase-opensource-src-5.2.0/mkspecs/features/qt_module.prf
+@@ -135,30 +135,36 @@ load(qt_installs)
      rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
  else: \
      rplbase = $$MODULE_BASE_OUTDIR
 -include_replace.match = $$rplbase/include
 -include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
 -include_replace.CONFIG = path
--lib_replace.match = $$rplbase/lib
--host_build: \
--    lib_replace.replace = $$[QT_HOST_LIBS]
--else: \
 +pkgconfig_include_replace.match = $$rplbase/include
 +pkgconfig_include_replace.replace = "\$$\\{includedir}"
++pkgconfig_include_replace.CONFIG = path
 +pkgconfig_lib_replace.match = $$rplbase/lib
 +pkgconfig_lib_replace.replace = "\$$\\{libdir}"
-+!exists($$[QT_SYSROOT]) {
-+    include_replace.match = $$rplbase/include
-+    include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
-+    include_replace.CONFIG = path
-+    lib_replace.match = $$rplbase/lib
++pkgconfig_lib_replace.CONFIG = path
+ lib_replace.match = $$rplbase/lib
+ host_build: \
+     lib_replace.replace = $$[QT_HOST_LIBS]
+ else: \
      lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
--lib_replace.CONFIG = path
-+    lib_replace.CONFIG = path
-+    lafile_replace.match = $$rplbase
-+    lafile_replace.replace = "$$[QT_INSTALL_PREFIX/raw]"
-+} else {
-+    # include_replace and lib_replace are duplicate, but we don't want to
-+    # make QMAKE_PKGCONFIG_INSTALL_REPLACE, QMAKE_PRL_INSTALL_REPLACE conditional
-+    include_replace.match = $$rplbase
-+    include_replace.replace = $$[QT_SYSROOT]$$[QT_INSTALL_PREFIX/raw]
-+    include_replace.CONFIG = path
-+    lib_replace.match = $$rplbase
-+    lib_replace.replace = $$[QT_SYSROOT]$$[QT_INSTALL_PREFIX/raw]
-+    lib_replace.CONFIG = path
-+    lafile_replace.match = $$rplbase
-+    lafile_replace.replace = "=$$[QT_INSTALL_PREFIX/raw]"
-+}
- QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
+ lib_replace.CONFIG = path
+-QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
++libcleanup_replace.match = "-L$$[QT_INSTALL_LIBS/raw]"
++libcleanup_replace.replace = ""
++libcleanup_replace.CONFIG = path
++QMAKE_PRL_INSTALL_REPLACE += lib_replace libcleanup_replace
  
  unix|win32-g++* {
     CONFIG += create_pc
--   QMAKE_PKGCONFIG_LIBDIR = $$lib_replace.replace
+    QMAKE_PKGCONFIG_LIBDIR = $$lib_replace.replace
 -   QMAKE_PKGCONFIG_INCDIR = $$include_replace.replace
-+   host_build: \
-+       QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS]
-+   else: \
-+       QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
 +   QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
     QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
     QMAKE_PKGCONFIG_DESTDIR = pkgconfig
@@ -108,10 +90,7 @@  index 11509ee..2f95684 100644
     CONFIG += create_libtool explicitlib
     QMAKE_LIBTOOL_LIBDIR = $$lib_replace.replace
 -   QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
-+   QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace lafile_replace
++   QMAKE_LIBTOOL_INSTALL_REPLACE += lib_replace libcleanup_replace
  }
  
  unix|win32-g++* {
--- 
-1.8.5.2
-