* mandoc(1) warning in tzfile(5) regarding // @ 2023-03-07 23:54 Alejandro Colomar 2023-03-08 5:19 ` Paul Eggert 0 siblings, 1 reply; 6+ messages in thread From: Alejandro Colomar @ 2023-03-07 23:54 UTC (permalink / raw) To: G. Branden Robinson, Paul Eggert; +Cc: linux-man, groff [-- Attachment #1.1: Type: text/plain, Size: 1603 bytes --] Hi Paul, Branden, I don't remember if we covered this bit in the discussions we had a few months ago. I'm seeing a couple of warnings from mandoc(1) in tzfile(5): $ make lint-man-mandoc V=1 LINT (mandoc) tmp/lint/man5/tzfile.5.lint-man.mandoc.touch ! (mandoc -man -Tlint man5/tzfile.5 2>&1 \ | grep -v 'STYLE: lower case character in document title:' \ | grep -v 'UNSUPP: ignoring macro in table:' \ | grep -v 'WARNING: cannot parse date, using it verbatim: TH (date)' \ | grep -v 'WARNING: empty block: UR' \ ||:; \ ) \ | grep '.' >&2 mandoc: man5/tzfile.5:15:19: WARNING: undefined escape, printing literally: \\ mandoc: man5/tzfile.5:15:10: WARNING: undefined escape, printing literally: \\ make: *** [lib/lint-man.mk:88: tmp/lint/man5/tzfile.5.lint-man.mandoc.touch] Error 1 The source is: $ head man5/tzfile.5 -n20 .\" %%%LICENSE_START(PUBLIC_DOMAIN) .\" This file is in the public domain, so clarified as of .\" 1996-06-05 by Arthur David Olson <arthur_david_olson@nih.gov>. .\" %%%LICENSE_END .\" .TH tzfile 5 2022-09-09 Linux "Linux Programmer's Manual" .SH NAME tzfile \- timezone information .SH DESCRIPTION .ie '\[lq]'' .ds lq \&"\" .el .ds lq \[lq]\" .ie '\[rq]'' .ds rq \&"\" .el .ds rq \[rq]\" .de q \\$3\*(lq\\$1\*(rq\\$2 .. .ie \n(.g .ds - \f(CW-\fP .el ds - \- The timezone information files used by .BR tzset (3) Is this a limitation in mandoc(1)? Should we change the source code? Cheers, Alex -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: mandoc(1) warning in tzfile(5) regarding // 2023-03-07 23:54 mandoc(1) warning in tzfile(5) regarding // Alejandro Colomar @ 2023-03-08 5:19 ` Paul Eggert 2023-03-08 19:44 ` Alejandro Colomar 0 siblings, 1 reply; 6+ messages in thread From: Paul Eggert @ 2023-03-08 5:19 UTC (permalink / raw) To: Alejandro Colomar; +Cc: linux-man, groff, G. Branden Robinson [-- Attachment #1: Type: text/plain, Size: 714 bytes --] On 2023-03-07 15:54, Alejandro Colomar wrote: > mandoc: man5/tzfile.5:15:19: WARNING: undefined escape, printing literally: \\ > mandoc: man5/tzfile.5:15:10: WARNING: undefined escape, printing literally: \\ My guess is that this is fallout from last month's changes to use \[lq] instead of \(lq and so forth. I suggest reverting all those changes to tzfile.5, since the upstream tzfile.5 continues to use \(lq etc. for compatibility with traditional troff, which is still a thing upstream. Come to think of it, we should resync tzfile.5 and tzselect.8 from upstream for other reasons. Proposed patch to manpages attached. If this generates more mandoc warnings, I suppose we can adjust the calls to mandoc. [-- Attachment #2: 0001-tzfile.5-tzselect.8-sync-from-tzdb-upstream.patch --] [-- Type: text/x-patch, Size: 19958 bytes --] From f68d7d2ac270f366bc97b6e8dc2b0f2af201c8aa Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Tue, 7 Mar 2023 21:11:38 -0800 Subject: [PATCH] tzfile.5, tzselect.8: sync from tzdb upstream This makes tzfile.5 and tzselect.8 a copy of the tzdb develoment version (commit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0), except that man-pages boilerplate surrounds the copyright notice, and the .TH line uses man-pages format. --- man5/tzfile.5 | 194 +++++++++++++++++++++++++++++++++--------------- man8/tzselect.8 | 133 +++++++++++++++++++++++++-------- 2 files changed, 237 insertions(+), 90 deletions(-) diff --git a/man5/tzfile.5 b/man5/tzfile.5 index aa2170479..e94aaaad6 100644 --- a/man5/tzfile.5 +++ b/man5/tzfile.5 @@ -1,21 +1,21 @@ .\" %%%LICENSE_START(PUBLIC_DOMAIN) .\" This file is in the public domain, so clarified as of -.\" 1996-06-05 by Arthur David Olson <arthur_david_olson@nih.gov>. +.\" 1996-06-05 by Arthur David Olson. .\" %%%LICENSE_END .\" -.TH tzfile 5 2022-09-09 Linux "Linux Programmer's Manual" +.TH tzfile 5 2023-03-07 Linux "Linux Programmer's Manual" .SH NAME tzfile \- timezone information .SH DESCRIPTION -.ie '\[lq]'' .ds lq \&"\" -.el .ds lq \[lq]\" -.ie '\[rq]'' .ds rq \&"\" -.el .ds rq \[rq]\" +.ie '\(lq'' .ds lq \&"\" +.el .ds lq \(lq\" +.ie '\(rq'' .ds rq \&"\" +.el .ds rq \(rq\" .de q \\$3\*(lq\\$1\*(rq\\$2 .. -.ie \n(.g .ds - \f(CW-\fP -.el ds - \- +.ie \n(.g .ds - \f(CR-\fP +.el .ds - \- The timezone information files used by .BR tzset (3) are typically found under a directory with a name like @@ -35,35 +35,36 @@ The magic four-byte ASCII sequence identifies the file as a timezone information file. .IP * A byte identifying the version of the file's format -(as of 2017, either an ASCII NUL, or +(as of 2021, either an ASCII NUL, .q "2", +.q "3", or -.q "3" ). +.q "4" ). .IP * Fifteen bytes containing zeros reserved for future use. .IP * Six four-byte integer values, in the following order: .RS .TP -.I tzh_ttisutcnt +.B tzh_ttisutcnt The number of UT/local indicators stored in the file. (UT is Universal Time.) .TP -.I tzh_ttisstdcnt +.B tzh_ttisstdcnt The number of standard/wall indicators stored in the file. .TP -.I tzh_leapcnt +.B tzh_leapcnt The number of leap seconds for which data entries are stored in the file. .TP -.I tzh_timecnt +.B tzh_timecnt The number of transition times for which data entries are stored in the file. .TP -.I tzh_typecnt +.B tzh_typecnt The number of local time types for which data entries are stored in the file (must not be zero). .TP -.I tzh_charcnt +.B tzh_charcnt The number of bytes of time zone abbreviation strings stored in the file. .RE @@ -71,14 +72,14 @@ stored in the file. The above header is followed by the following fields, whose lengths depend on the contents of the header: .IP * 2 -.I tzh_timecnt +.B tzh_timecnt four-byte signed integer values sorted in ascending order. These values are written in network byte order. Each is used as a transition time (as returned by .BR time (2)) at which the rules for computing local time change. .IP * -.I tzh_timecnt +.B tzh_timecnt one-byte unsigned integer values; each one but the last tells which of the different types of local time types described in the file is associated with the time period @@ -88,8 +89,8 @@ and continuing up to but not including the next transition time. POSIX-style TZ string described below.) These values serve as indices into the next field. .IP * -.I tzh_typecnt -.I ttinfo +.B tzh_typecnt +.B ttinfo entries, each defined as follows: .in +.5i .sp @@ -104,55 +105,78 @@ struct ttinfo { .fi .sp Each structure is written as a four-byte signed integer value for -.IR tt_utoff , +.BR tt_utoff , in network byte order, followed by a one-byte boolean for -.I tt_isdst +.B tt_isdst and a one-byte value for -.IR tt_desigidx . +.BR tt_desigidx . In each structure, -.I tt_utoff +.B tt_utoff gives the number of seconds to be added to UT, -.I tt_isdst +.B tt_isdst tells whether -.I tm_isdst +.B tm_isdst should be set by .BR localtime (3) and -.I tt_desigidx +.B tt_desigidx serves as an index into the array of time zone abbreviation bytes that follow the -.I ttinfo -structure(s) in the file. +.B ttinfo +entries in the file; if the designated string is "\*-00", the +.B ttinfo +entry is a placeholder indicating that local time is unspecified. The -.I tt_utoff +.B tt_utoff value is never equal to \-2**31, to let 32-bit clients negate it without overflow. Also, in realistic applications -.I tt_utoff +.B tt_utoff is in the range [\-89999, 93599] (i.e., more than \-25 hours and less than 26 hours); this allows easy support by implementations that already support the POSIX-required range [\-24:59:59, 25:59:59]. .IP * -.I tzh_leapcnt +.B tzh_charcnt +bytes that represent time zone designations, +which are null-terminated byte strings, each indexed by the +.B tt_desigidx +values mentioned above. +The byte strings can overlap if one is a suffix of the other. +The encoding of these strings is not specified. +.IP * +.B tzh_leapcnt pairs of four-byte values, written in network byte order; the first value of each pair gives the nonnegative time (as returned by .BR time (2)) -at which a leap second occurs; -the second is a signed integer specifying the +at which a leap second occurs or at which the leap second table expires; +the second is a signed integer specifying the correction, which is the .I total number of leap seconds to be applied during the time period starting at the given time. -The pairs of values are sorted in ascending order by time. -Each transition is for one leap second, either positive or negative; -transitions always separated by at least 28 days minus 1 second. +The pairs of values are sorted in strictly ascending order by time. +Each pair denotes one leap second, either positive or negative, +except that if the last pair has the same correction as the previous one, +the last pair denotes the leap second table's expiration time. +Each leap second is at the end of a UTC calendar month. +The first leap second has a nonnegative occurrence time, +and is a positive leap second if and only if its correction is positive; +the correction for each leap second after the first differs +from the previous leap second by either 1 for a positive leap second, +or \-1 for a negative leap second. +If the leap second table is empty, the leap-second correction is zero +for all timestamps; +otherwise, for timestamps before the first occurrence time, +the leap-second correction is zero if the first pair's correction is 1 or \-1, +and is unspecified otherwise (which can happen only in files +truncated at the start). .IP * -.I tzh_ttisstdcnt +.B tzh_ttisstdcnt standard/wall indicators, each stored as a one-byte boolean; they tell whether the transition times associated with local time types were specified as standard time or local (wall clock) time. .IP * -.I tzh_ttisutcnt +.B tzh_ttisutcnt UT/local indicators, each stored as a one-byte boolean; they tell whether the transition times associated with local time types were specified as UT or local time. @@ -178,10 +202,10 @@ The .BR localtime (3) function normally uses the first -.I ttinfo +.B ttinfo structure in the file if either -.I tzh_timecnt +.B tzh_timecnt is zero or the time argument is less than the first transition time recorded in the file. .SS Version 2 format @@ -195,11 +219,11 @@ POSIX-TZ-environment-variable-style string for use in handling instants after the last transition time stored in the file or for all instants if the file has no transitions. The POSIX-style TZ string is empty (i.e., nothing between the newlines) -if there is no POSIX representation for such instants. +if there is no POSIX-style representation for such instants. If nonempty, the POSIX-style TZ string must agree with the local time type after the last transition time if present in the eight-byte data; for example, given the string -.q "WET0WEST,M3.5.0,M10.5.0/3" +.q "WET0WEST,M3.5.0/1,M10.5.0" then if a last transition time is in July, the transition's local time type must specify a daylight-saving time abbreviated .q "WEST" @@ -217,33 +241,52 @@ from 0 through 24. Second, DST is in effect all year if it starts January 1 at 00:00 and ends December 31 at 24:00 plus the difference between daylight saving and standard time. +.SS Version 4 format +For version-4-format TZif files, +the first leap second record can have a correction that is neither ++1 nor \-1, to represent truncation of the TZif file at the start. +Also, if two or more leap second transitions are present and the last +entry's correction equals the previous one, the last entry +denotes the expiration of the leap second table instead of a leap second; +timestamps after this expiration are unreliable in that future +releases will likely add leap second entries after the expiration, and +the added leap seconds will change how post-expiration timestamps are treated. .SS Interoperability considerations Future changes to the format may append more data. .PP Version 1 files are considered a legacy format and -should be avoided, as they do not support transition +should not be generated, as they do not support transition times after the year 2038. -Readers that only understand Version 1 must ignore +Readers that understand only Version 1 must ignore any data that extends beyond the calculated end of the version 1 data block. .PP -Writers should generate a version 3 file if +Other than version 1, writers should generate +the lowest version number needed by a file's data. +For example, a writer should generate a version 4 file +only if its leap second table either expires or is truncated at the start. +Likewise, a writer not generating a version 4 file +should generate a version 3 file only if TZ string extensions are necessary to accurately model transition times. -Otherwise, version 2 files should be generated. .PP The sequence of time changes defined by the version 1 -header and data block should be a contiguous subsequence +header and data block should be a contiguous sub-sequence of the time changes defined by the version 2+ header and data block, and by the footer. This guideline helps obsolescent version 1 readers agree with current readers about timestamps within the -contiguous subsequence. It also lets writers not +contiguous sub-sequence. It also lets writers not supporting obsolescent readers use a -.I tzh_timecnt +.B tzh_timecnt of zero in the version 1 data block to save space. .PP +When a TZif file contains a leap second table expiration +time, TZif readers should either refuse to process +post-expiration timestamps, or process them as if the expiration +time did not exist (possibly with an error indication). +.PP Time zone designations should consist of at least three (3) and no more than six (6) ASCII characters from the set of alphanumerics, @@ -253,13 +296,20 @@ and This is for compatibility with POSIX requirements for time zone abbreviations. .PP -When reading a version 2 or 3 file, readers +When reading a version 2 or higher file, readers should ignore the version 1 header and data block except for the purpose of skipping over them. .PP Readers should calculate the total lengths of the headers and data blocks and check that they all fit within the actual file size, as part of a validity check for the file. +.PP +When a positive leap second occurs, readers should append an extra +second to the local minute containing the second just before the leap +second. If this occurs when the UTC offset is not a multiple of 60 +seconds, the leap second occurs earlier than the last second of the +local minute and the minute's remaining local seconds are numbered +through 60 instead of the usual 59; the UTC offset is unaffected. .SS Common interoperability issues This section documents common problems in reading or writing TZif files. Most of these are problems in generating TZif files for use by @@ -280,7 +330,7 @@ design goal has been that a reader can successfully use a TZif file even if the file is of a later TZif version than what the reader was designed for. When complete compatibility was not achieved, an attempt was -made to limit glitches to rarely used timestamps, and to allow +made to limit glitches to rarely used timestamps and allow simple partial workarounds in writers designed to generate new-version data useful even for older-version readers. This section attempts to document these compatibility issues and @@ -297,20 +347,33 @@ version 2+ data even if the reader's native timestamps have only 32 bits. .IP * Some readers designed for version 2 might mishandle -timestamps after a version 3 file's last transition, because +timestamps after a version 3 or higher file's last transition, because they cannot parse extensions to POSIX in the TZ-like string. As a partial workaround, a writer can output more transitions than necessary, so that only far-future timestamps are mishandled by version 2 readers. .IP * Some readers designed for version 2 do not support -permanent daylight saving time, e.g., a TZ string +permanent daylight saving time with transitions after 24:00 +\(en e.g., a TZ string .q "EST5EDT,0/0,J365/25" -denoting permanent Eastern Daylight Time (\-04). -As a partial workaround, a writer can substitute standard time -for the next time zone east, e.g., +denoting permanent Eastern Daylight Time +(\-04). +As a workaround, a writer can substitute standard time +for two time zones east, e.g., +.q "XXX3EDT4,0/0,J365/23" +for a time zone with a never-used standard time (XXX, \-03) +and negative daylight saving time (EDT, \-04) all year. +Alternatively, +as a partial workaround a writer can substitute standard time +for the next time zone east \(en e.g., .q "AST4" -for permanent Atlantic Standard Time (\-04). +for permanent +Atlantic Standard Time (\-04). +.IP * +Some readers designed for version 2 or 3, and that require strict +conformance to RFC 8536, reject version 4 files whose leap second +tables are truncated at the start or that end in expiration times. .IP * Some readers ignore the footer, and instead predict future timestamps from the time type of the last transition. @@ -375,6 +438,17 @@ thus swapping standard and daylight saving time. Although this workaround misidentifies which part of the year uses daylight saving time, it records UT offsets and time zone abbreviations correctly. +.IP * +Some readers generate ambiguous timestamps for positive leap seconds +that occur when the UTC offset is not a multiple of 60 seconds. +For example, in a timezone with UTC offset +01:23:45 and with +a positive leap second 78796801 (1972-06-30 23:59:60 UTC), some readers will +map both 78796800 and 78796801 to 01:23:45 local time the next day +instead of mapping the latter to 01:23:46, and they will map 78796815 to +01:23:59 instead of to 01:23:60. +This has not yet been a practical problem, since no civil authority +has observed such UTC offsets since leap seconds were +introduced in 1972. .PP Some interoperability problems are reader bugs that are listed here mostly as warnings to developers of readers. @@ -417,11 +491,9 @@ of one hour, or of 15 minutes, or of 1 minute. .PP Olson A, Eggert P, Murchison K. The Time Zone Information Format (TZif). 2019 Feb. -.UR https://\:www.rfc-editor.org/\:info/\:rfc8536 +.UR https://\:datatracker.ietf.org/\:doc/\:html/\:rfc8536 Internet RFC 8536 .UE .UR https://\:doi.org/\:10.17487/\:RFC8536 doi:10.17487/RFC8536 .UE . -.\" This file is in the public domain, so clarified as of -.\" 1996-06-05 by Arthur David Olson. diff --git a/man8/tzselect.8 b/man8/tzselect.8 index 2319c6158..3b69587f3 100644 --- a/man8/tzselect.8 +++ b/man8/tzselect.8 @@ -1,53 +1,128 @@ .\" %%%LICENSE_START(PUBLIC_DOMAIN) -.\" This page is in the public domain +.\" This file is in the public domain, so clarified as of +.\" 2009-05-17 by Arthur David Olson. .\" %%%LICENSE_END .\" .TH tzselect 8 (date) "Linux man-pages (unreleased)" .SH NAME tzselect \- select a timezone .SH SYNOPSIS -.nf +.ie \n(.g .ds - \f(CR-\fP +.el .ds - \- +.ds d " degrees +.ds m " minutes +.ds s " seconds +.ds _ " \& +.if t \{\ +. if \n(.g .if c \(de .if c \(fm .if c \(sd \{\ +. ds d \(de +. ds m \(fm +. ds s \(sd +. ds _ \| +. \} +.\} .B tzselect -.fi +[ +.B \*-c +.I coord +] [ +.B \*-n +.I limit +] [ +.B \*-\*-help +] [ +.B \*-\*-version +] .SH DESCRIPTION The .B tzselect program asks the user for information about the current location, -and outputs the resulting timezone description to standard output. -The output is suitable as a value for the -.B TZ -environment variable. +and outputs the resulting timezone to standard output. +The output is suitable as a value for the TZ environment variable. .PP All interaction with the user is done via standard input and standard error. -.SH EXIT STATUS -The exit status is zero if a timezone was successfully obtained -from the user, and is nonzero otherwise. -.SH ENVIRONMENT -.TP -.B AWK -Name of a POSIX-compliant -.I awk +.SH OPTIONS +.TP +.BI "\*-c " coord +Instead of asking for continent and then country and then city, +ask for selection from time zones whose largest cities +are closest to the location with geographical coordinates +.I coord. +Use ISO 6709 notation for +.I coord, +that is, a latitude immediately followed by a longitude. The latitude +and longitude should be signed integers followed by an optional +decimal point and fraction: positive numbers represent north and east, +negative south and west. Latitudes with two and longitudes with three +integer digits are treated as degrees; latitudes with four or six and +longitudes with five or seven integer digits are treated as +.I "DDMM, DDDMM, DDMMSS," +or +.I DDDMMSS +representing +.I DD +or +.I DDD +degrees, +.I MM +minutes, +and zero or +.I SS +seconds, with any trailing fractions represent fractional minutes or +(if +.I SS +is present) seconds. The decimal point is that of the current locale. +For example, in the (default) C locale, +.B "\*-c\ +40.689\*-074.045" +specifies 40.689\*d\*_N, 74.045\*d\*_W, +.B "\*-c\ +4041.4\*-07402.7" +specifies 40\*d\*_41.4\*m\*_N, 74\*d\*_2.7\*m\*_W, and +.B "\*-c\ +404121\*-0740240" +specifies 40\*d\*_41\*m\*_21\*s\*_N, 74\*d\*_2\*m\*_40\*s\*_W. +If +.I coord +is not one of the documented forms, the resulting behavior is unspecified. +.TP +.BI "\*-n " limit +When +.B \*-c +is used, display the closest +.I limit +locations (default 10). +.TP +.B "\*-\*-help" +Output help information and exit. +.TP +.B "\*-\*-version" +Output version information and exit. +.SH "ENVIRONMENT VARIABLES" +.TP +\f3AWK\fP +Name of a Posix-compliant +.B awk program (default: .BR awk ). .TP -.B TZDIR +\f3TZDIR\fP Name of the directory containing timezone data files (default: -.IR /usr/share/zoneinfo ). -.\" or perhaps /usr/local/etc/zoneinfo in some older systems. +.BR /usr/share/zoneinfo ). .SH FILES .TP -\fBTZDIR\fP\fI/iso3166.tab\fP +\f2TZDIR\fP\f3/iso3166.tab\fP Table of ISO 3166 2-letter country codes and country names. .TP -\fBTZDIR\fP\fI/zone.tab\fP -Table of country codes, latitude and longitude, TZ values, and +\f2TZDIR\fP\f3/zone1970.tab\fP +Table of country codes, latitude and longitude, timezones, and descriptive comments. .TP -\fBTZDIR\fP\fI/\fP\fITZ\fP -Timezone data file for timezone -.IR TZ . -.SH SEE ALSO -.BR tzfile (5), -.BR zdump (8), -.BR zic (8) -.\" @(#)tzselect.8 1.3 +\f2TZDIR\fP\f3/\fP\f2TZ\fP +Timezone data file for timezone \f2TZ\fP. +.SH "EXIT STATUS" +The exit status is zero if a timezone was successfully obtained from the user, +nonzero otherwise. +.SH "SEE ALSO" +newctime(3), tzfile(5), zdump(8), zic(8) +.SH NOTES +Applications should not assume that +.BR tzselect 's +output matches the user's political preferences. -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: mandoc(1) warning in tzfile(5) regarding // 2023-03-08 5:19 ` Paul Eggert @ 2023-03-08 19:44 ` Alejandro Colomar 2023-03-08 21:54 ` Paul Eggert 0 siblings, 1 reply; 6+ messages in thread From: Alejandro Colomar @ 2023-03-08 19:44 UTC (permalink / raw) To: Paul Eggert; +Cc: linux-man, groff, G. Branden Robinson [-- Attachment #1.1: Type: text/plain, Size: 6299 bytes --] Hi Paul! [reordered quotes for my reply] On 3/8/23 06:19, Paul Eggert wrote: > > Come to think of it, we should resync tzfile.5 and tzselect.8 from > upstream for other reasons. Proposed patch to manpages attached. If this > generates more mandoc warnings, I suppose we can adjust the calls to mandoc. Yes, I like having them as synced as possible (ideally, we would just hold a simple copy in the Linux man-pages). I've applied your patch. BTW, I have some comments to make about the patch, and it would be easier to make them if the patch was not attached, but rather inline in the mail. (IIRC, I also have a few comments about your other patch submitted recently, and I haven't answered so far because I find it cumbersome to copy from the attachment into the email to do a proper reply; but I'm not ignoring it; just finding some time for it ;) Would you mind sending your patches inline, if it's not much cumbersome to you? But I guess you may have your customs though, so if you prefer sending them attached, that's fine; it'll just take me a bit more time to reply, but I appreciate your contributions anyway :-) > I suggest reverting all those changes to > tzfile.5, since the upstream tzfile.5 continues to use \(lq etc. for > compatibility with traditional troff, which is still a thing upstream. Yup, no problem with that. I applied the patch to tz* pages by accident. It wasn't my intention to deviate from upstream. I just applied the scripted changes to all pages blindly, and forgot to keep the external pages out of the patches. > On 2023-03-07 15:54, Alejandro Colomar wrote: >> mandoc: man5/tzfile.5:15:19: WARNING: undefined escape, printing literally: \\ >> mandoc: man5/tzfile.5:15:10: WARNING: undefined escape, printing literally: \\ > > My guess is that this is fallout from last month's changes to use \[lq] > instead of \(lq and so forth. It seems not. I still see the warning. alx@debian:~/src/linux/man-pages/man-pages/main$ grep -n '\\\\' man5/tzfile.5 15:\\$3\*(lq\\$1\*(rq\\$2 alx@debian:~/src/linux/man-pages/man-pages/main$ make lint-man-mandoc V=1 LINT (mandoc) tmp/lint/man5/tzfile.5.lint-man.mandoc.touch ! (mandoc -man -Tlint man5/tzfile.5 2>&1 \ | grep -v 'STYLE: lower case character in document title:' \ | grep -v 'UNSUPP: ignoring macro in table:' \ | grep -v 'WARNING: cannot parse date, using it verbatim: TH (date)' \ | grep -v 'WARNING: empty block: UR' \ ||:; \ ) \ | grep '.' >&2 mandoc: man5/tzfile.5:15:18: WARNING: undefined escape, printing literally: \\ mandoc: man5/tzfile.5:15:9: WARNING: undefined escape, printing literally: \\ make: *** [lib/lint-man.mk:88: tmp/lint/man5/tzfile.5.lint-man.mandoc.touch] Error 1 I don't run these tests often, so I'm not saying this is a new warning. It has been there probably since forever. It's just that previously there were many other pages that gave warnings, but now I've cleaned most of those, and your pages are the only ones --together with bpf-helpers(7)-- that trigger warnings from `make lint-man-mandoc`. And now some question about the patch itself (I've applied it, but there's something itching me): > commit bab8324d213362bbb59434748797a0cddcbefecd (HEAD -> master, korg/master) > Author: Paul Eggert <eggert@cs.ucla.edu> > Date: Tue Mar 7 21:11:38 2023 -0800 > > tzfile.5, tzselect.8: sync from tzdb upstream > > This makes tzfile.5 and tzselect.8 a copy of the tzdb develoment > version (commit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0), except that > man-pages boilerplate surrounds the copyright notice, and the .TH line > uses man-pages format. I guess you referred to the TH line in the tzselect.8 page, which doesn't show a date, has the project and (unreleased) version in the 4th field, and has no 5th field. > > Signed-off-by: Alejandro Colomar <alx@kernel.org> > > diff --git a/man5/tzfile.5 b/man5/tzfile.5 > index aa2170479..e94aaaad6 100644 > --- a/man5/tzfile.5 > +++ b/man5/tzfile.5 > @@ -1,21 +1,21 @@ > .\" %%%LICENSE_START(PUBLIC_DOMAIN) > .\" This file is in the public domain, so clarified as of > -.\" 1996-06-05 by Arthur David Olson <arthur_david_olson@nih.gov>. > +.\" 1996-06-05 by Arthur David Olson. > .\" %%%LICENSE_END > .\" > -.TH tzfile 5 2022-09-09 Linux "Linux Programmer's Manual" > +.TH tzfile 5 2023-03-07 Linux "Linux Programmer's Manual" I don't like this TH line, because: - The 4th argument is supposed to specify the project and version of the upstream manual page. That should be your project and version (similar to how the Linux man-pages pages have in the latest release "Linux man-pages 6.03"). For example, another page that is synced from upstream is bpf-helpers.7. It has the following: $ grep '\.TH' man7/bpf-helpers.7 .TH "BPF-HELPERS" 7 "2022-09-26" "Linux v6.1" Would you mind specifying your own project and version upstream so I could keep them untouched? I'd also like if you specified the last-modified date when you make a release, but if we sync the page from git HEAD that's less important. You could do something similar to the placeholder '(date)' that we use, and somehow update it at release time. > .SH NAME > tzfile \- timezone information > .SH DESCRIPTION [...] > diff --git a/man8/tzselect.8 b/man8/tzselect.8 > index 2319c6158..3b69587f3 100644 > --- a/man8/tzselect.8 > +++ b/man8/tzselect.8 > @@ -1,53 +1,128 @@ > .\" %%%LICENSE_START(PUBLIC_DOMAIN) > -.\" This page is in the public domain > +.\" This file is in the public domain, so clarified as of > +.\" 2009-05-17 by Arthur David Olson. > .\" %%%LICENSE_END > .\" > .TH tzselect 8 (date) "Linux man-pages (unreleased)" And don't really like this one either, since it looks like the Linux man-pages is the upstream of the page, and it's not. I probably changed this also by accident in some scripted patch. I realized and avoided it for tzfile.5, but forgot about this one :/. > .SH NAME > tzselect \- select a timezone > .SH SYNOPSIS Cheers, Alex -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: mandoc(1) warning in tzfile(5) regarding // 2023-03-08 19:44 ` Alejandro Colomar @ 2023-03-08 21:54 ` Paul Eggert 2023-03-08 22:15 ` Alejandro Colomar 0 siblings, 1 reply; 6+ messages in thread From: Paul Eggert @ 2023-03-08 21:54 UTC (permalink / raw) To: Alejandro Colomar; +Cc: linux-man, groff, G. Branden Robinson [-- Attachment #1: Type: text/plain, Size: 4008 bytes --] On 3/8/23 11:44, Alejandro Colomar wrote: > Would you mind sending your patches inline, if it's not much > cumbersome to you? Sure, today I resent that other patch inline. > I still see the warning. Oh well. Looks like a mandoc bug; maybe it can't tell that we're in a macro so '\\' is OK, indeed expected. > I guess you referred to the TH line in the tzselect.8 page, which > doesn't show a date, has the project and (unreleased) version in > the 4th field, and has no 5th field. Yes. >> -.TH tzfile 5 2022-09-09 Linux "Linux Programmer's Manual" >> +.TH tzfile 5 2023-03-07 Linux "Linux Programmer's Manual" > > I don't like this TH line That's the Linux man page's .TH line not the tzdb .TH line. I merely used the format that was already there. The tzdb .TH line is merely ".TH TZFILE 5". So you can edit the man-pages .TZ line any way you like. Come to think of it, the tzdb man pages aren't systematic about .TH line capitalization. Some use uppercase (the style in 7th Edition Unix), some lowercase (more common in recent decades). Let's go with lowercase. Proposed tzdb patch attached, and installed in the development repository. If mandoc complains about this, that's mandoc's problem not ours. > Would you mind specifying your own project and version upstream > so I could keep them untouched? I can see problems with that. First, it's tzdb commit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0 and I doubt whether man page readers want to see that. We do have a mechanism for converting that commit ID to the quasi version number "2022g-64-g12b48fa" but this quasi version number depends on development history not merely on current state, so it has its own issues. Second, non-Linux installations of man pages could see bad output with a .TH line like this: .TH tzfile 5 "tzdb commit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0" "Time Zone Database" On Solaris 10, "nroff -man tzfile.5" generates the following footer line for that: Last change: tzdb commit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a1 This ends in "a1" not the correct "a0", and the "Time Zone Database" has vanished. On Fedora 37 and macOS the footer line isn't much better: Time Zone Dattzdbecommit 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0 tzfile(5) Nor does it look good on AIX 7.1: Time Zone Database (tzdb commit 12b48faf10c265ee3ea1aad8cdb5tzfile(5) Third, Git doesn't automatically put version numbers into working files, like SCCS does. So it'll be a pain to generate those numbers automatically, with our current approach of committing the man page files directly into the repository. As you suggest, we'd have to rename the man page files to something else in the repository, and have 'make' (or some script) generate the version number. Although some (perhaps all) of this is doable, it'd take some time to implement and it'd probably affect downstream users who currently fetch the man pages directly from the repository, so it wouldn't be as simple as the attached patch. > I'd also like if you specified the last-modified date when you > make a release, Also doable, but as we don't do that now even for programs like 'zdump' it'd be an even bigger lift. >> .TH tzselect 8 (date) "Linux man-pages (unreleased)" > > And don't really like this one either, since it looks like > the Linux man-pages is the upstream of the page, and it's not. > I probably changed this also by accident in some scripted patch. > I realized and avoided it for tzfile.5, but forgot about this > one :/. That's the man-pages .TZ line, not the upstream one, so please feel free to modify it any way you like. Another way the files differ is in the lack of "%%%LICENSE_START(PUBLIC_DOMAIN)" and "%%%LICENSE_END" boilerplate upstream. I've been reluctant to do that upstream since I expect each downstream user has its own format for comments regarding licensing, SBOM, SSDF, SCA, and so forth (and if you don't know what those acronyms mean then I envy you :-). [-- Attachment #2: 0001-Use-lowercase-.TH-titles.patch --] [-- Type: text/x-patch, Size: 1978 bytes --] From 393ad035dc20c14e43ff33435552290b0db5b5e8 Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Wed, 8 Mar 2023 13:14:57 -0800 Subject: [PROPOSED] Use lowercase .TH titles --- newctime.3 | 2 +- newstrftime.3 | 2 +- newtzset.3 | 2 +- tzfile.5 | 2 +- tzselect.8 | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/newctime.3 b/newctime.3 index 0860151..70d8e54 100644 --- a/newctime.3 +++ b/newctime.3 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH NEWCTIME 3 +.TH newctime 3 .SH NAME asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time .SH SYNOPSIS diff --git a/newstrftime.3 b/newstrftime.3 index d5d8ee1..75d88c8 100644 --- a/newstrftime.3 +++ b/newstrftime.3 @@ -35,7 +35,7 @@ .\" from: @(#)strftime.3 5.12 (Berkeley) 6/29/91 .\" $Id: strftime.3,v 1.4 1993/12/15 20:33:00 jtc Exp $ .\" -.TH NEWSTRFTIME 3 +.TH newstrftime 3 .SH NAME strftime \- format date and time .SH SYNOPSIS diff --git a/newtzset.3 b/newtzset.3 index 086152a..e16ae6b 100644 --- a/newtzset.3 +++ b/newtzset.3 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH NEWTZSET 3 +.TH newtzset 3 .SH NAME tzset \- initialize time conversion information .SH SYNOPSIS diff --git a/tzfile.5 b/tzfile.5 index 1bd561a..eb5d4e8 100644 --- a/tzfile.5 +++ b/tzfile.5 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 1996-06-05 by Arthur David Olson. -.TH TZFILE 5 +.TH tzfile 5 .SH NAME tzfile \- timezone information .SH DESCRIPTION diff --git a/tzselect.8 b/tzselect.8 index 846b867..9828848 100644 --- a/tzselect.8 +++ b/tzselect.8 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH TZSELECT 8 +.TH tzselect 8 .SH NAME tzselect \- select a timezone .SH SYNOPSIS -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: mandoc(1) warning in tzfile(5) regarding // 2023-03-08 21:54 ` Paul Eggert @ 2023-03-08 22:15 ` Alejandro Colomar 2023-03-08 22:48 ` Paul Eggert 0 siblings, 1 reply; 6+ messages in thread From: Alejandro Colomar @ 2023-03-08 22:15 UTC (permalink / raw) To: Paul Eggert; +Cc: linux-man, groff, G. Branden Robinson, Ingo Schwarze [-- Attachment #1.1: Type: text/plain, Size: 4357 bytes --] Hi Paul, On 3/8/23 22:54, Paul Eggert wrote: > On 3/8/23 11:44, Alejandro Colomar wrote:>> I still see the warning. > > Oh well. Looks like a mandoc bug; maybe it can't tell that we're in a > macro so '\\' is OK, indeed expected. I'll report this in mandoc(1) then. Thanks for confirming. Although maybe this is expected of mandoc(1), since it's not a generic roff(7) interpreter... I CCd Ingo (mandoc(1) maintainer) in case he's interested in the bug. >>> -.TH tzfile 5 2022-09-09 Linux "Linux Programmer's Manual" >>> +.TH tzfile 5 2023-03-07 Linux "Linux Programmer's Manual" >> >> I don't like this TH line > > That's the Linux man page's .TH line not the tzdb .TH line. I know :) > I merely > used the format that was already there. The tzdb .TH line is merely ".TH > TZFILE 5". So you can edit the man-pages .TZ line any way you like. I prefer if we come up with some good upstream TH line that I can keep. :) > > Come to think of it, the tzdb man pages aren't systematic about .TH line > capitalization. Some use uppercase (the style in 7th Edition Unix), some > lowercase (more common in recent decades). Let's go with lowercase. > Proposed tzdb patch attached, and installed in the development > repository. That patch looks good to me. If you use these: Reviewed-by: Alejandro Colomar <alx@kernel.org> > If mandoc complains about this, that's mandoc's problem not > ours. Indeed. It complains, but Ingo was in favor of removing that warning, and modifying their own pages to use lowercase too. In the Linux man-pages I'm ignoring that warning with: ! (mandoc -man -Tlint man5/tzfile.5 2>&1 \ | grep -v 'STYLE: lower case character in document title:' \ | grep -v 'UNSUPP: ignoring macro in table:' \ | grep -v 'WARNING: cannot parse date, using it verbatim: TH (date)' \ | grep -v 'WARNING: empty block: UR' \ ||:; \ ) \ | grep '.' >&2 > > >> Would you mind specifying your own project and version upstream >> so I could keep them untouched? > > I can see problems with that. First, it's tzdb commit > 12b48faf10c265ee3ea1aad8cdb5c8239eea65a0 and I doubt whether man page > readers want to see that. We do have a mechanism for converting that > commit ID to the quasi version number "2022g-64-g12b48fa" but this quasi > version number depends on development history not merely on current > state, so it has its own issues. Makes sense. In that case, I suggest using the project name without a version. How about the following? .TH tzfile 5 "" tzdb (or alternatively:) .TH tzfile 5 "" "Time Zone Database" The "" (3rd field) is for the date, which we don't want to be updating. The 4th field has only the project name, but not the version, since it would also be complicated to update. (You could use 'tzbd' or "Time Zone Database", whatever you prefer.) The 5th field is also missing, since the default value is good enough (for section 5 it's "File Formats Manual"). If you use that line upstream, I'd keep it untouched in the Linux man-pages. > > Another way the files differ is in the lack of > "%%%LICENSE_START(PUBLIC_DOMAIN)" and "%%%LICENSE_END" boilerplate > upstream. I removed it in most pages. Most pages now use SPDX-License-Identifier. If that's the only remaining difference from upstream, I'd also remove it, > I've been reluctant to do that upstream since I expect each > downstream user has its own format for comments regarding licensing, > SBOM, SSDF, SCA, and so forth (and if you don't know what those acronyms > mean then I envy you :-). I don't :-) $ wtf is SBOM Gee... I don't know what SBOM means... $ wtf is SSDF Gee... I don't know what SSDF means... $ wtf is SCA Gee... I don't know what SCA means... $ dict SBOM No definitions found for "SBOM", perhaps you mean: gcide: Bom Swom wn: som vera: bom som sbod foldoc: bsom som sbm $ dict SSDF No definitions found for "SSDF", perhaps you mean: vera: sdf ssf ssd sadf sidf srdf sscf ssrf ssda ssdc ssdd ssdp ssdu foldoc: sdf ssd There's a dict(1) entry for SCA, but I don't think it's related to this :). Cheers, Alex -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5 [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: mandoc(1) warning in tzfile(5) regarding // 2023-03-08 22:15 ` Alejandro Colomar @ 2023-03-08 22:48 ` Paul Eggert 0 siblings, 0 replies; 6+ messages in thread From: Paul Eggert @ 2023-03-08 22:48 UTC (permalink / raw) To: Alejandro Colomar Cc: linux-man, groff, G. Branden Robinson, Ingo Schwarze, Time Zone Mailing List [-- Attachment #1: Type: text/plain, Size: 997 bytes --] On 3/8/23 14:15, Alejandro Colomar wrote: > That patch looks good to me. If you use these: > > Reviewed-by: Alejandro Colomar <alx@kernel.org> Oh, we don't use those in tzdb; instead your name is mentioned in the commit message. I installed it that way. > I suggest using the project name without a > version. How about the following? > > .TH tzfile 5 "" tzdb > > (or alternatively:) > > .TH tzfile 5 "" "Time Zone Database" Yes, that should work. I installed the attached proposed patch into the tzdb development repository. Feel free to migrate this into man-pages at your convenience. No rush of course. >> I've been reluctant to do that upstream since I expect each >> downstream user has its own format for comments regarding licensing, >> SBOM, SSDF, SCA, and so forth (and if you don't know what those acronyms >> mean then I envy you :-). > > I don't :-) https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity/software-security-supply-chains-open [-- Attachment #2: 0001-Append-tzdb-arg-4-to-.TH-lines.patch --] [-- Type: text/x-patch, Size: 3580 bytes --] From 27148539e699d9abe50df84371a077fdf2bc13de Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Wed, 8 Mar 2023 14:40:58 -0800 Subject: [PROPOSED] Append tzdb arg 4 to .TH lines Suggested by Alejandro Colomar in: https://lore.kernel.org/linux-man/08a72d2c-e7cb-4390-2cb1-7601b344ce9e@gmail.com/T/#t --- date.1 | 2 +- newctime.3 | 2 +- newstrftime.3 | 2 +- newtzset.3 | 2 +- time2posix.3 | 2 +- tzfile.5 | 2 +- tzselect.8 | 2 +- zdump.8 | 2 +- zic.8 | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/date.1 b/date.1 index 8670ff1..e810721 100644 --- a/date.1 +++ b/date.1 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH date 1 +.TH date 1 "" "Time Zone Database" .SH NAME date \- show and set date and time .SH SYNOPSIS diff --git a/newctime.3 b/newctime.3 index 70d8e54..05bb7de 100644 --- a/newctime.3 +++ b/newctime.3 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH newctime 3 +.TH newctime 3 "" "Time Zone Database" .SH NAME asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time .SH SYNOPSIS diff --git a/newstrftime.3 b/newstrftime.3 index 75d88c8..432c3e8 100644 --- a/newstrftime.3 +++ b/newstrftime.3 @@ -35,7 +35,7 @@ .\" from: @(#)strftime.3 5.12 (Berkeley) 6/29/91 .\" $Id: strftime.3,v 1.4 1993/12/15 20:33:00 jtc Exp $ .\" -.TH newstrftime 3 +.TH newstrftime 3 "" "Time Zone Database" .SH NAME strftime \- format date and time .SH SYNOPSIS diff --git a/newtzset.3 b/newtzset.3 index e16ae6b..78b6b6c 100644 --- a/newtzset.3 +++ b/newtzset.3 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH newtzset 3 +.TH newtzset 3 "" "Time Zone Database" .SH NAME tzset \- initialize time conversion information .SH SYNOPSIS diff --git a/time2posix.3 b/time2posix.3 index e13c431..f48402b 100644 --- a/time2posix.3 +++ b/time2posix.3 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 1996-06-05 by Arthur David Olson. -.TH time2posix 3 +.TH time2posix 3 "" "Time Zone Database" .SH NAME time2posix, posix2time \- convert seconds since the Epoch .SH SYNOPSIS diff --git a/tzfile.5 b/tzfile.5 index eb5d4e8..59d9f6b 100644 --- a/tzfile.5 +++ b/tzfile.5 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 1996-06-05 by Arthur David Olson. -.TH tzfile 5 +.TH tzfile 5 "" "Time Zone Database" .SH NAME tzfile \- timezone information .SH DESCRIPTION diff --git a/tzselect.8 b/tzselect.8 index 9828848..4578090 100644 --- a/tzselect.8 +++ b/tzselect.8 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH tzselect 8 +.TH tzselect 8 "" "Time Zone Database" .SH NAME tzselect \- select a timezone .SH SYNOPSIS diff --git a/zdump.8 b/zdump.8 index 170e18d..f77c0c7 100644 --- a/zdump.8 +++ b/zdump.8 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH zdump 8 +.TH zdump 8 "" "Time Zone Database" .SH NAME zdump \- timezone dumper .SH SYNOPSIS diff --git a/zic.8 b/zic.8 index e9fccfe..c467efe 100644 --- a/zic.8 +++ b/zic.8 @@ -1,6 +1,6 @@ .\" This file is in the public domain, so clarified as of .\" 2009-05-17 by Arthur David Olson. -.TH zic 8 +.TH zic 8 "" "Time Zone Database" .SH NAME zic \- timezone compiler .SH SYNOPSIS -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-03-08 22:49 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-07 23:54 mandoc(1) warning in tzfile(5) regarding // Alejandro Colomar 2023-03-08 5:19 ` Paul Eggert 2023-03-08 19:44 ` Alejandro Colomar 2023-03-08 21:54 ` Paul Eggert 2023-03-08 22:15 ` Alejandro Colomar 2023-03-08 22:48 ` Paul Eggert
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox