diff mbox series

[v2,1/1] Makefile: fix SDK relocation for per-package-dirs

Message ID 20221227154300.10556-1-brandon.maier@collins.com
State Accepted
Headers show
Series [v2,1/1] Makefile: fix SDK relocation for per-package-dirs | expand

Commit Message

Brandon Maier Dec. 27, 2022, 3:43 p.m. UTC
The relocate-sdk.sh script does not work correctly when
BR2_PER_PACKAGE_DIRECTORIES is enabled. relocate-sdk.sh expects
everything to point at $HOST_DIR, but each package will be pointing at
its $(O)/per-package/*/host.

Use the same command for scrubing host paths during the build, to scrub
to the final host directory location.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
---
v2:
- drop original implementation in favor of reusing the existing
  PPD_FIXUP_PATHS code.
---
 Makefile               |  1 +
 package/pkg-generic.mk | 12 +-----------
 package/pkg-utils.mk   | 15 +++++++++++++++
 3 files changed, 17 insertions(+), 11 deletions(-)

Comments

Charles Hardin Oct. 15, 2023, 5:12 p.m. UTC | #1
On Tue, Dec 27, 2022 at 7:43 AM Brandon Maier via buildroot
<buildroot@buildroot.org> wrote:
>
> The relocate-sdk.sh script does not work correctly when
> BR2_PER_PACKAGE_DIRECTORIES is enabled. relocate-sdk.sh expects
> everything to point at $HOST_DIR, but each package will be pointing at
> its $(O)/per-package/*/host.
>
> Use the same command for scrubing host paths during the build, to scrub
> to the final host directory location.
>
> Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Acked-by: Charles Hardin <ckhardin@gmail.com>

Tested and verified the host paths in the shasum as an example

> ---
> v2:
> - drop original implementation in favor of reusing the existing
>   PPD_FIXUP_PATHS code.
> ---
>  Makefile               |  1 +
>  package/pkg-generic.mk | 12 +-----------
>  package/pkg-utils.mk   | 15 +++++++++++++++
>  3 files changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 88f90cd2fa..ac3540b36c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -598,6 +598,7 @@ prepare-sdk: world
>         @$(call MESSAGE,"Rendering the SDK relocatable")
>         PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath host
>         PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath staging
> +       $(call ppd-fixup-paths,$(BASE_DIR))
>         $(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh
>         mkdir -p $(HOST_DIR)/share/buildroot
>         echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index f24e03a325..210af1bbef 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -92,18 +92,8 @@ endif
>
>  ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
>
> -# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
> -# proper staging and host directories for the current package: find
> -# all text files that contain the PPD root, and replace it with the
> -# current package's PPD.
>  define PPD_FIXUP_PATHS
> -       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
> -       |while read -d '' f; do \
> -               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> -               printf '%s\0' "$${f}"; \
> -       done \
> -       |xargs -0 --no-run-if-empty \
> -               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
> +       $(call ppd-fixup-paths,$(PER_PACKAGE_DIR)/$($(PKG)_NAME))
>  endef
>
>  # Remove python's pre-compiled "sysconfigdata", as it may contain paths to
> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
> index 0945e6ed31..f22562fbed 100644
> --- a/package/pkg-utils.mk
> +++ b/package/pkg-utils.mk
> @@ -233,6 +233,21 @@ define prepare-per-package-directory
>         $(call per-package-rsync,$(1),host,$(HOST_DIR))
>         $(call per-package-rsync,$(1),target,$(TARGET_DIR))
>  endef
> +
> +# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
> +# proper staging and host directories for the current package: find
> +# all text files that contain the PPD root, and replace it with the
> +# current package's PPD.
> +# $1: destination root directory containing host and staging
> +define ppd-fixup-paths
> +       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
> +       |while read -d '' f; do \
> +               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> +               printf '%s\0' "$${f}"; \
> +       done \
> +       |xargs -0 --no-run-if-empty \
> +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(1)/:g'
> +endef
>  endif
>
>  #
> --
> 2.39.0
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Arnout Vandecappelle Oct. 15, 2023, 6:20 p.m. UTC | #2
On 27/12/2022 16:43, Brandon Maier wrote:
> The relocate-sdk.sh script does not work correctly when
> BR2_PER_PACKAGE_DIRECTORIES is enabled. relocate-sdk.sh expects
> everything to point at $HOST_DIR, but each package will be pointing at
> its $(O)/per-package/*/host.
> 
> Use the same command for scrubing host paths during the build, to scrub
> to the final host directory location.
> 
> Signed-off-by: Brandon Maier <brandon.maier@collins.com>

  Applied to master, thanks.

  And thank you Charles for the review.

  Regards,
  Arnout

> ---
> v2:
> - drop original implementation in favor of reusing the existing
>    PPD_FIXUP_PATHS code.
> ---
>   Makefile               |  1 +
>   package/pkg-generic.mk | 12 +-----------
>   package/pkg-utils.mk   | 15 +++++++++++++++
>   3 files changed, 17 insertions(+), 11 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 88f90cd2fa..ac3540b36c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -598,6 +598,7 @@ prepare-sdk: world
>   	@$(call MESSAGE,"Rendering the SDK relocatable")
>   	PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath host
>   	PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath staging
> +	$(call ppd-fixup-paths,$(BASE_DIR))
>   	$(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh
>   	mkdir -p $(HOST_DIR)/share/buildroot
>   	echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index f24e03a325..210af1bbef 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -92,18 +92,8 @@ endif
>   
>   ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
>   
> -# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
> -# proper staging and host directories for the current package: find
> -# all text files that contain the PPD root, and replace it with the
> -# current package's PPD.
>   define PPD_FIXUP_PATHS
> -	$(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
> -	|while read -d '' f; do \
> -		file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> -		printf '%s\0' "$${f}"; \
> -	done \
> -	|xargs -0 --no-run-if-empty \
> -		$(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
> +	$(call ppd-fixup-paths,$(PER_PACKAGE_DIR)/$($(PKG)_NAME))
>   endef
>   
>   # Remove python's pre-compiled "sysconfigdata", as it may contain paths to
> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
> index 0945e6ed31..f22562fbed 100644
> --- a/package/pkg-utils.mk
> +++ b/package/pkg-utils.mk
> @@ -233,6 +233,21 @@ define prepare-per-package-directory
>   	$(call per-package-rsync,$(1),host,$(HOST_DIR))
>   	$(call per-package-rsync,$(1),target,$(TARGET_DIR))
>   endef
> +
> +# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
> +# proper staging and host directories for the current package: find
> +# all text files that contain the PPD root, and replace it with the
> +# current package's PPD.
> +# $1: destination root directory containing host and staging
> +define ppd-fixup-paths
> +	$(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
> +	|while read -d '' f; do \
> +		file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> +		printf '%s\0' "$${f}"; \
> +	done \
> +	|xargs -0 --no-run-if-empty \
> +		$(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(1)/:g'
> +endef
>   endif
>   
>   #
Peter Korsgaard Oct. 26, 2023, 7:47 a.m. UTC | #3
>>>>> "Arnout" == Arnout Vandecappelle via buildroot <buildroot@buildroot.org> writes:

 > On 27/12/2022 16:43, Brandon Maier wrote:
 >> The relocate-sdk.sh script does not work correctly when
 >> BR2_PER_PACKAGE_DIRECTORIES is enabled. relocate-sdk.sh expects
 >> everything to point at $HOST_DIR, but each package will be pointing at
 >> its $(O)/per-package/*/host.
 >> Use the same command for scrubing host paths during the build, to
 >> scrub
 >> to the final host directory location.
 >> Signed-off-by: Brandon Maier <brandon.maier@collins.com>

 >  Applied to master, thanks.

 >  And thank you Charles for the review.

Committed to 2023.02.x and 2023.08.x, thanks.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 88f90cd2fa..ac3540b36c 100644
--- a/Makefile
+++ b/Makefile
@@ -598,6 +598,7 @@  prepare-sdk: world
 	@$(call MESSAGE,"Rendering the SDK relocatable")
 	PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath host
 	PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath staging
+	$(call ppd-fixup-paths,$(BASE_DIR))
 	$(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh
 	mkdir -p $(HOST_DIR)/share/buildroot
 	echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index f24e03a325..210af1bbef 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -92,18 +92,8 @@  endif
 
 ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
 
-# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
-# proper staging and host directories for the current package: find
-# all text files that contain the PPD root, and replace it with the
-# current package's PPD.
 define PPD_FIXUP_PATHS
-	$(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
-	|while read -d '' f; do \
-		file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
-		printf '%s\0' "$${f}"; \
-	done \
-	|xargs -0 --no-run-if-empty \
-		$(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
+	$(call ppd-fixup-paths,$(PER_PACKAGE_DIR)/$($(PKG)_NAME))
 endef
 
 # Remove python's pre-compiled "sysconfigdata", as it may contain paths to
diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
index 0945e6ed31..f22562fbed 100644
--- a/package/pkg-utils.mk
+++ b/package/pkg-utils.mk
@@ -233,6 +233,21 @@  define prepare-per-package-directory
 	$(call per-package-rsync,$(1),host,$(HOST_DIR))
 	$(call per-package-rsync,$(1),target,$(TARGET_DIR))
 endef
+
+# Ensure files like .la, .pc, .pri, .cmake, and so on, point to the
+# proper staging and host directories for the current package: find
+# all text files that contain the PPD root, and replace it with the
+# current package's PPD.
+# $1: destination root directory containing host and staging
+define ppd-fixup-paths
+	$(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
+	|while read -d '' f; do \
+		file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
+		printf '%s\0' "$${f}"; \
+	done \
+	|xargs -0 --no-run-if-empty \
+		$(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(1)/:g'
+endef
 endif
 
 #