[2/5] gcc: Fix "argument list too long" from install-plugins

Message ID 20211027200505.3340725-3-richard.purdie@linuxfoundation.org
State New
Headers
Series OpenEmbedded/Yocto Project gcc patches |

Commit Message

Richard Purdie Oct. 27, 2021, 8:05 p.m. UTC
  When building in longer build paths (200+ characters), the
"echo $(PLUGIN_HEADERS)" from the install-plugins target would cause an
"argument list too long error" on some systems.

Avoid this by calling make's sort function on the list which removes
duplicates and stops the overflow from reaching the echo command.
The original sort is left to handle the the .h and .def files.

2021-10-26 Richard Purdie <richard.purdie@linuxfoundation.org>

gcc/ChangeLog:

    * Makefile.in: Fix "argument list too long" from install-plugins

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 gcc/Makefile.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Bernhard Reutner-Fischer Oct. 27, 2021, 8:54 p.m. UTC | #1
On Wed, 27 Oct 2021 21:05:02 +0100
Richard Purdie via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:

> When building in longer build paths (200+ characters), the
> "echo $(PLUGIN_HEADERS)" from the install-plugins target would cause an
> "argument list too long error" on some systems.
> 
> Avoid this by calling make's sort function on the list which removes
> duplicates and stops the overflow from reaching the echo command.
> The original sort is left to handle the the .h and .def files.

you could as well $(subst $(srcdir),,$(wildcard $(addprefix
$(srcdir),*.h *.def))) and subst '' with '\012' wrapped in an outer
sort to completely do away with the echo and shell sort i suppose.
Just an idea.
thanks,
> 
> 2021-10-26 Richard Purdie <richard.purdie@linuxfoundation.org>
> 
> gcc/ChangeLog:
> 
>     * Makefile.in: Fix "argument list too long" from install-plugins
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
>  gcc/Makefile.in | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 658093c11c0..89482c6dd4e 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -3685,7 +3685,7 @@ install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype
>  # We keep the directory structure for files in config, common/config or
>  # c-family and .def files. All other files are flattened to a single directory.
>  	$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
> -	headers=`echo $(PLUGIN_HEADERS) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
> +	headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
>  	srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
>  	for file in $$headers; do \
>  	  if [ -f $$file ] ; then \
  
Jeff Law Dec. 3, 2021, 3:01 a.m. UTC | #2
On 10/27/2021 2:05 PM, Richard Purdie via Gcc-patches wrote:
> When building in longer build paths (200+ characters), the
> "echo $(PLUGIN_HEADERS)" from the install-plugins target would cause an
> "argument list too long error" on some systems.
>
> Avoid this by calling make's sort function on the list which removes
> duplicates and stops the overflow from reaching the echo command.
> The original sort is left to handle the the .h and .def files.
>
> 2021-10-26 Richard Purdie<richard.purdie@linuxfoundation.org>
>
> gcc/ChangeLog:
>
>      * Makefile.in: Fix "argument list too long" from install-plugins
>
> Signed-off-by: Richard Purdie<richard.purdie@linuxfoundation.org>
Thanks.  I've pushed this to the trunk.  Sorry about the long wait.
jeff
  

Patch

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 658093c11c0..89482c6dd4e 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3685,7 +3685,7 @@  install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype
 # We keep the directory structure for files in config, common/config or
 # c-family and .def files. All other files are flattened to a single directory.
 	$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
-	headers=`echo $(PLUGIN_HEADERS) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
+	headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
 	srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
 	for file in $$headers; do \
 	  if [ -f $$file ] ; then \