Hi.

The patch splits arguments in getenv ("MAKE") so that one can use:

$ MAKE="make -s" gcc main.o -flto=16

Right now it fails due to:
[pid  6004] execve("/home/marxin/Programming/script-misc/make -s", ["make -s", "-f", 
"/tmp/ccNpRBlZ.mk", "-j16", "all"], 0x4b69b0 /* 82 vars */) = -1 ENOENT (No such file or directory)

I've tested the patch for lto.exp and now I'm doing a proper bootstrap.
Ready after tests?

Thanks,
Martin

gcc/ChangeLog:

2020-05-06  Martin Liska  <mli...@suse.cz>

        * lto-wrapper.c: Split arguments of MAKE environment
        variable.
---
 gcc/lto-wrapper.c | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)


diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 19d0c224dad..16d85625377 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -1894,23 +1894,36 @@ cont:
 	      putenv (xstrdup ("MAKEFLAGS="));
 	      putenv (xstrdup ("MFLAGS="));
 	    }
-	  new_argv[0] = getenv ("MAKE");
-	  if (!new_argv[0])
-	    new_argv[0] = "make";
-	  new_argv[1] = "-f";
-	  new_argv[2] = makefile;
-	  i = 3;
+	  const char *make = getenv ("MAKE");
+	  unsigned argc = 0;
+	  struct obstack make_argv_obstack;
+	  obstack_init (&make_argv_obstack);
+
+	  if (make)
+	    {
+	      argv = buildargv (make);
+	      for (; argv[argc]; argc++)
+		obstack_ptr_grow (&make_argv_obstack, argv[argc]);
+	    }
+	  else
+	    obstack_ptr_grow (&make_argv_obstack, "make");
+
+	  obstack_ptr_grow (&make_argv_obstack, "-f");
+	  obstack_ptr_grow (&make_argv_obstack, makefile);
 	  if (!jobserver)
 	    {
 	      snprintf (jobs, 31, "-j%ld",
 			auto_parallel ? nthreads_var : parallel);
-	      new_argv[i++] = jobs;
+	      obstack_ptr_grow (&make_argv_obstack, jobs);
 	    }
-	  new_argv[i++] = "all";
-	  new_argv[i++] = NULL;
-	  pex = collect_execute (new_argv[0], CONST_CAST (char **, new_argv),
+	  obstack_ptr_grow (&make_argv_obstack, "all");
+	  obstack_ptr_grow (&make_argv_obstack, NULL);
+	  const char **argv = XOBFINISH (&make_argv_obstack, const char **);
+
+	  pex = collect_execute (argv[0], CONST_CAST (char **, argv),
 				 NULL, NULL, PEX_SEARCH, false);
-	  do_wait (new_argv[0], pex);
+	  do_wait (argv[0], pex);
+	  obstack_free (&make_argv_obstack, NULL);
 	  maybe_unlink (makefile);
 	  makefile = NULL;
 	  for (i = 0; i < nr; ++i)

Reply via email to