Split -Wstyle into -Wstyle and the even lower -Wbase, and add
authorschwarze <schwarze@openbsd.org>
Sat, 24 Jun 2017 14:38:27 +0000 (14:38 +0000)
committerschwarze <schwarze@openbsd.org>
Sat, 24 Jun 2017 14:38:27 +0000 (14:38 +0000)
-Wopenbsd and -Wnetbsd to check conventions for the base system of
a specific operating system.  Mark operating system specific messages
with "(OpenBSD)" at the end.

Please use just "-Tlint" to check base system manuals (defaulting
to -Wall, which is now -Wbase), but prefer "-Tlint -Wstyle" for the
manuals of portable software projects you maintain that are not
part of OpenBSD base, to avoid bogus recommendations about base
system conventions that do not apply.

Issue originally reported by semarie@, solution using
an idea from tedu@, discussed with jmc@ and jca@.

16 files changed:
usr.bin/mandoc/att.c
usr.bin/mandoc/cgi.c
usr.bin/mandoc/main.c
usr.bin/mandoc/man_html.c
usr.bin/mandoc/man_validate.c
usr.bin/mandoc/mandoc.1
usr.bin/mandoc/mandoc.h
usr.bin/mandoc/mandocdb.c
usr.bin/mandoc/mdoc_html.c
usr.bin/mandoc/mdoc_validate.c
usr.bin/mandoc/read.c
usr.bin/mandoc/roff.c
usr.bin/mandoc/roff.h
usr.bin/mandoc/roff_html.c
usr.bin/mandoc/roff_term.c
usr.bin/mandoc/st.c

index c1e7a04..6d25bd6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: att.c,v 1.11 2015/10/06 18:30:43 schwarze Exp $ */
+/*     $OpenBSD: att.c,v 1.12 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -17,6 +17,7 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "mandoc.h"
 #include "roff.h"
 #include "mdoc.h"
 #include "libmdoc.h"
index 6f145b8..d6cfc87 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cgi.c,v 1.93 2017/06/20 17:24:09 schwarze Exp $ */
+/*     $OpenBSD: cgi.c,v 1.94 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>
@@ -828,7 +828,7 @@ resp_format(const struct req *req, const char *file)
 
        mchars_alloc();
        mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1,
-           MANDOCLEVEL_BADARG, NULL, req->q.manpath);
+           MANDOCERR_MAX, NULL, MANDOC_OS_OTHER, req->q.manpath);
        mparse_readfd(mp, fd, file);
        close(fd);
 
index bd843e6..335ce88 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.195 2017/06/03 12:16:19 schwarze Exp $ */
+/*     $OpenBSD: main.c,v 1.196 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -68,11 +68,13 @@ enum        outt {
 
 struct curparse {
        struct mparse    *mp;
-       enum mandoclevel  wlevel;       /* ignore messages below this */
+       struct manoutput *outopts;      /* output options */
+       void             *outdata;      /* data for output */
+       char             *os_s;         /* operating system for display */
        int               wstop;        /* stop after a file with a warning */
+       enum mandocerr    mmin;         /* ignore messages below this */
+       enum mandoc_os    os_e;         /* check base system conventions */
        enum outt         outtype;      /* which output to use */
-       void             *outdata;      /* data for output */
-       struct manoutput *outopts;      /* output options */
 };
 
 
@@ -113,7 +115,7 @@ main(int argc, char *argv[])
        struct manpage  *res, *resp;
        const char      *progname, *sec, *thisarg;
        char            *conf_file, *defpaths, *auxpaths;
-       char            *defos, *oarg;
+       char            *oarg;
        unsigned char   *uc;
        size_t           i, sz;
        int              prio, best_prio;
@@ -159,10 +161,9 @@ main(int argc, char *argv[])
 
        memset(&curp, 0, sizeof(struct curparse));
        curp.outtype = OUTT_LOCALE;
-       curp.wlevel  = MANDOCLEVEL_BADARG;
+       curp.mmin = MANDOCERR_MAX;
        curp.outopts = &conf.output;
        options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
-       defos = NULL;
 
        use_pager = 1;
        tag_files = NULL;
@@ -198,11 +199,11 @@ main(int argc, char *argv[])
                                warnx("-I %s: Bad argument", optarg);
                                return (int)MANDOCLEVEL_BADARG;
                        }
-                       if (defos) {
+                       if (curp.os_s != NULL) {
                                warnx("-I %s: Duplicate argument", optarg);
                                return (int)MANDOCLEVEL_BADARG;
                        }
-                       defos = mandoc_strdup(optarg + 3);
+                       curp.os_s = mandoc_strdup(optarg + 3);
                        break;
                case 'K':
                        if ( ! koptions(&options, optarg))
@@ -416,7 +417,8 @@ main(int argc, char *argv[])
                moptions(&options, auxpaths);
 
        mchars_alloc();
-       curp.mp = mparse_alloc(options, curp.wlevel, mmsg, defos);
+       curp.mp = mparse_alloc(options, curp.mmin, mmsg,
+           curp.os_e, curp.os_s);
 
        /*
         * Conditionally start up the lookaside buffer before parsing.
@@ -494,7 +496,7 @@ out:
                mansearch_free(res, sz);
        }
 
-       free(defos);
+       free(curp.os_s);
 
        /*
         * When using a pager, finish writing both temporary files,
@@ -907,7 +909,7 @@ toptions(struct curparse *curp, char *arg)
                curp->outtype = OUTT_ASCII;
        else if (0 == strcmp(arg, "lint")) {
                curp->outtype = OUTT_LINT;
-               curp->wlevel  = MANDOCLEVEL_STYLE;
+               curp->mmin = MANDOCERR_BASE;
        } else if (0 == strcmp(arg, "tree"))
                curp->outtype = OUTT_TREE;
        else if (0 == strcmp(arg, "man"))
@@ -936,16 +938,19 @@ static int
 woptions(struct curparse *curp, char *arg)
 {
        char            *v, *o;
-       const char      *toks[8];
+       const char      *toks[11];
 
        toks[0] = "stop";
        toks[1] = "all";
-       toks[2] = "style";
-       toks[3] = "warning";
-       toks[4] = "error";
-       toks[5] = "unsupp";
-       toks[6] = "fatal";
-       toks[7] = NULL;
+       toks[2] = "base";
+       toks[3] = "style";
+       toks[4] = "warning";
+       toks[5] = "error";
+       toks[6] = "unsupp";
+       toks[7] = "fatal";
+       toks[8] = "openbsd";
+       toks[9] = "netbsd";
+       toks[10] = NULL;
 
        while (*arg) {
                o = arg;
@@ -955,19 +960,30 @@ woptions(struct curparse *curp, char *arg)
                        break;
                case 1:
                case 2:
-                       curp->wlevel = MANDOCLEVEL_STYLE;
+                       curp->mmin = MANDOCERR_BASE;
                        break;
                case 3:
-                       curp->wlevel = MANDOCLEVEL_WARNING;
+                       curp->mmin = MANDOCERR_STYLE;
                        break;
                case 4:
-                       curp->wlevel = MANDOCLEVEL_ERROR;
+                       curp->mmin = MANDOCERR_WARNING;
                        break;
                case 5:
-                       curp->wlevel = MANDOCLEVEL_UNSUPP;
+                       curp->mmin = MANDOCERR_ERROR;
                        break;
                case 6:
-                       curp->wlevel = MANDOCLEVEL_BADARG;
+                       curp->mmin = MANDOCERR_UNSUPP;
+                       break;
+               case 7:
+                       curp->mmin = MANDOCERR_MAX;
+                       break;
+               case 8:
+                       curp->mmin = MANDOCERR_BASE;
+                       curp->os_e = MANDOC_OS_OPENBSD;
+                       break;
+               case 9:
+                       curp->mmin = MANDOCERR_BASE;
+                       curp->os_e = MANDOC_OS_NETBSD;
                        break;
                default:
                        warnx("-W %s: Bad argument", o);
@@ -989,9 +1005,10 @@ mmsg(enum mandocerr t, enum mandoclevel lvl,
        if (line)
                fprintf(stderr, "%d:%d:", line, col + 1);
 
-       fprintf(stderr, " %s", mparse_strlevel(lvl));
+       fprintf(stderr, " %s",
+           t < MANDOCERR_STYLE ? "BASE" : mparse_strlevel(lvl));
 
-       if (NULL != (mparse_msg = mparse_strerror(t)))
+       if ((mparse_msg = mparse_strerror(t)) != NULL)
                fprintf(stderr, ": %s", mparse_msg);
 
        if (msg)
index f2b98b8..5037efa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_html.c,v 1.96 2017/06/08 12:54:40 schwarze Exp $ */
+/*     $OpenBSD: man_html.c,v 1.97 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -24,6 +24,7 @@
 #include <string.h>
 
 #include "mandoc_aux.h"
+#include "mandoc.h"
 #include "roff.h"
 #include "man.h"
 #include "out.h"
index 3532ceb..f527723 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_validate.c,v 1.101 2017/06/17 22:40:27 schwarze Exp $ */
+/*     $OpenBSD: man_validate.c,v 1.102 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -171,7 +171,9 @@ check_root(CHKARGS)
 
        if (man->meta.os_e &&
            (man->meta.rcsids & (1 << man->meta.os_e)) == 0)
-               mandoc_msg(MANDOCERR_RCS_MISSING, man->parse, 0, 0, NULL);
+               mandoc_msg(MANDOCERR_RCS_MISSING, man->parse, 0, 0,
+                   man->meta.os_e == MANDOC_OS_OPENBSD ?
+                   "(OpenBSD)" : "(NetBSD)");
 }
 
 static void
@@ -338,12 +340,14 @@ post_TH(CHKARGS)
 
        if (n && (n = n->next))
                man->meta.os = mandoc_strdup(n->string);
-       else if (man->defos != NULL)
-               man->meta.os = mandoc_strdup(man->defos);
-       man->meta.os_e = man->meta.os == NULL ? MDOC_OS_OTHER :
-           strstr(man->meta.os, "OpenBSD") != NULL ? MDOC_OS_OPENBSD :
-           strstr(man->meta.os, "NetBSD") != NULL ? MDOC_OS_NETBSD :
-           MDOC_OS_OTHER;
+       else if (man->os_s != NULL)
+               man->meta.os = mandoc_strdup(man->os_s);
+       if (man->meta.os_e == MANDOC_OS_OTHER && man->meta.os != NULL) {
+               if (strstr(man->meta.os, "OpenBSD") != NULL)
+                       man->meta.os_e = MANDOC_OS_OPENBSD;
+               else if (strstr(man->meta.os, "NetBSD") != NULL)
+                       man->meta.os_e = MANDOC_OS_NETBSD;
+       }
 
        /* TITLE MSEC DATE OS ->VOL<- */
        /* If missing, use the default VOL name for MSEC. */
index 6210f1c..c53c138 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: mandoc.1,v 1.125 2017/06/17 23:06:43 schwarze Exp $
+.\"    $OpenBSD: mandoc.1,v 1.126 2017/06/24 14:38:27 schwarze Exp $
 .\"
 .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: June 17 2017 $
+.Dd $Mdocdate: June 24 2017 $
 .Dt MANDOC 1
 .Os
 .Sh NAME
@@ -75,11 +75,6 @@ and for the
 .Xr man 7
 .Ic \&TH
 macro.
-This can also be used to perform style checks according to the
-conventions of one operating system while running on a different
-operating system; see
-.Sx Style messages
-for details.
 .It Fl K Ar encoding
 Specify the input encoding.
 The supported
@@ -151,14 +146,33 @@ to be reported on the standard error output and to affect the exit status.
 The
 .Ar level
 can be
+.Cm base ,
 .Cm style ,
 .Cm warning ,
 .Cm error ,
 or
-.Cm unsupp ;
+.Cm unsupp .
+The
+.Cm base
+level automatically derives the operating system from the contents of the
+.Ic \&Os
+macro, from the
+.Fl Ios
+command line option, or from the
+.Xr uname 3
+return value.
+The levels
+.Cm openbsd
+and
+.Cm netbsd
+are variants of
+.Cm base
+that bypass autodetection and request validation of base system
+conventions for a particular operating system.
+The level
 .Cm all
 is an alias for
-.Cm style .
+.Cm base .
 By default,
 .Nm
 is silent.
@@ -224,7 +238,7 @@ See
 .It Fl T Cm lint
 Parse only: produce no output.
 Implies
-.Fl W Cm style .
+.Fl W Cm all .
 .It Fl T Cm locale
 Encode output using the current locale.
 This is the default.
@@ -596,19 +610,23 @@ option:
 .Pp
 .Bl -tag -width Ds -compact
 .It 0
-No style suggestions, warnings or errors occurred, or those that
-did were ignored because they were lower than the requested
+No base system convention violations, style suggestions, warnings,
+or errors occurred, or those that did were ignored because they
+were lower than the requested
 .Ar level .
 .It 1
-At least one style suggestion occurred, but no warning or error, and
+At least one base system convention violation or style suggestion
+occurred, but no warning or error, and
+.Fl W Cm base
+or
 .Fl W Cm style
 was specified.
 .It 2
 At least one warning occurred, but no error, and
 .Fl W Cm warning
-or
-.Fl W Cm style
-was specified.
+or a lower
+.Ar level
+was requested.
 .It 3
 At least one parsing error occurred,
 but no unsupported feature was encountered, and
@@ -636,7 +654,7 @@ to exit at once, possibly in the middle of parsing or formatting a file.
 Note that selecting
 .Fl T Cm lint
 output mode implies
-.Fl W Cm style .
+.Fl W Cm all .
 .Sh EXAMPLES
 To page manuals to the terminal:
 .Pp
@@ -669,12 +687,19 @@ parser:
 Messages displayed by
 .Nm
 follow this format:
-.Pp
-.D1 Nm Ns : Ar file : Ns Ar line : Ns Ar column : level : message : macro args
+.Bd -ragged -offset indent
+.Nm Ns :
+.Ar file : Ns Ar line : Ns Ar column : level : message : macro args
+.Pq Ar os
+.Ed
 .Pp
 Line and column numbers start at 1.
 Both are omitted for messages referring to an input file as a whole.
 Macro names and arguments are omitted where meaningless.
+The
+.Ar os
+operating system specifier is omitted for messages that are relevant
+for all operating systems.
 Fatal messages about invalid command line arguments
 or operating system errors, for example when memory is exhausted,
 may also omit the
@@ -732,9 +757,15 @@ so it may occasionally issue bogus suggestions.
 Please use your good judgement to decide whether any particular
 .Cm style
 suggestion really justifies a change to the input file.
+.It Cm base
+A convertion used in the base system of a specific operating system
+is not adhered to.
+These are not markup mistakes, and neither the quality of formatting
+nor portability are in danger.
 .El
 .Pp
 Messages of the
+.Cm base ,
 .Cm style ,
 .Cm warning ,
 .Cm error ,
@@ -746,9 +777,15 @@ are hidden unless their level, or a lower level, is requested using a
 option or
 .Fl T Cm lint
 output mode.
-.Ss Style messages
-As indicated below, some style checks are only performed if a
-specific operating system name occurs in the arguments of the
+.Pp
+As indicated below, all
+.Cm base
+and some
+.Cm style
+checks are only performed if a specific operating system name occurs
+in the arguments of the
+.Fl W
+command line option, of the
 .Ic \&Os
 macro, of the
 .Fl Ios
@@ -756,6 +793,7 @@ command line option, or, if neither are present, in the return value
 of the
 .Xr uname 3
 function.
+.Ss Conventions for base system manuals
 .Bl -ohang
 .It Sy "Mdocdate found"
 .Pq mdoc , Nx
@@ -778,6 +816,17 @@ macro does not use CVS
 keyword substitution, but using it is conventionally expected in the
 .Ox
 base system.
+.It Sy "RCS id missing"
+.Pq Ox , Nx
+The manual page lacks the comment line with the RCS identifier
+generated by CVS
+.Ic OpenBSD
+or
+.Ic NetBSD
+keyword substitution as conventionally used in these operating systems.
+.El
+.Ss Style suggestions
+.Bl -ohang
 .It Sy "legacy man(7) date format"
 .Pq mdoc
 The
@@ -791,14 +840,6 @@ Consider using the conventional
 date format
 .Dq "Month dd, yyyy"
 instead.
-.It Sy "RCS id missing"
-.Pq Ox , Nx
-The manual page lacks the comment line with the RCS identifier
-generated by CVS
-.Ic OpenBSD
-or
-.Ic NetBSD
-keyword substitution as conventionally used in these operating systems.
 .It Sy "duplicate RCS id"
 A single manual page contains two copies of the RCS identifier for
 the same operating system.
index 55e1643..f735909 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandoc.h,v 1.174 2017/06/17 23:06:43 schwarze Exp $ */
+/*     $OpenBSD: mandoc.h,v 1.175 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -44,12 +44,15 @@ enum        mandoclevel {
 enum   mandocerr {
        MANDOCERR_OK,
 
-       MANDOCERR_STYLE, /* ===== start of style suggestions ===== */
+       MANDOCERR_BASE, /* ===== start of base system conventions ===== */
 
        MANDOCERR_MDOCDATE, /* Mdocdate found: Dd ... */
        MANDOCERR_MDOCDATE_MISSING, /* Mdocdate missing: Dd ... */
-       MANDOCERR_DATE_LEGACY, /* legacy man(7) date format: Dd ... */
        MANDOCERR_RCS_MISSING, /* RCS id missing */
+
+       MANDOCERR_STYLE, /* ===== start of style suggestions ===== */
+
+       MANDOCERR_DATE_LEGACY, /* legacy man(7) date format: Dd ... */
        MANDOCERR_RCS_REP, /* duplicate RCS id: ... */
        MANDOCERR_MACRO_USELESS, /* useless macro: macro */
        MANDOCERR_BX, /* consider using OS macro: macro */
@@ -413,6 +416,12 @@ struct     eqn {
 #define        MPARSE_UTF8     16 /* accept UTF-8 input */
 #define        MPARSE_LATIN1   32 /* accept ISO-LATIN-1 input */
 
+enum   mandoc_os {
+       MANDOC_OS_OTHER = 0,
+       MANDOC_OS_NETBSD,
+       MANDOC_OS_OPENBSD
+};
+
 enum   mandoc_esc {
        ESCAPE_ERROR = 0, /* bail! unparsable escape */
        ESCAPE_IGNORE, /* escape to be ignored */
@@ -448,7 +457,8 @@ const char   *mchars_uc2str(int);
 int              mchars_num2uc(const char *, size_t);
 int              mchars_spec2cp(const char *, size_t);
 const char      *mchars_spec2str(const char *, size_t, size_t *);
-struct mparse   *mparse_alloc(int, enum mandoclevel, mandocmsg, const char *);
+struct mparse   *mparse_alloc(int, enum mandocerr, mandocmsg,
+                       enum mandoc_os, const char *);
 void             mparse_free(struct mparse *);
 void             mparse_keep(struct mparse *);
 int              mparse_open(struct mparse *, const char *);
index 8e44629..84575cb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandocdb.c,v 1.199 2017/05/17 22:26:52 schwarze Exp $ */
+/*     $OpenBSD: mandocdb.c,v 1.200 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -394,7 +394,8 @@ mandocdb(int argc, char *argv[])
 
        exitcode = (int)MANDOCLEVEL_OK;
        mchars_alloc();
-       mp = mparse_alloc(mparse_options, MANDOCLEVEL_BADARG, NULL, NULL);
+       mp = mparse_alloc(mparse_options, MANDOCLEVEL_BADARG, NULL,
+           MANDOC_OS_OTHER, NULL);
        mandoc_ohash_init(&mpages, 6, offsetof(struct mpage, inodev));
        mandoc_ohash_init(&mlinks, 6, offsetof(struct mlink, file));
 
index ec6d155..5a5ae48 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mdoc_html.c,v 1.165 2017/06/19 12:53:50 schwarze Exp $ */
+/*     $OpenBSD: mdoc_html.c,v 1.166 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -25,6 +25,7 @@
 #include <unistd.h>
 
 #include "mandoc_aux.h"
+#include "mandoc.h"
 #include "roff.h"
 #include "mdoc.h"
 #include "out.h"
index 1f56a98..a4ef3b5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mdoc_validate.c,v 1.254 2017/06/17 22:40:27 schwarze Exp $ */
+/*     $OpenBSD: mdoc_validate.c,v 1.255 2017/06/24 14:38:27 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -1694,7 +1694,7 @@ post_bl(POST_ARGS)
                nchild = nnext;
        }
 
-       if (mdoc->meta.os_e != MDOC_OS_NETBSD)
+       if (mdoc->meta.os_e != MANDOC_OS_NETBSD)
                return;
 
        prev_Er = NULL;
@@ -1713,11 +1713,12 @@ post_bl(POST_ARGS)
                        if (order > 0)
                                mandoc_vmsg(MANDOCERR_ER_ORDER,
                                    mdoc->parse, nnext->line, nnext->pos,
-                                   "Er %s %s", prev_Er, nnext->string);
+                                   "Er %s %s (NetBSD)",
+                                   prev_Er, nnext->string);
                        else if (order == 0)
                                mandoc_vmsg(MANDOCERR_ER_REP,
                                    mdoc->parse, nnext->line, nnext->pos,
-                                   "Er %s", prev_Er);
+                                   "Er %s (NetBSD)", prev_Er);
                }
                prev_Er = nnext->string;
        }
@@ -1793,8 +1794,9 @@ post_root(POST_ARGS)
                mdoc->meta.os = mandoc_strdup("");
        } else if (mdoc->meta.os_e &&
            (mdoc->meta.rcsids & (1 << mdoc->meta.os_e)) == 0)
-               mandoc_msg(MANDOCERR_RCS_MISSING,
-                   mdoc->parse, 0, 0, NULL);
+               mandoc_msg(MANDOCERR_RCS_MISSING, mdoc->parse, 0, 0,
+                   mdoc->meta.os_e == MANDOC_OS_OPENBSD ?
+                   "(OpenBSD)" : "(NetBSD)");
 
        /* Check that we begin with a proper `Sh'. */
 
@@ -2533,8 +2535,8 @@ post_os(POST_ARGS)
        if (mdoc->meta.os)
                goto out;
 
-       if (mdoc->defos) {
-               mdoc->meta.os = mandoc_strdup(mdoc->defos);
+       if (mdoc->os_s != NULL) {
+               mdoc->meta.os = mandoc_strdup(mdoc->os_s);
                goto out;
        }
 
@@ -2553,9 +2555,13 @@ post_os(POST_ARGS)
        mdoc->meta.os = mandoc_strdup(defbuf);
 #endif /*!OSNAME*/
 
-out:   mdoc->meta.os_e = strstr(mdoc->meta.os, "OpenBSD") != NULL ?
-           MDOC_OS_OPENBSD : strstr(mdoc->meta.os, "NetBSD") != NULL ?
-           MDOC_OS_NETBSD : MDOC_OS_OTHER;
+out:
+       if (mdoc->meta.os_e == MANDOC_OS_OTHER) {
+               if (strstr(mdoc->meta.os, "OpenBSD") != NULL)
+                       mdoc->meta.os_e = MANDOC_OS_OPENBSD;
+               else if (strstr(mdoc->meta.os, "NetBSD") != NULL)
+                       mdoc->meta.os_e = MANDOC_OS_NETBSD;
+       }
 
        /*
         * This is the earliest point where we can check
@@ -2569,15 +2575,15 @@ out:    mdoc->meta.os_e = strstr(mdoc->meta.os, "OpenBSD") != NULL ?
        if ((n = n->child) == NULL)
                return;
        if (strncmp(n->string, "$" "Mdocdate", 9)) {
-               if (mdoc->meta.os_e == MDOC_OS_OPENBSD)
+               if (mdoc->meta.os_e == MANDOC_OS_OPENBSD)
                        mandoc_vmsg(MANDOCERR_MDOCDATE_MISSING,
                            mdoc->parse, n->line, n->pos,
-                           "Dd %s", n->string);
+                           "Dd %s (OpenBSD)", n->string);
        } else {
-               if (mdoc->meta.os_e == MDOC_OS_NETBSD)
+               if (mdoc->meta.os_e == MANDOC_OS_NETBSD)
                        mandoc_vmsg(MANDOCERR_MDOCDATE,
                            mdoc->parse, n->line, n->pos,
-                           "Dd %s", n->string);
+                           "Dd %s (NetBSD)", n->string);
        }
 }
 
index 3994cac..16fabd1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: read.c,v 1.150 2017/06/17 23:06:43 schwarze Exp $ */
+/*     $OpenBSD: read.c,v 1.151 2017/06/24 14:38:28 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -49,10 +49,10 @@ struct      mparse {
        const char       *file; /* filename of current input file */
        struct buf       *primary; /* buffer currently being parsed */
        struct buf       *secondary; /* preprocessed copy of input */
-       const char       *defos; /* default operating system */
+       const char       *os_s; /* default operating system */
        mandocmsg         mmsg; /* warning/error message handler */
        enum mandoclevel  file_status; /* status of current parse */
-       enum mandoclevel  wlevel; /* ignore messages below this */
+       enum mandocerr    mmin; /* ignore messages below this */
        int               options; /* parser options */
        int               gzip; /* current input file is gzipped */
        int               filenc; /* encoding of the current file */
@@ -82,12 +82,15 @@ static      const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {
 static const char * const      mandocerrs[MANDOCERR_MAX] = {
        "ok",
 
-       "generic style suggestion",
+       "base system convention",
 
        "Mdocdate found",
        "Mdocdate missing",
-       "legacy man(7) date format",
        "RCS id missing",
+
+       "generic style suggestion",
+
+       "legacy man(7) date format",
        "duplicate RCS id",
        "useless macro",
        "consider using OS macro",
@@ -738,20 +741,20 @@ mparse_open(struct mparse *curp, const char *file)
 }
 
 struct mparse *
-mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg,
-    const char *defos)
+mparse_alloc(int options, enum mandocerr mmin, mandocmsg mmsg,
+    enum mandoc_os os_e, const char *os_s)
 {
        struct mparse   *curp;
 
        curp = mandoc_calloc(1, sizeof(struct mparse));
 
        curp->options = options;
-       curp->wlevel = wlevel;
+       curp->mmin = mmin;
        curp->mmsg = mmsg;
-       curp->defos = defos;
+       curp->os_s = os_s;
 
        curp->roff = roff_alloc(curp, options);
-       curp->man = roff_man_alloc( curp->roff, curp, curp->defos,
+       curp->man = roff_man_alloc(curp->roff, curp, curp->os_s,
                curp->options & MPARSE_QUICK ? 1 : 0);
        if (curp->options & MPARSE_MDOC) {
                curp->man->macroset = MACROSET_MDOC;
@@ -763,6 +766,7 @@ mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg,
                        curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
        }
        curp->man->first->tok = TOKEN_NONE;
+       curp->man->meta.os_e = os_e;
        return curp;
 }
 
@@ -838,13 +842,13 @@ mandoc_msg(enum mandocerr er, struct mparse *m,
 {
        enum mandoclevel level;
 
+       if (er < m->mmin && er != MANDOCERR_FILE)
+               return;
+
        level = MANDOCLEVEL_UNSUPP;
        while (er < mandoclimits[level])
                level--;
 
-       if (level < m->wlevel && er != MANDOCERR_FILE)
-               return;
-
        if (m->mmsg)
                (*m->mmsg)(er, level, m->file, ln, col, msg);
 
index 87eb7af..414c43a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff.c,v 1.187 2017/06/18 17:35:40 schwarze Exp $ */
+/*     $OpenBSD: roff.c,v 1.188 2017/06/24 14:38:28 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -817,14 +817,14 @@ roff_man_free(struct roff_man *man)
 
 struct roff_man *
 roff_man_alloc(struct roff *roff, struct mparse *parse,
-       const char *defos, int quick)
+       const char *os_s, int quick)
 {
        struct roff_man *man;
 
        man = mandoc_calloc(1, sizeof(*man));
        man->parse = parse;
        man->roff = roff;
-       man->defos = defos;
+       man->os_s = os_s;
        man->quick = quick;
        roff_man_alloc1(man);
        roff->man = man;
@@ -1136,7 +1136,7 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
        size_t           maxl;  /* expected length of the escape name */
        size_t           naml;  /* actual length of the escape name */
        enum mandoc_esc  esc;   /* type of the escape sequence */
-       enum mdoc_os     os_e;  /* kind of RCS id seen */
+       enum mandoc_os   os_e;  /* kind of RCS id seen */
        int              inaml; /* length returned from mandoc_escape() */
        int              expand_count;  /* to avoid infinite loops */
        int              npos;  /* position in numeric expression */
@@ -1159,10 +1159,10 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
                /* Comment found, look for RCS id. */
 
                if ((cp = strstr(stesc, "$" "OpenBSD")) != NULL) {
-                       os_e = MDOC_OS_OPENBSD;
+                       os_e = MANDOC_OS_OPENBSD;
                        cp += 8;
                } else if ((cp = strstr(stesc, "$" "NetBSD")) != NULL) {
-                       os_e = MDOC_OS_NETBSD;
+                       os_e = MANDOC_OS_NETBSD;
                        cp += 7;
                }
                if (cp != NULL &&
index c684646..d976cce 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff.h,v 1.37 2017/06/17 22:40:27 schwarze Exp $      */
+/*     $OpenBSD: roff.h,v 1.38 2017/06/24 14:38:28 schwarze Exp $      */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -26,12 +26,6 @@ enum roff_macroset {
        MACROSET_MAN
 };
 
-enum   mdoc_os {
-       MDOC_OS_OTHER = 0,
-       MDOC_OS_NETBSD,
-       MDOC_OS_OPENBSD
-};
-
 enum   roff_sec {
        SEC_NONE = 0,
        SEC_NAME,
@@ -534,8 +528,8 @@ struct      roff_meta {
        char             *name;    /* Leading manual name. */
        char             *date;    /* Normalized date. */
        int               hasbody; /* Document is not empty. */
-       int               rcsids;  /* Bits indexed by enum mdoc_os. */
-       enum mdoc_os      os_e;    /* Operating system. */
+       int               rcsids;  /* Bits indexed by enum mandoc_os. */
+       enum mandoc_os    os_e;    /* Operating system. */
 };
 
 struct roff_man {
@@ -544,7 +538,7 @@ struct      roff_man {
        struct roff      *roff;    /* Roff parser state data. */
        struct ohash     *mdocmac; /* Mdoc macro lookup table. */
        struct ohash     *manmac;  /* Man macro lookup table. */
-       const char       *defos;   /* Default operating system. */
+       const char       *os_s;    /* Default operating system. */
        struct roff_node *first;   /* The first node parsed. */
        struct roff_node *last;    /* The last node parsed. */
        struct roff_node *last_es; /* The most recent Es node. */
index 9674ba9..9610442 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff_html.c,v 1.10 2017/06/14 22:50:37 schwarze Exp $ */
+/*     $OpenBSD: roff_html.c,v 1.11 2017/06/24 14:38:28 schwarze Exp $ */
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -20,6 +20,7 @@
 #include <assert.h>
 #include <stddef.h>
 
+#include "mandoc.h"
 #include "roff.h"
 #include "out.h"
 #include "html.h"
index a3d9418..62bef80 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff_term.c,v 1.13 2017/06/14 22:50:37 schwarze Exp $ */
+/*     $OpenBSD: roff_term.c,v 1.14 2017/06/24 14:38:28 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -19,6 +19,7 @@
 #include <assert.h>
 #include <stddef.h>
 
+#include "mandoc.h"
 #include "roff.h"
 #include "out.h"
 #include "term.h"
index 5ca5397..72fe8b3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: st.c,v 1.10 2015/10/06 18:30:44 schwarze Exp $ */
+/*     $OpenBSD: st.c,v 1.11 2017/06/24 14:38:28 schwarze Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -18,6 +18,7 @@
 
 #include <string.h>
 
+#include "mandoc.h"
 #include "roff.h"
 #include "mdoc.h"
 #include "libmdoc.h"