svn commit: r209969 - head/usr.sbin/config
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Jul 13 04:08:08 UTC 2010
Author: nwhitehorn
Date: Tue Jul 13 04:08:08 2010
New Revision: 209969
URL: http://svn.freebsd.org/changeset/base/209969
Log:
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:
head/usr.sbin/config/config.8
head/usr.sbin/config/configvers.h
head/usr.sbin/config/main.c
head/usr.sbin/config/mkoptions.c
Modified: head/usr.sbin/config/config.8
==============================================================================
--- head/usr.sbin/config/config.8 Tue Jul 13 03:56:29 2010 (r209968)
+++ head/usr.sbin/config/config.8 Tue Jul 13 04:08:08 2010 (r209969)
@@ -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: head/usr.sbin/config/configvers.h
==============================================================================
--- head/usr.sbin/config/configvers.h Tue Jul 13 03:56:29 2010 (r209968)
+++ head/usr.sbin/config/configvers.h Tue Jul 13 04:08:08 2010 (r209969)
@@ -49,5 +49,5 @@
*
* $FreeBSD$
*/
-#define CONFIGVERS 600009
+#define CONFIGVERS 600010
#define MAJOR_VERS(x) ((x) / 100000)
Modified: head/usr.sbin/config/main.c
==============================================================================
--- head/usr.sbin/config/main.c Tue Jul 13 03:56:29 2010 (r209968)
+++ head/usr.sbin/config/main.c Tue Jul 13 04:08:08 2010 (r209969)
@@ -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: head/usr.sbin/config/mkoptions.c
==============================================================================
--- head/usr.sbin/config/mkoptions.c Tue Jul 13 03:56:29 2010 (r209968)
+++ head/usr.sbin/config/mkoptions.c Tue Jul 13 04:08:08 2010 (r209969)
@@ -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-all
mailing list