mdocml: backport patches for #9868
These patches deal with how the man page to show is selected amongst multiple available ones. This not only addresses the issues pointed out in #9868, but also fixes the issue where localized manpages (in /usr/share/man/$some_locale_value) are prioritized over the default man pages. Fixes #9868 until a new upstream release. Closes #13125. Also: change template to make xlint happy Closes: #23108 [via git-merge-pr]
This commit is contained in:
parent
b9ea614aee
commit
798d8b1d7c
4 changed files with 266 additions and 22 deletions
104
srcpkgs/mdocml/patches/fix.9868-1.patch
Normal file
104
srcpkgs/mdocml/patches/fix.9868-1.patch
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
Log Message:
|
||||||
|
-----------
|
||||||
|
In man(1) mode, i.e. when asking for a single manual page by name,
|
||||||
|
prefer file name matches over .Dt/.TH matches over first NAME matches
|
||||||
|
over later NAME matches, but do not change the ordering for apropos(1)
|
||||||
|
nor for man -a.
|
||||||
|
|
||||||
|
This reverts main.c rev. 1.310 and mansearch.h rev. 1.29
|
||||||
|
and includes a partial revert of mansearch.c rev. 1.79.
|
||||||
|
|
||||||
|
Regression reported by Lorenzo Beretta <loreb at github>
|
||||||
|
as part of https://github.com/void-linux/void-packages/issues/9868 .
|
||||||
|
|
||||||
|
Modified Files:
|
||||||
|
--------------
|
||||||
|
mandoc:
|
||||||
|
TODO
|
||||||
|
main.c
|
||||||
|
mansearch.c
|
||||||
|
mansearch.h
|
||||||
|
|
||||||
|
Revision Data
|
||||||
|
-------------
|
||||||
|
Index: mansearch.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /home/cvs/mandoc/mandoc/mansearch.c,v
|
||||||
|
retrieving revision 1.80
|
||||||
|
retrieving revision 1.81
|
||||||
|
diff -Lmansearch.c -Lmansearch.c -u -p -r1.80 -r1.81
|
||||||
|
--- mansearch.c
|
||||||
|
+++ mansearch.c
|
||||||
|
@@ -199,6 +199,7 @@ mansearch(const struct mansearch *search
|
||||||
|
}
|
||||||
|
mpage->names = buildnames(page);
|
||||||
|
mpage->output = buildoutput(outkey, page);
|
||||||
|
+ mpage->bits = search->firstmatch ? rp->bits : 0;
|
||||||
|
mpage->ipath = i;
|
||||||
|
mpage->sec = *page->sect - '0';
|
||||||
|
if (mpage->sec < 0 || mpage->sec > 9)
|
||||||
|
@@ -294,8 +295,10 @@ manmerge_term(struct expr *e, struct oha
|
||||||
|
break;
|
||||||
|
slot = ohash_lookup_memory(htab,
|
||||||
|
(char *)&res, sizeof(res.page), res.page);
|
||||||
|
- if ((rp = ohash_find(htab, slot)) != NULL)
|
||||||
|
+ if ((rp = ohash_find(htab, slot)) != NULL) {
|
||||||
|
+ rp->bits |= res.bits;
|
||||||
|
continue;
|
||||||
|
+ }
|
||||||
|
rp = mandoc_malloc(sizeof(*rp));
|
||||||
|
*rp = res;
|
||||||
|
ohash_insert(htab, slot, rp);
|
||||||
|
@@ -408,7 +411,8 @@ manpage_compare(const void *vp1, const v
|
||||||
|
|
||||||
|
mp1 = vp1;
|
||||||
|
mp2 = vp2;
|
||||||
|
- if ((diff = mp1->sec - mp2->sec))
|
||||||
|
+ if ((diff = mp2->bits - mp1->bits) ||
|
||||||
|
+ (diff = mp1->sec - mp2->sec))
|
||||||
|
return diff;
|
||||||
|
|
||||||
|
/* Fall back to alphabetic ordering of names. */
|
||||||
|
Index: mansearch.h
|
||||||
|
===================================================================
|
||||||
|
RCS file: /home/cvs/mandoc/mandoc/mansearch.h,v
|
||||||
|
retrieving revision 1.29
|
||||||
|
retrieving revision 1.30
|
||||||
|
diff -Lmansearch.h -Lmansearch.h -u -p -r1.29 -r1.30
|
||||||
|
--- mansearch.h
|
||||||
|
+++ mansearch.h
|
||||||
|
@@ -92,6 +92,7 @@ struct manpage {
|
||||||
|
char *file; /* to be prefixed by manpath */
|
||||||
|
char *names; /* a list of names with sections */
|
||||||
|
char *output; /* user-defined additional output */
|
||||||
|
+ uint64_t bits; /* name type mask */
|
||||||
|
size_t ipath; /* number of the manpath */
|
||||||
|
int sec; /* section number, 10 means invalid */
|
||||||
|
enum form form;
|
||||||
|
Index: main.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /home/cvs/mandoc/mandoc/main.c,v
|
||||||
|
retrieving revision 1.322
|
||||||
|
retrieving revision 1.323
|
||||||
|
diff -Lmain.c -Lmain.c -u -p -r1.322 -r1.323
|
||||||
|
--- main.c
|
||||||
|
+++ main.c
|
||||||
|
@@ -411,6 +411,7 @@ main(int argc, char *argv[])
|
||||||
|
res[sz].file = mandoc_strdup(argv[c]);
|
||||||
|
res[sz].names = NULL;
|
||||||
|
res[sz].output = NULL;
|
||||||
|
+ res[sz].bits = 0;
|
||||||
|
res[sz].ipath = SIZE_MAX;
|
||||||
|
res[sz].sec = 10;
|
||||||
|
res[sz].form = FORM_SRC;
|
||||||
|
@@ -761,6 +762,7 @@ found:
|
||||||
|
page->file = file;
|
||||||
|
page->names = NULL;
|
||||||
|
page->output = NULL;
|
||||||
|
+ page->bits = NAME_FILE & NAME_MASK;
|
||||||
|
page->ipath = ipath;
|
||||||
|
page->sec = (*sec >= '1' && *sec <= '9') ? *sec - '1' + 1 : 10;
|
||||||
|
page->form = form;
|
||||||
|
--
|
||||||
|
To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
|
||||||
|
|
75
srcpkgs/mdocml/patches/fix.9868-2.patch
Normal file
75
srcpkgs/mdocml/patches/fix.9868-2.patch
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
Log Message:
|
||||||
|
-----------
|
||||||
|
In man(1) mode with a specific section requested,
|
||||||
|
try harder to find the best match.
|
||||||
|
|
||||||
|
Use this order of preference:
|
||||||
|
1. The section in both the directory name and the file name matches exactly.
|
||||||
|
2. The section in the file name matches exactly.
|
||||||
|
3. The section in the directory name matches exactly.
|
||||||
|
4. Neither of them matches exactly.
|
||||||
|
The latter can happen when mansearch() finds substring matches
|
||||||
|
or when the second .Dt argument mismatches the dir and file names.
|
||||||
|
|
||||||
|
Lorenzo Beretta <loreb at github> reported that this caused real
|
||||||
|
problems on Void Linux, like "man 3 readline" showing readline(3m).
|
||||||
|
See https://github.com/void-linux/void-packages/issues/9868 for details.
|
||||||
|
|
||||||
|
Modified Files:
|
||||||
|
--------------
|
||||||
|
mandoc:
|
||||||
|
main.c
|
||||||
|
|
||||||
|
Revision Data
|
||||||
|
-------------
|
||||||
|
Index: main.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /home/cvs/mandoc/mandoc/main.c,v
|
||||||
|
retrieving revision 1.324
|
||||||
|
retrieving revision 1.325
|
||||||
|
diff -Lmain.c -Lmain.c -u -p -r1.324 -r1.325
|
||||||
|
--- main.c
|
||||||
|
+++ main.c
|
||||||
|
@@ -125,7 +125,7 @@ main(int argc, char *argv[])
|
||||||
|
char *conf_file, *defpaths, *auxpaths;
|
||||||
|
char *oarg, *tagarg;
|
||||||
|
unsigned char *uc;
|
||||||
|
- size_t i, sz;
|
||||||
|
+ size_t i, sz, ssz;
|
||||||
|
int prio, best_prio;
|
||||||
|
enum outmode outmode;
|
||||||
|
int fd, startdir;
|
||||||
|
@@ -434,7 +434,7 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
|
if (outmode == OUTMODE_ONE) {
|
||||||
|
argc = 1;
|
||||||
|
- best_prio = 20;
|
||||||
|
+ best_prio = 40;
|
||||||
|
} else if (outmode == OUTMODE_ALL)
|
||||||
|
argc = (int)sz;
|
||||||
|
|
||||||
|
@@ -453,10 +453,21 @@ main(int argc, char *argv[])
|
||||||
|
sec = res[i].file;
|
||||||
|
sec += strcspn(sec, "123456789");
|
||||||
|
if (sec[0] == '\0')
|
||||||
|
- continue;
|
||||||
|
+ continue; /* No section at all. */
|
||||||
|
prio = sec_prios[sec[0] - '1'];
|
||||||
|
- if (sec[1] != '/')
|
||||||
|
- prio += 10;
|
||||||
|
+ if (search.sec != NULL) {
|
||||||
|
+ ssz = strlen(search.sec);
|
||||||
|
+ if (strncmp(sec, search.sec, ssz) == 0)
|
||||||
|
+ sec += ssz;
|
||||||
|
+ } else
|
||||||
|
+ sec++; /* Prefer without suffix. */
|
||||||
|
+ if (*sec != '/')
|
||||||
|
+ prio += 10; /* Wrong dir name. */
|
||||||
|
+ if (search.sec != NULL &&
|
||||||
|
+ (strlen(sec) <= ssz + 3 ||
|
||||||
|
+ strcmp(sec + strlen(sec) - ssz,
|
||||||
|
+ search.sec) != 0))
|
||||||
|
+ prio += 20; /* Wrong file ext. */
|
||||||
|
if (prio >= best_prio)
|
||||||
|
continue;
|
||||||
|
best_prio = prio;
|
67
srcpkgs/mdocml/patches/fix.9868-3.patch
Normal file
67
srcpkgs/mdocml/patches/fix.9868-3.patch
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
Log Message:
|
||||||
|
-----------
|
||||||
|
Enter dangling .so links into the database, to avoid harassing
|
||||||
|
users of man(1) about running makewhatis(8), which won't help.
|
||||||
|
Seeing the content of the broken .so request might even help
|
||||||
|
users to figure out how to access the manual page they want.
|
||||||
|
|
||||||
|
Fixing the last issue reported by Lorenzo Beretta <loreb at github>
|
||||||
|
as part of https://github.com/void-linux/void-packages/issues/9868 .
|
||||||
|
|
||||||
|
Modified Files:
|
||||||
|
--------------
|
||||||
|
mandoc:
|
||||||
|
mandocdb.c
|
||||||
|
|
||||||
|
Revision Data
|
||||||
|
-------------
|
||||||
|
Index: mandocdb.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /home/cvs/mandoc/mandoc/mandocdb.c,v
|
||||||
|
retrieving revision 1.262
|
||||||
|
retrieving revision 1.263
|
||||||
|
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.262 -r1.263
|
||||||
|
--- mandocdb.c
|
||||||
|
+++ mandocdb.c
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
- * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
+ * Copyright (c) 2011-2019 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
* Copyright (c) 2016 Ed Maste <emaste@freebsd.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
@@ -1186,9 +1186,11 @@ mpages_merge(struct dba *dba, struct mpa
|
||||||
|
mlink->next = mlink_dest->next;
|
||||||
|
mlink_dest->next = mpage->mlinks;
|
||||||
|
mpage->mlinks = NULL;
|
||||||
|
+ goto nextpage;
|
||||||
|
}
|
||||||
|
- goto nextpage;
|
||||||
|
- } else if (meta != NULL && meta->macroset == MACROSET_MDOC) {
|
||||||
|
+ meta->macroset = MACROSET_NONE;
|
||||||
|
+ }
|
||||||
|
+ if (meta != NULL && meta->macroset == MACROSET_MDOC) {
|
||||||
|
mpage->form = FORM_SRC;
|
||||||
|
mpage->sec = meta->msec;
|
||||||
|
mpage->sec = mandoc_strdup(
|
||||||
|
@@ -1208,12 +1210,15 @@ mpages_merge(struct dba *dba, struct mpa
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(mpage->desc == NULL);
|
||||||
|
- if (meta == NULL) {
|
||||||
|
- mpage->form = FORM_CAT;
|
||||||
|
+ if (meta == NULL || meta->sodest != NULL) {
|
||||||
|
mpage->sec = mandoc_strdup(mlink->dsec);
|
||||||
|
mpage->arch = mandoc_strdup(mlink->arch);
|
||||||
|
mpage->title = mandoc_strdup(mlink->name);
|
||||||
|
- parse_cat(mpage, fd);
|
||||||
|
+ if (meta == NULL) {
|
||||||
|
+ mpage->form = FORM_CAT;
|
||||||
|
+ parse_cat(mpage, fd);
|
||||||
|
+ } else
|
||||||
|
+ mpage->form = FORM_SRC;
|
||||||
|
} else if (meta->macroset == MACROSET_MDOC)
|
||||||
|
parse_mdoc(mpage, meta, meta->first);
|
||||||
|
else
|
|
@ -1,22 +1,22 @@
|
||||||
# Template file for 'mdocml'
|
# Template file for 'mdocml'
|
||||||
pkgname=mdocml
|
pkgname=mdocml
|
||||||
version=1.14.5
|
version=1.14.5
|
||||||
revision=5
|
revision=6
|
||||||
wrksrc="mandoc-${version}"
|
wrksrc="mandoc-${version}"
|
||||||
build_style=configure
|
build_style=configure
|
||||||
make_build_args="all man.cgi"
|
make_build_args="all man.cgi"
|
||||||
make_check_target="regress"
|
make_check_target="regress"
|
||||||
makedepends="less zlib-devel"
|
makedepends="less zlib-devel"
|
||||||
checkdepends="perl"
|
|
||||||
depends="less"
|
depends="less"
|
||||||
provides="man-0_1"
|
checkdepends="perl"
|
||||||
conf_files="/etc/man.conf"
|
conf_files="/etc/man.conf"
|
||||||
short_desc="The mandoc UNIX manpage compiler toolset"
|
short_desc="UNIX manpage compiler toolset (mandoc)"
|
||||||
maintainer="Leah Neukirchen <leah@vuxu.org>"
|
maintainer="Leah Neukirchen <leah@vuxu.org>"
|
||||||
license="ISC"
|
license="ISC"
|
||||||
homepage="http://mandoc.bsd.lv"
|
homepage="http://mandoc.bsd.lv"
|
||||||
distfiles="http://mandoc.bsd.lv/snapshots/mandoc-${version}.tar.gz"
|
distfiles="http://mandoc.bsd.lv/snapshots/mandoc-${version}.tar.gz"
|
||||||
checksum=8219b42cb56fc07b2aa660574e6211ac38eefdbf21f41b698d3348793ba5d8f7
|
checksum=8219b42cb56fc07b2aa660574e6211ac38eefdbf21f41b698d3348793ba5d8f7
|
||||||
|
provides="man-0_1"
|
||||||
|
|
||||||
alternatives="
|
alternatives="
|
||||||
man:man:/usr/bin/mandoc
|
man:man:/usr/bin/mandoc
|
||||||
|
@ -28,17 +28,16 @@ alternatives="
|
||||||
|
|
||||||
CFLAGS="-fcommon"
|
CFLAGS="-fcommon"
|
||||||
|
|
||||||
post_extract() {
|
post_patch() {
|
||||||
# use less(1)
|
# use less(1)
|
||||||
sed -i 's,"more -s","less -s",g' main.c
|
vsed -i 's,"more -s","less -s",g' main.c
|
||||||
sed -i 's,.Xr more,.Xr less,g' *.1
|
vsed -i 's,.Xr more,.Xr less,g' *.1
|
||||||
|
vsed -i 's/^CC=.*/CC=cc/' configure
|
||||||
sed -i 's/^CC=.*/CC=cc/' configure
|
|
||||||
cat ${FILESDIR}/void.css >>mandoc.css
|
cat ${FILESDIR}/void.css >>mandoc.css
|
||||||
cp ${FILESDIR}/cgi.h .
|
cp ${FILESDIR}/cgi.h .
|
||||||
}
|
}
|
||||||
pre_configure() {
|
pre_configure() {
|
||||||
cat >configure.local <<EOF
|
cat >configure.local <<-EOF
|
||||||
PREFIX=/usr
|
PREFIX=/usr
|
||||||
SBINDIR=/usr/bin
|
SBINDIR=/usr/bin
|
||||||
MANDIR=/usr/share/man
|
MANDIR=/usr/share/man
|
||||||
|
@ -53,7 +52,6 @@ EOF
|
||||||
case "$XBPS_TARGET_MACHINE" in
|
case "$XBPS_TARGET_MACHINE" in
|
||||||
*-musl) echo 'UTF8_LOCALE="C.UTF-8"' >>configure.local;;
|
*-musl) echo 'UTF8_LOCALE="C.UTF-8"' >>configure.local;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
}
|
}
|
||||||
post_install() {
|
post_install() {
|
||||||
# Rename mans for alternatives
|
# Rename mans for alternatives
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue