Skip to content

Commit

Permalink
dev-qt/qtcore: Fix cmake macro compat. for upgrade from <Qt-5.14
Browse files Browse the repository at this point in the history
Closes: https://bugs.gentoo.org/703306
Closes: https://bugs.gentoo.org/705198
Package-Manager: Portage-2.3.87, Repoman-2.3.20
Signed-off-by: Andreas Sturmlechner <[email protected]>
  • Loading branch information
a17r committed Feb 9, 2020
1 parent 944b37a commit fe1eb44
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
From: Andreas Sturmlechner <[email protected]>
Date: Sun, 9 Feb 2020 11:45:00 +0100
Subject: [PATCH] qtcore: Fix cmake macro compat. for upgrade from <Qt-5.14

In upstream commit:

https://code.qt.io/cgit/qt/qtbase.git/commit/?h=5.14&id=63d9cd17

_populate_$${CMAKE_MODULE_NAME}_plugin_properties in 5.14.0 gained an additional argument
IsDebugAndRelease without providing backward compatibility. This macro is used (at least) for
QtGui and QtDesigner plugins added by qtimageformats, qtsvg, qtvirtualkeyboard and qtwayland.
During upgrade from <Qt-5.14 to >=Qt-5.14, as a consequence of slot upgrade rebuilds, some
reverse dependencies are slated for rebuild before these Qt consumers have been rebuilt and their
cmake files regenerated, leading to cmake errors like:

https://bugs.gentoo.org/703306
https://bugs.gentoo.org/705198

From mkspecs/features/create_cmake.prf:

# CMAKE_DEBUG_AND_RELEASE is used to tell the _populate_$${CMAKE_MODULE_NAME}_target_properties
# functions whether a Configuration specific generator expression needs to be added to the values
# of INTERFACE_LINK_LIBRARIES and INTERFACE_LINK_OPTIONS. For debug_and_release builds, we do need
# configuration specific values. For singular builds (only release or only debug), we want the
# values to be applied regardless of the configuration.
# This would allow on Linux and macOS (and with a recent enough version of CMake on Windows) to
# build a Debug configuration of an application, even if Qt was built in a Release configuration.

qt5-build.eclass is configuring either as 'release' or as 'debug', so we make IsDebugAndRelease
optional and default to FALSE.

--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in 2020-01-23 13:37:32.000000000 +0100
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in 2020-02-09 15:15:21.156219814 +0100
@@ -538,8 +538,14 @@

file(GLOB pluginTargets \"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}_*Plugin.cmake\")

- macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION
- IsDebugAndRelease)
+ macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
+ set(IsDebugAndRelease FALSE)
+ set (list_var ${ARGN})
+ list(LENGTH list_var num_extra_arg)
+ if (${num_extra_arg} GREATER 0)
+ list(GET list_var 0 IsDebugAndRelease)
+ endif()
+
set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})

!!IF isEmpty(CMAKE_PLUGIN_DIR_IS_ABSOLUTE)
85 changes: 85 additions & 0 deletions dev-qt/qtcore/qtcore-5.14.1-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7
QT5_MODULE="qtbase"
inherit qt5-build

DESCRIPTION="Cross-platform application development framework"

if [[ ${QT5_BUILD_TYPE} == release ]]; then
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86"
fi

IUSE="icu systemd"

DEPEND="
dev-libs/double-conversion:=
dev-libs/glib:2
dev-libs/libpcre2[pcre16,unicode]
sys-libs/zlib:=
icu? ( dev-libs/icu:= )
!icu? ( virtual/libiconv )
systemd? ( sys-apps/systemd:= )
"
RDEPEND="${DEPEND}
!<dev-qt/qtcore-4.8.7-r4:4
"

QT5_TARGET_SUBDIRS=(
src/tools/bootstrap
src/tools/moc
src/tools/rcc
src/corelib
src/tools/qlalr
doc
)

QT5_GENTOO_PRIVATE_CONFIG=(
!:network
!:sql
!:testlib
!:xml
)

PATCHES=( "${FILESDIR}/${P}-cmake-macro-backward-compat.patch" ) # bug 703306

src_prepare() {
# don't add -O3 to CXXFLAGS, bug 549140
sed -i -e '/CONFIG\s*+=/s/optimize_full//' src/corelib/corelib.pro || die

# fix missing qt_version_tag symbol w/ LTO, bug 674382
sed -i -e 's/^gcc:ltcg/gcc/' src/corelib/global/global.pri || die

qt5-build_src_prepare
}

src_configure() {
local myconf=(
-no-feature-statx # bug 672856
$(qt_use icu)
$(qt_use !icu iconv)
$(qt_use systemd journald)
)
qt5-build_src_configure
}

src_install() {
qt5-build_src_install

local flags=(
DBUS FREETYPE IMAGEFORMAT_JPEG IMAGEFORMAT_PNG
OPENGL OPENSSL SSL WIDGETS
)

for flag in ${flags[@]}; do
cat >> "${D}"/${QT5_HEADERDIR}/QtCore/qconfig.h <<- _EOF_ || die
#if defined(QT_NO_${flag}) && defined(QT_${flag})
# undef QT_NO_${flag}
#elif !defined(QT_NO_${flag}) && !defined(QT_${flag})
# define QT_NO_${flag}
#endif
_EOF_
done
}

0 comments on commit fe1eb44

Please sign in to comment.