From 6fade5a6044b7102758f4ca66c8715ebc12a6306 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Thu, 22 Oct 2020 14:07:29 +0200 Subject: [PATCH] LTO: check that make command works gcc/ChangeLog: PR lto/97524 * lto-wrapper.c (make_exists): New function. (run_gcc): Use it to check that make is present and working for parallel execution. --- gcc/lto-wrapper.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 9072a3cc0fe..b2af3caa021 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -1334,6 +1334,26 @@ jobserver_active_p (void) return JS_PREFIX "cannot access %<" JS_NEEDLE "%> file descriptors"; } +/* Test that a make command is present and working, return true if so. */ + +static bool +make_exists (void) +{ + const char *make = "make"; + char **make_argv = buildargv (getenv ("MAKE")); + if (make_argv) + make = make_argv[0]; + const char *make_args[] = {make, "--version", NULL}; + + int exit_status = 0; + int err = 0; + const char *errmsg + = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args), + "make", NULL, NULL, &exit_status, &err); + freeargv (make_argv); + return errmsg == NULL && exit_status == 0 && err == 0; +} + /* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */ static void @@ -1570,6 +1590,10 @@ run_gcc (unsigned argc, char *argv[]) } } + /* We need make working for a parallel execution. */ + if (parallel && !make_exists ()) + parallel = 0; + if (!dumppfx) { if (!linker_output -- 2.30.2