All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [git commit] qt: fix static linking
@ 2016-04-15  7:42 Thomas Petazzoni
  0 siblings, 0 replies; only message in thread
From: Thomas Petazzoni @ 2016-04-15  7:42 UTC (permalink / raw)
  To: buildroot

commit: https://git.buildroot.net/buildroot/commit/?id=92180f7fe14e293bb9edad61024691e76c7aff97
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

`-ldl` option is used unconditionally in `QMAKE_LIBS_DYNLOAD` while libdl is
not supported when libc is static. As the value of `QMAKE_LIBS_DYNLOAD` goes
into 'Libs.private' field of the pkgconfig files created by qmake, static
linking with qt will fail with:
  /usr/bin/ld: cannot find -ldl

Fix this issue by adding a build test to configure to check if libdl is
supported. `QMAKE_LIBS_DYNLOAD` in "src/corelib/plugin/plugin.pri" is now used
only if libdl is available.

Fixes:
http://autobuild.buildroot.net/results/459/4596b9c69cbc387f1071c730aaac76723afaa853/
http://autobuild.buildroot.net/results/459/4596b9c69cbc387f1071c730aaac76723afaa853/

Backported from Qt5:
https://github.com/qtproject/qtbase/commit/f669ea0d54302de31456d57286aa0e4ca1443e98

Signed-off-by: J??rg Krause <joerg.krause@embedded.rocks>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 ...with-ldl-option-only-when-it-is-supported.patch | 116 +++++++++++++++++++++
 1 file changed, 116 insertions(+)

diff --git a/package/qt/0011-Link-with-ldl-option-only-when-it-is-supported.patch b/package/qt/0011-Link-with-ldl-option-only-when-it-is-supported.patch
new file mode 100644
index 0000000..f3d47f7
--- /dev/null
+++ b/package/qt/0011-Link-with-ldl-option-only-when-it-is-supported.patch
@@ -0,0 +1,116 @@
+From 438f088ad520ac91ae47dba9a515ab0d1088c89c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Krause?= <joerg.krause@embedded.rocks>
+Date: Fri, 15 Apr 2016 03:32:02 +0200
+Subject: [PATCH] Link with -ldl option only when it is supported
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+`-ldl` option is used unconditionally in `QMAKE_LIBS_DYNLOAD` while libdl is
+not supported when libc is static. As the value of `QMAKE_LIBS_DYNLOAD` goes
+into 'Libs.private' field of the pkgconfig files created by qmake, static
+linking with qt will fail with:
+  /usr/bin/ld: cannot find -ldl
+
+Fix this issue by adding a build test to configure to check if libdl is
+supported. `QMAKE_LIBS_DYNLOAD` in "src/corelib/plugin/plugin.pri" is now used
+only if libdl is available.
+
+Backported from Qt5:
+https://github.com/qtproject/qtbase/commit/f669ea0d54302de31456d57286aa0e4ca1443e98
+
+Signed-off-by: J??rg Krause <joerg.krause@embedded.rocks>
+---
+ config.tests/unix/libdl/libdl.cpp | 39 +++++++++++++++++++++++++++++++++++++++
+ config.tests/unix/libdl/libdl.pro |  3 +++
+ configure                         |  6 ++++++
+ src/corelib/plugin/plugin.pri     |  2 +-
+ 4 files changed, 49 insertions(+), 1 deletion(-)
+ create mode 100644 config.tests/unix/libdl/libdl.cpp
+ create mode 100644 config.tests/unix/libdl/libdl.pro
+
+diff --git a/config.tests/unix/libdl/libdl.cpp b/config.tests/unix/libdl/libdl.cpp
+new file mode 100644
+index 0000000..28a8233
+--- /dev/null
++++ b/config.tests/unix/libdl/libdl.cpp
+@@ -0,0 +1,39 @@
++/****************************************************************************
++**
++** Copyright (C) 2015 The Qt Company Ltd.
++** Contact: http://www.qt.io/licensing/
++**
++** This file is part of the config.tests of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL21$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see http://www.qt.io/terms-conditions. For further
++** information use the contact form at http://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 or version 3 as published by the Free
++** Software Foundation and appearing in the file LICENSE.LGPLv21 and
++** LICENSE.LGPLv3 included in the packaging of this file. Please review the
++** following information to ensure the GNU Lesser General Public License
++** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** As a special exception, The Qt Company gives you certain additional
++** rights. These rights are described in The Qt Company LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#include <dlfcn.h>
++
++int main(int, char **)
++{
++    dlopen(0, 0);
++}
+diff --git a/config.tests/unix/libdl/libdl.pro b/config.tests/unix/libdl/libdl.pro
+new file mode 100644
+index 0000000..a643934
+--- /dev/null
++++ b/config.tests/unix/libdl/libdl.pro
+@@ -0,0 +1,3 @@
++SOURCES = libdl.cpp
++CONFIG -= qt dylib
++LIBS += -ldl
+\ No newline at end of file
+diff --git a/configure b/configure
+index 10ad7ca..1c70691 100755
+--- a/configure
++++ b/configure
+@@ -5506,6 +5506,12 @@ if [ "$CFG_LIBPNG" = "auto" ]; then
+     fi
+ fi
+ 
++# detect dl
++if ! compileTest unix/libdl "libdl"; then
++    QMakeVar add DEFINES QT_NO_DYNAMIC_LIBRARY
++    QMAKE_CONFIG="$QMAKE_CONFIG no-libdl"
++fi
++
+ # detect accessibility
+ if [ "$CFG_ACCESSIBILITY" = "auto" ]; then
+     if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
+diff --git a/src/corelib/plugin/plugin.pri b/src/corelib/plugin/plugin.pri
+index eb7a7f7..c342f2e 100644
+--- a/src/corelib/plugin/plugin.pri
++++ b/src/corelib/plugin/plugin.pri
+@@ -32,4 +32,4 @@ integrity {
+ 	SOURCES += plugin/qlibrary_unix.cpp
+ }
+ 
+-LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD
++!no-libdl: LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD
+-- 
+2.8.0
+

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-04-15  7:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-15  7:42 [Buildroot] [git commit] qt: fix static linking Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.