buildroot/package/pkg-qmake.mk
James Hilliard 5770a645a3 package/qt5: bump packages to latest kde submodule versions
This points all qt5 packages to the latest kde submodule versions
available at https://invent.kde.org/qt/qt/qt5/-/tree/kde/5.15

There is no 5.15.8 release of the kde-maintained modules, no release
tarballs and no tags. Instead, there's just a rolling maintenance
branch. We take a snapshot of that branch and call it 5.15.8, to match
the latest qt5webengine release.

We need to remove some patches applied upstream already.

qt5location has mapboxgl as a submodule, which is not included in the
gitlab-generated tarball. Therefore, use the git download method with
submodules enabled.

We need to pin qt5 packages not available in the new upstream to the
previous 5.15.2 version.

We need to set SYNC_QT_HEADERS for all qt5 packages in the new
upstream as headers are only copied in release archives which are
not provided in the kde upstream.

Instead of calling syncqt.pl, update the MODULE_VERSION in .qmake.conf
to 5.15.8 and create a .git file so to trigger headers sync during
configure.

Hold back updating qt5webengine for now since the latest version
requires significant changes to build, just tweak existing version
to be compatible with latest kde versions for now.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Reviewed-by: Adam Duskett <aduskett@gmail.com>
Tested-by: Adam Duskett <aduskett@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2022-02-03 20:27:27 +01:00

122 lines
4.3 KiB
Makefile

################################################################################
# QMake package infrastructure
#
# This file implements an infrastructure that eases development of package
# .mk files for QMake packages. It should be used for all packages that use
# Qmake as their build system.
#
# See the Buildroot documentation for details on the usage of this
# infrastructure
#
# In terms of implementation, this QMake infrastructure requires the .mk file
# to only specify metadata information about the package: name, version,
# download URL, etc.
#
# We still allow the package .mk file to override what the different steps
# are doing, if needed. For example, if <PKG>_BUILD_CMDS is already defined,
# it is used as the list of commands to perform to build the package,
# instead of the default QMake behaviour. The package can also define some
# post operation hooks.
#
################################################################################
#
# Hook to sync Qt headers
#
define QT_HEADERS_SYNC_HOOK
sed -e '/^MODULE_VERSION/s/5\.15\.[3456789]/$(QT5_VERSION)/' -i \
$($(PKG)_BUILDDIR)/.qmake.conf
touch $($(PKG)_BUILDDIR)/.git
endef
################################################################################
# inner-qmake-package -- defines how the configuration, compilation and
# installation of a qmake package should be done, implements a few hooks
# to tune the build process for qmake specifities and calls the generic
# package infrastructure to generate the necessary make targets
#
# argument 1 is the lowercase package name
# argument 2 is the uppercase package name, including a HOST_ prefix
# for host packages
################################################################################
define inner-qmake-package
$(2)_INSTALL_STAGING_OPTS ?= install
$(2)_INSTALL_TARGET_OPTS ?= $$($(2)_INSTALL_STAGING_OPTS)
ifneq ($(1),qt5base)
$(2)_DEPENDENCIES += qt5base
endif
ifeq ($$($(2)_SYNC_QT_HEADERS),YES)
$(2)_DEPENDENCIES += host-perl
$(2)_PRE_CONFIGURE_HOOKS += QT_HEADERS_SYNC_HOOK
endif
$(2)_POST_PREPARE_HOOKS += QT5_QT_CONF_FIXUP
#
# Configure step. Only define it if not already defined by the package
# .mk file.
#
ifndef $(2)_CONFIGURE_CMDS
define $(2)_CONFIGURE_CMDS
cd $$($(2)_BUILDDIR) && \
$$(TARGET_MAKE_ENV) $$($(2)_CONF_ENV) $$(QT5_QMAKE) $$($(2)_CONF_OPTS)
endef
endif
#
# Build step. Only define it if not already defined by the package .mk
# file.
#
ifndef $(2)_BUILD_CMDS
define $(2)_BUILD_CMDS
$$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) $$($(2)_MAKE_OPTS)
endef
endif
#
# Staging installation step. Only define it if not already defined by
# the package .mk file.
#
ifndef $(2)_INSTALL_STAGING_CMDS
define $(2)_INSTALL_STAGING_CMDS
$$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) $$($(2)_INSTALL_STAGING_OPTS)
endef
endif
#
# Target installation step. Only define it if not already defined by
# the package .mk file.
#
# Unfortunately we can't use INSTALL_ROOT to directly install to TARGET_DIR
# because in a crosscompile setup, the qmake generated install destinations
# are prefixed with the hardcoded sysroot (=STAGING_DIR) and hostprefix
# (=HOST_DIR).
# Instead we set INSTALL_ROOT, which comes before the install path, to a
# temporary folder inside the build directory and effectively install to
# $(@D)/tmp-target-install/$(STAGING_DIR) and $(@D)/tmp-target-install/$(HOST_DIR).
# We subsequently rsync only the files from the temporary staging dir and that
# way exclude files for the build host from target.
#
ifndef $(2)_INSTALL_TARGET_CMDS
define $(2)_INSTALL_TARGET_CMDS
$$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) INSTALL_ROOT=$$($(2)_BUILDDIR)tmp-target-install $$($(2)_INSTALL_TARGET_OPTS)
rsync -arv $$($(2)_BUILDDIR)tmp-target-install$$(STAGING_DIR)/ $$(TARGET_DIR)/
endef
endif
# Call the generic package infrastructure to generate the necessary
# make targets
$(call inner-generic-package,$(1),$(2),$(3),$(4))
endef
################################################################################
# qmake-package -- the target generator macro for QMake packages
################################################################################
qmake-package = $(call inner-qmake-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)