From ae332749eee056f59bf902a65ffb012fcf181875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Mon, 30 Oct 2023 09:28:54 +0100 Subject: [PATCH] build,qt: Build Qt with -fPIC if required or requested * configure.ac: Add option to enable building the Qt 6 binding with -fPIC. Fix typo and mention default for --enable-no-direct-extern-access option. * m4/qt6.m4: Add -fPIC to GPGME_QT6_CFLAGS if requested or if Qt 6 was built with reduce_relocations. -- GnuPG-bug-id: 6781 --- NEWS | 3 +++ configure.ac | 16 ++++++++++++++-- m4/qt6.m4 | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/NEWS b/NEWS index 22472073..733a0fbb 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,9 @@ Noteworthy changes in version 1.23.2 (unreleased) * qt: Use a temporary file name when creating signed or encrypted archives. [T6721] + * qt: Build Qt 6 bindings with -fPIC if requested or Qt 6 was built with + this flag. [T6781] + Noteworthy changes in version 1.23.1 (2023-10-27) ------------------------------------------------- diff --git a/configure.ac b/configure.ac index f36c0841..2d571e21 100644 --- a/configure.ac +++ b/configure.ac @@ -338,6 +338,18 @@ if test x$fixed_search_path != x ; then [Locate binaries only via this PATH]) fi +# Option --enable-reduce-relocations +# +# Allow building the Qt 6 bindings explicitly with -fPIC if the automatic +# detection fails. Note: We assume that this flag is always available (unless +# we built for Windows). +AC_ARG_ENABLE([reduce-relocations], + AS_HELP_STRING([--enable-reduce-relocations], + [build Qt 6 bindings with -fPIC (default is + auto)]), + [use_reduce_relocations="$enableval"], + [use_reduce_relocations=""]) + # Option --enable-no-direct-extern-access # # Some distributions build Qt 6 with -mno-direct-extern-access. Libraries and @@ -352,8 +364,8 @@ AX_CHECK_COMPILE_FLAG([-mno-direct-extern-access], AC_LANG_POP() AC_ARG_ENABLE([no-direct-extern-access], AS_HELP_STRING([--enable-no-direct-extern-access], - [build Qt 6 bindinds with - -mno-direct-extern-access]), + [build Qt 6 bindings with + -mno-direct-extern-access (default is auto)]), [use_no_direct_extern_access="$enableval"], [use_no_direct_extern_access=""]) diff --git a/m4/qt6.m4 b/m4/qt6.m4 index e87fc244..8a3322a7 100644 --- a/m4/qt6.m4 +++ b/m4/qt6.m4 @@ -34,20 +34,37 @@ AC_DEFUN([FIND_QT6], fi if test "$have_qt6_libs" = "yes"; then + if test "$have_w32_system" != yes; then + mkspecsdir=$($PKG_CONFIG --variable mkspecsdir Qt6Platform) + if test -z "$mkspecsdir"; then + AC_MSG_WARN([Failed to determine Qt's mkspecs directory. Cannot check its build configuration.]) + fi + fi + + # check if we need -fPIC + if test -z "$use_reduce_relocations" && test -n "$mkspecsdir"; then + AC_MSG_CHECKING([whether Qt was built with -fPIC]) + if grep -q "QT_CONFIG .* reduce_relocations" $mkspecsdir/qconfig.pri; then + use_reduce_relocations="yes" + else + use_reduce_relocations="no" + fi + AC_MSG_RESULT([$use_reduce_relocations]) + fi + if test "$use_reduce_relocations" = yes; then + GPGME_QT6_CFLAGS="$GPGME_QT6_CFLAGS -fPIC" + fi + + # check if we need -mno-direct-extern-access if test "$have_no_direct_extern_access" = yes; then - if test -z "$use_no_direct_extern_access" && test "$have_w32_system" != yes; then - mkspecsdir=$($PKG_CONFIG --variable mkspecsdir Qt6Platform) - if test -n "$mkspecsdir"; then - AC_MSG_CHECKING([whether Qt was built with -mno-direct-extern-access]) - if grep -q "QT_CONFIG .* no_direct_extern_access" $mkspecsdir/qconfig.pri; then - use_no_direct_extern_access="yes" - else - use_no_direct_extern_access="no" - fi - AC_MSG_RESULT([$use_no_direct_extern_access]) + if test -z "$use_no_direct_extern_access" && test -n "$mkspecsdir"; then + AC_MSG_CHECKING([whether Qt was built with -mno-direct-extern-access]) + if grep -q "QT_CONFIG .* no_direct_extern_access" $mkspecsdir/qconfig.pri; then + use_no_direct_extern_access="yes" else - AC_MSG_WARN([Failed to determine Qt's mkspecs directory. Cannot check its build configuration.]) + use_no_direct_extern_access="no" fi + AC_MSG_RESULT([$use_no_direct_extern_access]) fi if test "$use_no_direct_extern_access" = yes; then GPGME_QT6_CFLAGS="$GPGME_QT6_CFLAGS -mno-direct-extern-access"