[Buildroot] [PATCH 1/1] package/qt5: fix parallel build qmake package (qt5) doesn't build when using parallel build.

Florent AUMAITRE florent.aumaitre at medianesysteme.com
Tue Dec 14 07:51:33 UTC 2021


Signed-off-by: Florent AUMAITRE <florent.aumaitre at medianesysteme.com>
---
 package/pkg-qmake.mk           | 22 +++++++++++++++++++++-
 package/qt5/qt5.mk             |  4 +++-
 package/qt5/qt5base/qt5base.mk | 13 +++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/package/pkg-qmake.mk b/package/pkg-qmake.mk
index deb033c1d6..55b3594f32 100644
--- a/package/pkg-qmake.mk
+++ b/package/pkg-qmake.mk
@@ -20,6 +20,23 @@
 #
 ################################################################################
 
+# When per-package is enabled, and qmake project is configured to generate 
+# pkg-config compatible package, absolute path are generated for "prefix" field 
+# of .pc files. In order to keep per-package isolation with sysroot'in, it is 
+# needed to remove those absolute path. Same apply for mkspecs files.
+ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
+define PKG_QMAKE_FIXUP_ABSOLUTE_PATH
+	$(Q)find $(STAGING_DIR)/ -name "*.pc" \
+	| xargs --no-run-if-empty \
+	$(SED) "s:$(STAGING_DIR)::g"
+
+	$(Q)find $(HOST_DIR)/ -name "*.pri" \
+		| xargs --no-run-if-empty \
+		$(SED) "s:$(STAGING_DIR):\$$\$$\[QT_SYSROOT\]:g"
+endef
+endif
+
+
 #
 # Hook to sync Qt headers
 #
@@ -89,6 +106,8 @@ define $(2)_INSTALL_STAGING_CMDS
 endef
 endif
 
+$(2)_POST_INSTALL_STAGING_HOOKS += PKG_QMAKE_FIXUP_ABSOLUTE_PATH
+
 #
 # Target installation step. Only define it if not already defined by
 # the package .mk file.
@@ -103,9 +122,10 @@ endif
 # We subsequently rsync only the files from the temporary staging dir and that
 # way exclude files for the build host from target.
 #
+# Qt Package (declarative at least) does not install in parallel due to improper make rules
 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)
+	$$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE1) -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
diff --git a/package/qt5/qt5.mk b/package/qt5/qt5.mk
index 3ffb7b0063..eced7e2564 100644
--- a/package/qt5/qt5.mk
+++ b/package/qt5/qt5.mk
@@ -27,4 +27,6 @@ endef
 endif
 
 # Variable for other Qt applications to use
-QT5_QMAKE = $(HOST_DIR)/bin/qmake -spec devices/linux-buildroot-g++
+QT5_QMAKE = $(HOST_DIR)/bin/qmake -spec devices/linux-buildroot-g++ \
+	PKG_CONFIG_SYSROOT_DIR=$(STAGING_DIR) \
+	PKG_CONFIG_LIBDIR=$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig
diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk
index ba2971dc08..3750d4547e 100644
--- a/package/qt5/qt5base/qt5base.mk
+++ b/package/qt5/qt5base/qt5base.mk
@@ -334,4 +334,17 @@ endef
 
 QT5BASE_POST_INSTALL_STAGING_HOOKS += QT5_INSTALL_QT_CONF
 
+# CMake config files generated by Qt5 might break per-package isolation because
+# of absolute path generated.
+ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
+define QT5BASE_CMAKECONFIG_FIXUP
+	$(Q)find $(STAGING_DIR)/ -name "*.cmake" \
+		| xargs --no-run-if-empty \
+		$(SED) "s:$(STAGING_DIR)::g"
+endef
+endif
+
+QT5BASE_POST_INSTALL_STAGING_HOOKS += QT5BASE_CMAKECONFIG_FIXUP
+
+
 $(eval $(qmake-package))
-- 
2.17.1




More information about the buildroot mailing list