Print this page
make: be serial if 'make', parallel if 'dmake', and parallel if '-j' is specified either way
@@ -38,10 +38,11 @@
#include <bsd/bsd.h> /* bsd_signal() */
#include <locale.h> /* setlocale() */
+#include <libgen.h>
#include <mk/defs.h>
#include <mksdmsi18n/mksdmsi18n.h> /* libmksdmsi18n_init() */
#include <mksh/macro.h> /* getvar() */
#include <mksh/misc.h> /* getmem(), setup_char_semantics() */
@@ -411,17 +412,31 @@
/*
* Find the dmake_mode: parallel, or serial.
*/
if ((!pmake_cap_r_specified) &&
(!pmake_machinesfile_specified)) {
+ char *s = strdup(argv[0]);
+
MBSTOWCS(wcs_buffer, NOCATGETS("DMAKE_MODE"));
dmake_name2 = GETNAME(wcs_buffer, FIND_LENGTH);
prop2 = get_prop(dmake_name2->prop, macro_prop);
- if (prop2 == NULL) {
- /* DMAKE_MODE not defined, default to parallel mode */
+ // If we're invoked as 'make' run serially, regardless of DMAKE_MODE
+ // If we're invoked as 'make' but passed -j, run parallel
+ // If we're invoked as 'dmake', without DMAKE_MODE, default parallel
+ // If we're invoked as 'dmake' and DMAKE_MODE is set, honour it.
+ if ((strcmp(basename(s), NOCATGETS("make")) == 0) &&
+ !dmake_max_jobs_specified) {
+ dmake_mode_type = serial_mode;
+ no_parallel = true;
+ } else if (prop2 == NULL) {
+ /* DMAKE_MODE not defined, default based on our name */
+ char *s = strdup(argv[0]);
+
+ if (strcmp(basename(s), NOCATGETS("dmake")) == 0) {
dmake_mode_type = parallel_mode;
no_parallel = false;
+ }
} else {
dmake_value2 = prop2->body.macro.value;
if (IS_EQUAL(dmake_value2->string_mb, NOCATGETS("parallel"))) {
dmake_mode_type = parallel_mode;
no_parallel = false;
@@ -430,11 +445,11 @@
no_parallel = true;
} else {
fatal(catgets(catd, 1, 307, "Unknown dmake mode argument `%s' after -m flag"), dmake_value2->string_mb);
}
}
-
+ free(s);
}
parallel_flag = true;
putenv(strdup(NOCATGETS("DMAKE_CHILD=TRUE")));
@@ -1361,10 +1376,12 @@
return 0;
case 'j': /* Use alternative DMake max jobs */
if (invert_this) {
dmake_max_jobs_specified = false;
} else {
+ dmake_mode_type = parallel_mode;
+ no_parallel = false;
dmake_max_jobs_specified = true;
}
return 8;
case 'K': /* Read alternative .make.state */
return 256;