svn commit: r210146 - stable/8/usr.sbin/config

Warner Losh imp at FreeBSD.org
Thu Jul 15 22:35:51 UTC 2010


Author: imp
Date: Thu Jul 15 22:35:50 2010
New Revision: 210146
URL: http://svn.freebsd.org/changeset/base/210146

Log:
  MFC: r209969
  
  r209969 | nwhitehorn | 2010-07-12 22:08:08 -0600 (Mon, 12 Jul 2010) | 13 lines
  
  Enhance config to handle MACHINEs with multiple architectures:
  
  - Passing -m to config will now print the MACHINE and MACHINE_ARCH
    given in the passed kernel configuration file and then exit.
  - If an option is defined in options.MACHINE with the same name as the
    architecture of the kernel being configured, that option will be
    considered set. This allows conditional compilation based on CPU
    architecture.
  
  Config version is now 600010.
  
  Reviewed by:    imp

Modified:
  stable/8/usr.sbin/config/config.8
  stable/8/usr.sbin/config/configvers.h
  stable/8/usr.sbin/config/main.c
  stable/8/usr.sbin/config/mkoptions.c
Directory Properties:
  stable/8/usr.sbin/config/   (props changed)

Modified: stable/8/usr.sbin/config/config.8
==============================================================================
--- stable/8/usr.sbin/config/config.8	Thu Jul 15 22:34:30 2010	(r210145)
+++ stable/8/usr.sbin/config/config.8	Thu Jul 15 22:35:50 2010	(r210146)
@@ -78,6 +78,9 @@ Note that
 does not append
 .Ar SYSTEM_NAME
 to the directory given.
+.It Fl m
+Print the MACHINE and MACHINE_ARCH values for this
+kernel and exit.
 .It Fl g
 Configure a system for debugging.
 .It Fl x Ar kernel

Modified: stable/8/usr.sbin/config/configvers.h
==============================================================================
--- stable/8/usr.sbin/config/configvers.h	Thu Jul 15 22:34:30 2010	(r210145)
+++ stable/8/usr.sbin/config/configvers.h	Thu Jul 15 22:35:50 2010	(r210146)
@@ -49,5 +49,5 @@
  *
  * $FreeBSD$
  */
-#define	CONFIGVERS	600009
+#define	CONFIGVERS	600010
 #define	MAJOR_VERS(x)	((x) / 100000)

Modified: stable/8/usr.sbin/config/main.c
==============================================================================
--- stable/8/usr.sbin/config/main.c	Thu Jul 15 22:34:30 2010	(r210145)
+++ stable/8/usr.sbin/config/main.c	Thu Jul 15 22:35:50 2010	(r210146)
@@ -110,13 +110,18 @@ main(int argc, char **argv)
 	char *p;
 	char xxx[MAXPATHLEN];
 	char *kernfile;
+	int printmachine;
 
+	printmachine = 0;
 	kernfile = NULL;
-	while ((ch = getopt(argc, argv, "Cd:gpVx:")) != -1)
+	while ((ch = getopt(argc, argv, "Cd:gmpVx:")) != -1)
 		switch (ch) {
 		case 'C':
 			filebased = 1;
 			break;
+		case 'm':
+			printmachine = 1;
+			break;
 		case 'd':
 			if (*destdir == '\0')
 				strlcpy(destdir, optarg, sizeof(destdir));
@@ -171,13 +176,6 @@ main(int argc, char **argv)
 		strlcat(destdir, PREFIX, sizeof(destdir));
 	}
 
-	p = path((char *)NULL);
-	if (stat(p, &buf)) {
-		if (mkdir(p, 0777))
-			err(2, "%s", p);
-	} else if (!S_ISDIR(buf.st_mode))
-		errx(EXIT_FAILURE, "%s isn't a directory", p);
-
 	SLIST_INIT(&cputype);
 	SLIST_INIT(&mkopt);
 	SLIST_INIT(&opt);
@@ -207,6 +205,19 @@ main(int argc, char **argv)
 	}
 	checkversion();
 
+	if (printmachine) {
+		printf("%s\t%s\n",machinename,machinearch);
+		exit(0);
+	}
+
+	/* Make compile directory */
+	p = path((char *)NULL);
+	if (stat(p, &buf)) {
+		if (mkdir(p, 0777))
+			err(2, "%s", p);
+	} else if (!S_ISDIR(buf.st_mode))
+		errx(EXIT_FAILURE, "%s isn't a directory", p);
+
 	/*
 	 * make symbolic links in compilation directory
 	 * for "sys" (to make genassym.c work along with #include <sys/xxx>)
@@ -280,7 +291,7 @@ static void
 usage(void)
 {
 
-	fprintf(stderr, "usage: config [-CgpV] [-d destdir] sysname\n");
+	fprintf(stderr, "usage: config [-CgmpV] [-d destdir] sysname\n");
 	fprintf(stderr, "       config -x kernel\n");
 	exit(EX_USAGE);
 }

Modified: stable/8/usr.sbin/config/mkoptions.c
==============================================================================
--- stable/8/usr.sbin/config/mkoptions.c	Thu Jul 15 22:34:30 2010	(r210145)
+++ stable/8/usr.sbin/config/mkoptions.c	Thu Jul 15 22:35:50 2010	(r210146)
@@ -94,6 +94,20 @@ options(void)
 	SLIST_INSERT_HEAD(&opt, op, op_next);
 
 	read_options();
+
+	/* Fake the value of MACHINE_ARCH as an option if necessary */
+	SLIST_FOREACH(ol, &otab, o_next) {
+		if (strcasecmp(ol->o_name, machinearch) != 0)
+			continue;
+
+		op = (struct opt *)calloc(1, sizeof(*op));
+		if (op == NULL)
+			err(EXIT_FAILURE, "calloc");
+		op->op_name = ns(ol->o_name);
+		SLIST_INSERT_HEAD(&opt, op, op_next);
+		break;
+	}
+
 	SLIST_FOREACH(op, &opt, op_next) {
 		SLIST_FOREACH(ol, &otab, o_next) {
 			if (eq(op->op_name, ol->o_name) &&


More information about the svn-src-stable-8 mailing list