Skip to contentSkip to conversation

package/linux-tools/linux-tool-perf.mk.in: fix doc build issue

PATCH Superseded Markus Mayer via buildroot 1 participant 1 message Sep 24

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/linux-tools/linux-tool-perf.mk.in: fix doc build issue

Address potential document build issue when BR2_PER_PACKAGE_DIRECTORIES is enabled.

The perf package wants to prevent the documentation from being built, since it won't be installed anyway. The trick is to create an empty GNUmakefile in the proper place. It did this by using a POST_PATCH hook.

The reason this approach works when BR2_PER_PACKAGE_DIRECTORIES is off is that the build system ensures only one package builds at a time, so Linux's "extract" stage and Linux Tool's "patch" stage can never execute in parallel.

However, with per-package builds enabled, there is no guarantee that Linux has finished extracting by the time the linux-tool's POST_PATCH hook runs. This means the creation of GNUmakefile could silently be skipped if that portion of the source code hadn't been extracted yet. If, in addition to this, asciidoc happened to be installed on the build host (/usr/bin/asciidoc), perf would detect this and enable the doc build stage. At actual build time, it would use host-python3 (not the host's system Python), which does NOT have asciidoc, and the build would fail.

INSTALL libperf_headers
SYSHDR /local/users/jenkins/workspace/[...]/libperf/arch/[...]/unistd_64.h INSTALL libbpf_headers
fatal: not a git repository: '.'
ASCIIDOC /local/users/jenkins/workspace/[...]/tools/perf/perf-amd-ibs.xml
fatal: not a git repository: '.'
[...]
ASCIIDOC /local/users/jenkins/workspace/[...]/tools/perf/perf-data.xml
/local/users/jenkins/workspace/buildroot/[...]/host/bin/python3:
No module named asciidoc
make[5]: *** [Makefile:275: [...]/perf-data.xml] Error 1

Turning the POST_PATCH hook into a PRE_CONFIGURE hook solves this timing problem and guarantees that the "fake" GNUmakefile can be injected into $(LINUX_DIR)/tools/perf/Documentation as intended.

---
 package/linux-tools/linux-tool-perf.mk.in | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
package/linux-tools/linux-tool-perf.mk.in +6 -1
index 3238948d7608..6d58282ee0d9 100644
@@ -140,12 +140,17 @@ endif
 # distributions.
 # We name it 'GNUmakefile' so that GNU make will use it instead of
 # the existing 'Makefile'.
+#
+# This is a PRE_CONFIGURE hook, not a POST_PATCH hook: linux-tools's
+# patch step isn't ordered after "linux" (only its configure step is,
+# via LINUX_TOOLS_DEPENDENCIES), so tools/perf/Documentation/Makefile
+# is not guaranteed to exist yet at POST_PATCH time.
 define PERF_DISABLE_DOCUMENTATION
 	if [ -f $(LINUX_DIR)/tools/perf/Documentation/Makefile ]; then \
 		printf "%%:\n\t@:\n" >$(LINUX_DIR)/tools/perf/Documentation/GNUmakefile; \
 	fi
 endef
-LINUX_TOOLS_POST_PATCH_HOOKS += PERF_DISABLE_DOCUMENTATION
+LINUX_TOOLS_PRE_CONFIGURE_HOOKS += PERF_DISABLE_DOCUMENTATION
 
 # O must be redefined here to overwrite the one used by Buildroot for
 # out of tree build. We build perf in $(LINUX_DIR)/tools/perf/ and not just
Signature · 6 lines
2.55.0

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot