Author: kevans
Date: Tue Jul 17 14:14:53 2018
New Revision: 336415
URL: https://svnweb.freebsd.org/changeset/base/336415

Log:
  config(8): Add compatibility shims for r335998
  
  Plumb the %VERSREQ from Makefile.<arch> through to the rest of config(8).
  We've recorded the config(8) version that we're calling "the end of
  envmode and hintmode," and we'll write them out for earlier versions. Later
  kernel version bumps will remove envmode/hintmode from the kernel as needed,
  which is OK since the current kernel does not use them at all.
  
  These compatibility shims really need to go away when the major version
  rolls over...
  
  Discussed with:       imp

Modified:
  head/usr.sbin/config/config.h
  head/usr.sbin/config/configvers.h
  head/usr.sbin/config/main.c
  head/usr.sbin/config/mkmakefile.c

Modified: head/usr.sbin/config/config.h
==============================================================================
--- head/usr.sbin/config/config.h       Tue Jul 17 14:11:30 2018        
(r336414)
+++ head/usr.sbin/config/config.h       Tue Jul 17 14:14:53 2018        
(r336415)
@@ -212,6 +212,7 @@ extern int  debugging;
 extern int     found_defaults;
 
 extern int     maxusers;
+extern int     versreq;
 
 extern char *PREFIX;           /* Config file name - for error messages */
 extern char srcdir[];          /* root of the kernel source tree */

Modified: head/usr.sbin/config/configvers.h
==============================================================================
--- head/usr.sbin/config/configvers.h   Tue Jul 17 14:11:30 2018        
(r336414)
+++ head/usr.sbin/config/configvers.h   Tue Jul 17 14:14:53 2018        
(r336415)
@@ -49,5 +49,8 @@
  *
  * $FreeBSD$
  */
-#define        CONFIGVERS      600015
+#define        CONFIGVERS      600016
 #define        MAJOR_VERS(x)   ((x) / 100000)
+
+/* Last config(8) version to require envmode/hintmode */
+#define        CONFIGVERS_ENVMODE_REQ  600015

Modified: head/usr.sbin/config/main.c
==============================================================================
--- head/usr.sbin/config/main.c Tue Jul 17 14:11:30 2018        (r336414)
+++ head/usr.sbin/config/main.c Tue Jul 17 14:14:53 2018        (r336415)
@@ -86,6 +86,7 @@ int   incignore;
  * literally).
  */
 int    filebased = 0;
+int    versreq;
 
 static void configfile(void);
 static void get_srcdir(void);
@@ -743,7 +744,7 @@ kernconfdump(const char *file)
 }
 
 static void 
-badversion(int versreq)
+badversion()
 {
        fprintf(stderr, "ERROR: version of config(8) does not match kernel!\n");
        fprintf(stderr, "config version = %d, ", CONFIGVERS);
@@ -763,7 +764,6 @@ checkversion(void)
 {
        FILE *ifp;
        char line[BUFSIZ];
-       int versreq;
 
        ifp = open_makefile_template();
        while (fgets(line, BUFSIZ, ifp) != 0) {
@@ -775,7 +775,7 @@ checkversion(void)
                if (MAJOR_VERS(versreq) == MAJOR_VERS(CONFIGVERS) &&
                    versreq <= CONFIGVERS)
                        continue;
-               badversion(versreq);
+               badversion();
        }
        fclose(ifp);
 }

Modified: head/usr.sbin/config/mkmakefile.c
==============================================================================
--- head/usr.sbin/config/mkmakefile.c   Tue Jul 17 14:11:30 2018        
(r336414)
+++ head/usr.sbin/config/mkmakefile.c   Tue Jul 17 14:14:53 2018        
(r336415)
@@ -307,6 +307,13 @@ makehints(void)
        fprintf(ofp, "#include <sys/types.h>\n");
        fprintf(ofp, "#include <sys/systm.h>\n");
        fprintf(ofp, "\n");
+       /*
+        * Write out hintmode for older kernels. Remove when config(8) major
+        * version rolls over.
+        */
+       if (versreq <= CONFIGVERS_ENVMODE_REQ)
+               fprintf(ofp, "int hintmode = %d;\n",
+                       STAILQ_EMPTY(&hints) ? 1 : 0);
        fprintf(ofp, "char static_hints[] = {\n");
        nvl = nvlist_create(0);
        STAILQ_FOREACH(hint, &hints, hint_next) {
@@ -341,6 +348,13 @@ makeenv(void)
        fprintf(ofp, "#include <sys/types.h>\n");
        fprintf(ofp, "#include <sys/systm.h>\n");
        fprintf(ofp, "\n");
+       /*
+        * Write out envmode for older kernels. Remove when config(8) major
+        * version rolls over.
+        */
+       if (versreq <= CONFIGVERS_ENVMODE_REQ)
+               fprintf(ofp, "int envmode = %d;\n",
+                       STAILQ_EMPTY(&envvars) ? 1 : 0);
        fprintf(ofp, "char static_env[] = {\n");
        nvl = nvlist_create(0);
        STAILQ_FOREACH(envvar, &envvars, envvar_next) {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to