/*- *----------------------------------------------------------------------- * Job_Init -- * Initialize the process module * * Side Effects: * lists and counters are initialized *----------------------------------------------------------------------- */ void Job_Init(int maxproc) { Static_Lst_Init(&runningJobs); Static_Lst_Init(&errorsList); maxJobs = maxproc; nJobs = 0; errors = 0; sigemptyset(&set); sigaddset(&set, SIGINT); sigaddset(&set, SIGHUP); sigaddset(&set, SIGQUIT); sigaddset(&set, SIGTERM); sigaddset(&set, SIGTSTP); sigaddset(&set, SIGTTOU); sigaddset(&set, SIGTTIN); aborting = 0; lastNode = NULL; if ((begin_node->type & OP_DUMMY) == 0) { JobStart(begin_node, JOB_IS_SPECIAL); loop_handle_running_jobs(); } }
void LowParse_Init(void) { Static_Lst_Init(&input_stack); current = NULL; }
/*- * main -- * The main function, for obvious reasons. Initializes variables * and a few modules, then parses the arguments give it in the * environment and on the command line. Reads the system makefile * followed by either Makefile, makefile or the file given by the * -f argument. Sets the .MAKEFLAGS PMake variable based on all the * flags it has received by then uses either the Make or the Compat * module to create the initial list of targets. * * Results: * If -q was given, exits -1 if anything was out-of-date. Else it exits * 0. * * Side Effects: * The program exits when done. Targets are created. etc. etc. etc. */ int main(int argc, char **argv) { static LIST targs; /* target nodes to create */ bool outOfDate = true; /* false if all targets up to date */ char *machine = figure_out_MACHINE(); char *machine_arch = figure_out_MACHINE_ARCH(); char *machine_cpu = figure_out_MACHINE_CPU(); const char *syspath = _PATH_DEFSYSPATH; char *p; static struct dirs d; bool read_depend = true;/* false if we don't want to read .depend */ MainParseChdir(argc, argv); setup_CURDIR_OBJDIR(&d, machine); esetenv("PWD", d.object); unsetenv("CDPATH"); Static_Lst_Init(create); Static_Lst_Init(&makefiles); Static_Lst_Init(&varstoprint); Static_Lst_Init(&targs); beSilent = false; /* Print commands as executed */ ignoreErrors = false; /* Pay attention to non-zero returns */ noExecute = false; /* Execute all commands */ keepgoing = false; /* Stop on error */ allPrecious = false; /* Remove targets when interrupted */ queryFlag = false; /* This is not just a check-run */ noBuiltins = false; /* Read the built-in rules */ touchFlag = false; /* Actually update targets */ debug = 0; /* No debug verbosity, please. */ maxJobs = DEFMAXJOBS; compatMake = false; /* No compat mode */ /* * Initialize all external modules. */ Init(); if (d.object != d.current) Dir_AddDir(defaultPath, d.current); Var_Set(".CURDIR", d.current); Var_Set(".OBJDIR", d.object); Parse_setcurdir(d.current); Targ_setdirs(d.current, d.object); /* * Initialize various variables. * MAKE also gets this name, for compatibility * .MAKEFLAGS gets set to the empty string just in case. * MFLAGS also gets initialized empty, for compatibility. */ Var_Set("MAKE", argv[0]); Var_Set(".MAKE", argv[0]); Var_Set(MAKEFLAGS, ""); Var_Set("MFLAGS", ""); Var_Set("MACHINE", machine); Var_Set("MACHINE_ARCH", machine_arch); Var_Set("MACHINE_CPU", machine_cpu); /* * First snag any flags out of the MAKEFLAGS environment variable. */ Main_ParseArgLine(getenv("MAKEFLAGS")); basedirectory = getenv("MAKEBASEDIRECTORY"); if (basedirectory == NULL) setenv("MAKEBASEDIRECTORY", d.current, 0); MainParseArgs(argc, argv); /* * Be compatible if user did not specify -j */ if (!forceJobs) compatMake = true; /* And set up everything for sub-makes */ Var_AddCmdline(MAKEFLAGS); /* * Set up the .TARGETS variable to contain the list of targets to be * created. If none specified, make the variable empty -- the parser * will fill the thing in with the default or .MAIN target. */ if (!Lst_IsEmpty(create)) { LstNode ln; for (ln = Lst_First(create); ln != NULL; ln = Lst_Adv(ln)) { char *name = (char *)Lst_Datum(ln); if (strcmp(name, "depend") == 0) read_depend = false; Var_Append(".TARGETS", name); } } else Var_Set(".TARGETS", ""); /* * If no user-supplied system path was given (through the -m option) * add the directories from the DEFSYSPATH (more than one may be given * as dir1:...:dirn) to the system include path. */ if (Lst_IsEmpty(systemIncludePath)) add_dirpath(systemIncludePath, syspath); read_all_make_rules(noBuiltins, read_depend, &makefiles, &d); Var_Append("MFLAGS", Var_Value(MAKEFLAGS)); /* Install all the flags into the MAKEFLAGS env variable. */ if (((p = Var_Value(MAKEFLAGS)) != NULL) && *p) esetenv("MAKEFLAGS", p); setup_VPATH(); process_suffixes_after_makefile_is_read(); if (dumpData) { dump_data(); exit(0); } /* Print the initial graph, if the user requested it. */ if (DEBUG(GRAPH1)) dump_data(); /* Print the values of any variables requested by the user. */ if (!Lst_IsEmpty(&varstoprint)) { LstNode ln; for (ln = Lst_First(&varstoprint); ln != NULL; ln = Lst_Adv(ln)) { char *value = Var_Value((char *)Lst_Datum(ln)); printf("%s\n", value ? value : ""); } } else { /* Have now read the entire graph and need to make a list * of targets to create. If none was given on the command * line, we consult the parsing module to find the main * target(s) to create. */ if (Lst_IsEmpty(create)) Parse_MainName(&targs); else Targ_FindList(&targs, create); Job_Init(maxJobs); /* If the user has defined a .BEGIN target, execute the commands * attached to it. */ if (!queryFlag) Job_Begin(); if (compatMake) /* Compat_Init will take care of creating all the * targets as well as initializing the module. */ Compat_Run(&targs); else { /* Traverse the graph, checking on all the targets. */ outOfDate = Make_Run(&targs); } } /* print the graph now it's been processed if the user requested it */ if (DEBUG(GRAPH2)) post_mortem(); if (queryFlag && outOfDate) return 1; else return 0; }