[Buildroot] [PATCH 1/3] Makefile: don't hang the build if there are no file lists

Yann E. MORIN yann.morin.1998 at free.fr
Wed Mar 18 21:49:08 UTC 2020


Thomas², All,

On 2020-03-18 16:58 +0100, Thomas De Schampheleire spake thusly:
> From: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> 
> In very limited configurations, it is possible to have a case where no
> .files-list-staging.txt files are created. In this case:
> 
> 	cat $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt)) > \
> 		$(BUILD_DIR)/packages-file-list-staging.txt
> 
> becomes:
> 
> 	cat > \
> 		$(BUILD_DIR)/packages-file-list-staging.txt
> 
> which of course makes the build hang.. forever.
> 
> So we fix this by checking the list is not empty. To keep the code
> readable, we introduce an intermediate variable to store the list of
> these files.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
> ---
>  Makefile | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 5455e6662e..29d30a4f70 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -728,6 +728,10 @@ $(TARGETS_ROOTFS): target-finalize
>  # Avoid the rootfs name leaking down the dependency chain
>  target-finalize: ROOTFS=
>  
> +TARGET_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list.txt))
> +HOST_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-host.txt))
> +STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt))
> +
>  .PHONY: host-finalize
>  host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
>  	@$(call MESSAGE,"Finalizing host directory")
> @@ -808,12 +812,12 @@ endif # merged /usr
>  
>  	touch $(TARGET_DIR)/usr
>  
> -	cat $(sort $(wildcard $(BUILD_DIR)/*/.files-list.txt)) > \
> -		$(BUILD_DIR)/packages-file-list.txt
> -	cat $(sort $(wildcard $(BUILD_DIR)/*/.files-list-host.txt)) > \
> -		$(BUILD_DIR)/packages-file-list-host.txt
> -	cat $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt)) > \
> -		$(BUILD_DIR)/packages-file-list-staging.txt
> +	$(if $(TARGET_DIR_FILES_LISTS), \
> +		cat $(TARGET_DIR_FILES_LISTS) > $(BUILD_DIR)/packages-file-list.txt)
> +	$(if $(HOST_DIR_FILES_LISTS), \
> +		cat $(HOST_DIR_FILES_LISTS) > $(BUILD_DIR)/packages-file-list-host.txt)
> +	$(if $(STAGING_DIR_FILES_LISTS), \
> +		cat $(STAGING_DIR_FILES_LISTS) > $(BUILD_DIR)/packages-file-list-staging.txt)

So, if there is no file instaleld in staging, the packages-file-list-staging.txt
file is not created. However, in followup patches, you make it (as well
as the other two) available to post-build scripts.

This is not nce, as the scripts will have to be carefull to test if the
files exist.

I would like to suggest an alternative, that guarantees the files are
created, even if empty:

    $(if $(STAGING_DIR_FILES_LISTS), \
        cat $(STAGING_DIR_FILES_LISTS)) >$(BUILD_DIR)/packages-file-list-staging.txt

Notice how the redirection is outside the conditional, so that if there
is no file, the commadn will be:

    > $(BUILD_DIR)/packages-file-list-staging.txt

Which will create an empty file.

Thoughts? Shall I do that when applying the series or will you want to
respin?

Regards,
Yann E. MORIN.

>  
>  .PHONY: target-post-image
>  target-post-image: $(TARGETS_ROOTFS) target-finalize staging-finalize
> -- 
> 2.24.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list