/* * Build the makefile from the skeleton */ void makefile(void) { FILE *ifp, *ofp; char line[BUFSIZ]; struct opt *op; int versreq; read_files(); snprintf(line, sizeof(line), "../platform/%s/conf/Makefile", platformname); ifp = fopen(line, "r"); if (ifp == NULL) { snprintf(line, sizeof(line), "Makefile.%s", platformname); ifp = fopen(line, "r"); } if (ifp == NULL) err(1, "%s", line); ofp = fopen(path("Makefile.new"), "w"); if (ofp == NULL) err(1, "%s", path("Makefile.new")); fprintf(ofp, "KERN_IDENT=%s\n", raisestr(ident)); fprintf(ofp, "MACHINE_PLATFORM=%s\n", platformname); fprintf(ofp, "MACHINE=%s\n", machinename); fprintf(ofp, "MACHINE_ARCH=%s\n", machinearchname); fprintf(ofp, ".makeenv MACHINE_PLATFORM\n"); fprintf(ofp, ".makeenv MACHINE\n"); fprintf(ofp, ".makeenv MACHINE_ARCH\n"); fprintf(ofp, "IDENT="); if (profiling) fprintf(ofp, " -DGPROF"); if (cputype == 0) { printf("cpu type must be specified\n"); exit(1); } fprintf(ofp, "\n"); for (op = mkopt; op != NULL; op = op->op_next) fprintf(ofp, "%s=%s\n", op->op_name, op->op_value); if (debugging) fprintf(ofp, "DEBUG=-g\n"); if (profiling) { fprintf(ofp, "PROF=-pg\n"); fprintf(ofp, "PROFLEVEL=%d\n", profiling); } if (*srcdir != '\0') fprintf(ofp,"S=%s\n", srcdir); while (fgets(line, BUFSIZ, ifp) != 0) { if (*line != '%') { fprintf(ofp, "%s", line); continue; } if (strcmp(line, "%BEFORE_DEPEND\n") == 0) do_before_depend(ofp); else if (strcmp(line, "%OBJS\n") == 0) do_objs(ofp); else if (strcmp(line, "%MFILES\n") == 0) do_mfiles(ofp); else if (strcmp(line, "%CFILES\n") == 0) do_cfiles(ofp); else if (strcmp(line, "%SFILES\n") == 0) do_sfiles(ofp); else if (strcmp(line, "%RULES\n") == 0) do_rules(ofp); else if (strcmp(line, "%CLEAN\n") == 0) do_clean(ofp); else if (strncmp(line, "%VERSREQ=", sizeof("%VERSREQ=") - 1) == 0) { versreq = atoi(line + sizeof("%VERSREQ=") - 1); if (versreq != CONFIGVERS) { fprintf(stderr, "ERROR: version of config(8) does not match kernel!\n"); fprintf(stderr, "config version = %d, ", CONFIGVERS); fprintf(stderr, "version required = %d\n\n", versreq); fprintf(stderr, "Make sure that /usr/src/usr.sbin/config is in sync\n"); fprintf(stderr, "with your /usr/src/sys and install a new config binary\n"); fprintf(stderr, "before trying this again.\n\n"); fprintf(stderr, "If running the new config fails check your config\n"); fprintf(stderr, "file against the GENERIC or LINT config files for\n"); fprintf(stderr, "changes in config syntax, or option/device naming\n"); fprintf(stderr, "conventions\n\n"); exit(1); } } else fprintf(stderr, "Unknown %% construct in generic makefile: %s", line); } fclose(ifp); fclose(ofp); moveifchanged(path("Makefile.new"), path("Makefile")); }
/* * Build the makefile from the skeleton */ void makefile(void) { FILE *ifp, *ofp; FILE *dfp; char pname[BUFSIZ]; char line[BUFSIZ]; struct opt *op; read_files(); (void) sprintf(line, "%s/Makefile.template", config_directory); ifp = fopenp(VPATH, line, pname, "r"); if (ifp == 0) { perror(line); exit(1); } dfp = fopen(path("Makefile"), "r"); rename(path("Makefile"), path("Makefile.old")); unlink(path("Makefile.old")); ofp = fopen(path("Makefile"), "w"); if (ofp == 0) { perror(path("Makefile")); exit(1); } fprintf(ofp, "SOURCE_DIR=%s\n", source_directory); fprintf(ofp, "export CONFIG_DEFINES ="); if (profiling) fprintf(ofp, " -DGPROF"); for (op = opt; op; op = op->op_next) if (op->op_value) fprintf(ofp, " -D%s=\"%s\"", op->op_name, op->op_value); else fprintf(ofp, " -D%s", op->op_name); fprintf(ofp, "\n"); for (op = mkopt; op; op = op->op_next) if (op->op_value) fprintf(ofp, "%s=%s\n", op->op_name, op->op_value); else fprintf(ofp, "%s\n", op->op_name); while (fgets(line, BUFSIZ, ifp) != 0) { if (*line == '%') goto percent; if (profiling && strncmp(line, "COPTS=", 6) == 0) { register char *cp; fprintf(ofp, "GPROF.EX=$(SOURCE_DIR)/machdep/%s/gmon.ex\n", machinename); cp = index(line, '\n'); if (cp) *cp = 0; cp = line + 6; while (*cp && (*cp == ' ' || *cp == '\t')) cp++; COPTS = malloc((unsigned)(strlen(cp) + 1)); if (COPTS == 0) { printf("config: out of memory\n"); exit(1); } strcpy(COPTS, cp); fprintf(ofp, "%s -pg\n", line); continue; } fprintf(ofp, "%s", line); continue; percent: if (eq(line, "%OBJS\n")) { do_objs(ofp, "OBJS=", -1); } else if (eq(line, "%CFILES\n")) { do_files(ofp, "CFILES=", 'c'); do_objs(ofp, "COBJS=", 'c'); } else if (eq(line, "%CXXFILES\n")) { do_files(ofp, "CXXFILES=", 'p'); do_objs(ofp, "CXXOBJS=", 'p'); } else if (eq(line, "%SFILES\n")) { do_files(ofp, "SFILES=", 's'); do_objs(ofp, "SOBJS=", 's'); } else if (eq(line, "%MACHDEP\n")) { do_machdep(ofp); } else if (eq(line, "%RULES\n")) do_rules(ofp); else fprintf(stderr, "Unknown %% construct in generic makefile: %s", line); } if (dfp != NULL) { copy_dependencies(dfp, ofp); (void) fclose(dfp); } (void) fclose(ifp); (void) fclose(ofp); }
/* * Build the makefile from the skeleton */ void makefile(void) { FILE *ifp, *ofp; FILE *dfp; char pname[BUFSIZ]; char line[BUFSIZ]; struct opt *op; struct users *up; read_files(); (void) sprintf(line, "%s/Makefile.template", config_directory); ifp = fopenp(VPATH, line, pname, "r"); if (ifp == 0) { perror(line); exit(1); } dfp = fopen(path("Makefile"), "r"); rename(path("Makefile"), path("Makefile.old")); unlink(path("Makefile.old")); unlink(path("M.d")); if ((ofp = fopen(path("M.d"), "w")) == NULL) { perror(path("M.d")); /* We'll let this error go */ } else fclose(ofp); ofp = fopen(path("Makefile"), "w"); if (ofp == 0) { perror(path("Makefile")); exit(1); } fprintf(ofp, "SOURCE_DIR=%s\n", source_directory); if (machine == MACHINE_SUN || machine == MACHINE_SUN2 || machine == MACHINE_SUN3 || machine == MACHINE_SUN4) fprintf(ofp, "IDENT=-D%s -D%s", machinename, allCaps(ident)); else fprintf(ofp, "IDENT=-D%s", allCaps(ident)); if (profiling) fprintf(ofp, " -DGPROF"); if (cputype == 0) { printf("cpu type must be specified\n"); exit(1); } do_build("cputypes.h", build_cputypes); for (op = opt; op; op = op->op_next) if (op->op_value) fprintf(ofp, " -D%s=\"%s\"", op->op_name, op->op_value); else fprintf(ofp, " -D%s", op->op_name); fprintf(ofp, "\n"); if ((unsigned)machine > NUSERS) { printf("maxusers config info isn't present, using vax\n"); up = &users[MACHINE_VAX-1]; } else up = &users[machine-1]; if (maxusers < up->u_min) { maxusers = up->u_min; } else if (maxusers > up->u_max) printf("warning: maxusers > %d (%d)\n", up->u_max, maxusers); if (maxusers) { do_build("confdep.h", build_confdep); } for (op = mkopt; op; op = op->op_next) if (op->op_value) fprintf(ofp, "%s=%s\n", op->op_name, op->op_value); else fprintf(ofp, "%s\n", op->op_name); while (fgets(line, BUFSIZ, ifp) != 0) { if (*line == '%') goto percent; if (profiling && strncmp(line, "COPTS=", 6) == 0) { register char *cp; if (machine != MACHINE_MMAX) fprintf(ofp, "GPROF.EX=$(SOURCE_DIR)/machdep/%s/gmon.ex\n", machinename); cp = index(line, '\n'); if (cp) *cp = 0; cp = line + 6; while (*cp && (*cp == ' ' || *cp == '\t')) cp++; COPTS = malloc((unsigned)(strlen(cp) + 1)); if (COPTS == 0) { printf("config: out of memory\n"); exit(1); } strcpy(COPTS, cp); if (machine == MACHINE_MIPSY || machine == MACHINE_MIPS) { fprintf(ofp, "%s ${CCPROFOPT}\n", line); fprintf(ofp, "PCOPTS=%s\n", cp); } else if (machine == MACHINE_MMAX) fprintf(ofp, "%s -p\n",line); else fprintf(ofp, "%s -pg\n", line); continue; } fprintf(ofp, "%s", line); continue; percent: if (eq(line, "%OBJS\n")) { do_objs(ofp, "OBJS=", -1); } else if (eq(line, "%CFILES\n")) { do_files(ofp, "CFILES=", 'c'); do_objs(ofp, "COBJS=", 'c'); } else if (eq(line, "%MFILES\n")) { do_files(ofp, "MFILES=", 'm'); do_objs(ofp, "MOBJS=", 'm'); } else if (eq(line, "%SFILES\n")) { do_files(ofp, "SFILES=", 's'); do_objs(ofp, "SOBJS=", 's'); } else if (eq(line, "%BFILES\n")) do_files(ofp, "BFILES=", 'b'); else if (eq(line, "%MACHDEP\n")) { /* * Move do_machdep() after the mkopt stuff. */ for (op = mkopt; op; op = op->op_next) fprintf(ofp, "%s=%s\n", op->op_name, op->op_value); do_machdep(ofp); } else if (eq(line, "%ORDERED\n")) do_ordered(ofp); else if (eq(line, "%RULES\n")) do_rules(ofp); else if (eq(line, "%LOAD\n")) do_load(ofp); else fprintf(stderr, "Unknown %% construct in generic makefile: %s", line); } if (dfp != NULL) { copy_dependencies(dfp, ofp); (void) fclose(dfp); } (void) fclose(ifp); (void) fclose(ofp); }