Add a new system config directive called "nonoptional" which specifies
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 3 Aug 2005 23:33:52 +0000 (23:33 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 3 Aug 2005 23:33:52 +0000 (23:33 +0000)
files based on options which MUST be specified in the kernel config.

Make the option to maintain compatibility with DragonFly 1.2 (and older
1.3 kernels) non-optional.

Older versions of config will not recognize the new option and generate
a reasonable error, rather then blindly compile a kernel without 1.2
support, hopefully prompting people to recompile their config
program rather then post a bug report.

sys/conf/files
usr.sbin/config/mkmakefile.c
usr.sbin/config/mkoptions.c

index b294ce1..e265835 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.100 2005/08/02 13:03:54 joerg Exp $
+# $DragonFly: src/sys/conf/files,v 1.101 2005/08/03 23:33:52 dillon Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -1451,4 +1451,4 @@ emulation/43bsd/43bsd_exit.c              optional compat_43
 emulation/43bsd/43bsd_resource.c       optional compat_43
 emulation/43bsd/43bsd_hostinfo.c       optional compat_43
 emulation/43bsd/43bsd_vm.c             optional compat_43
-emulation/dragonfly12/dfbsd12_stat.c   optional compat_43
+emulation/dragonfly12/dfbsd12_stat.c   nonoptional compat_df12
index 9ad3cf8..d2d990e 100644 (file)
@@ -32,7 +32,7 @@
  *
  * @(#)mkmakefile.c    8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/mkmakefile.c,v 1.51.2.3 2001/01/23 00:09:32 peter Exp $
- * $DragonFly: src/usr.sbin/config/mkmakefile.c,v 1.14 2005/01/12 00:26:03 cpressey Exp $
+ * $DragonFly: src/usr.sbin/config/mkmakefile.c,v 1.15 2005/08/03 23:33:45 dillon Exp $
  */
 
 /*
@@ -233,6 +233,7 @@ read_files(void)
        struct opt *op;
        char *wd, *this, *needs, *special, *depends, *clean, *warning;
        char fname[MAXPATHLEN];
+       int nonoptional;
        int nreqs, first = 1, configdep, isdup, std, filetype,
            imp_rule, no_obj, before_depend, mandatory;
 
@@ -315,24 +316,29 @@ next:
        warning = NULL;
        configdep = 0;
        needs = NULL;
-       std = mandatory = 0;
+       std = mandatory = nonoptional = 0;
        imp_rule = 0;
        no_obj = 0;
        before_depend = 0;
        filetype = NORMAL;
-       if (strcmp(wd, "standard") == 0)
+       if (strcmp(wd, "standard") == 0) {
                std = 1;
-       /*
-        * If an entry is marked "mandatory", config will abort if it's
-        * not called by a configuration line in the config file.  Apart
-        * from this, the device is handled like one marked "optional".
-        */
-       else if (strcmp(wd, "mandatory") == 0)
+       } else if (strcmp(wd, "mandatory") == 0) {
+               /*
+                * If an entry is marked "mandatory", config will abort if 
+                * it's not called by a configuration line in the config
+                * file.  Apart from this, the device is handled like one
+                * marked "optional".
+                */
                mandatory = 1;
-       else if (strcmp(wd, "optional") != 0) {
+       } else if (strcmp(wd, "nonoptional") == 0) {
+               nonoptional = 1;
+       } else if (strcmp(wd, "optional") == 0) {
+               /* don't need to do anything */
+       } else {
                printf("%s: %s must be optional, mandatory or standard\n",
                       fname, this);
-               printf("Your version of config(8) is out of sync with your kernel source.\n");
+               printf("Alternatively, your version of config(8) may be out of sync with your\nkernel source.\n");
                exit(1);
        }
 nextparam:
@@ -443,7 +449,7 @@ nextparam:
                save_dp->d_next = dp;
                goto nextparam;
        }
-       for (op = opt; op != NULL; op = op->op_next)
+       for (op = opt; op != NULL; op = op->op_next) {
                if (op->op_value == 0 && opteq(op->op_name, wd)) {
                        if (nreqs == 1) {
                                free(needs);
@@ -451,6 +457,12 @@ nextparam:
                        }
                        goto nextparam;
                }
+       }
+       if (nonoptional) {
+               printf("%s: the option \"%s\" MUST be specified\n",
+                       fname, wd);
+               exit(1);
+       }
 invis:
        while ((wd = get_word(fp)) != 0)
                ;
index 7d1dd9d..23b2265 100644 (file)
@@ -33,7 +33,7 @@
  *
  * @(#)mkheaders.c     8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/mkoptions.c,v 1.17.2.3 2001/12/13 19:18:01 dillon Exp $
- * $DragonFly: src/usr.sbin/config/mkoptions.c,v 1.15 2005/08/02 13:18:25 joerg Exp $
+ * $DragonFly: src/usr.sbin/config/mkoptions.c,v 1.16 2005/08/03 23:33:45 dillon Exp $
  */
 
 /*
@@ -139,12 +139,6 @@ do_option(char *name)
                }
        }
 
-       if (strcmp(name, "COMPAT_DF12") == 0 &&
-           getenv("NO_COMPAT_DF12") == NULL &&
-           (value == NULL || strcmp(value, "1") != 0))
-               errx(1, "options COMPAT_DF12 not specified, "
-                    "set NO_COMPAT_DF12 to ignore");
-
        inf = fopen(file, "r");
        if (inf == NULL) {
                outf = fopen(file, "w");