summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Väth <martin@mvath.de>2020-04-25 12:26:11 +0200
committerMartin Väth <martin@mvath.de>2020-04-25 12:26:11 +0200
commit5c42e4a4d6187a3f49cd2008e84ec515291978de (patch)
treebb41c6c4b4685b8622eb4ab82e873d603d008dcb
parentapp-shells/zshrc-mv: Version bump (diff)
downloadmv-5c42e4a4d6187a3f49cd2008e84ec515291978de.tar.gz
mv-5c42e4a4d6187a3f49cd2008e84ec515291978de.tar.bz2
mv-5c42e4a4d6187a3f49cd2008e84ec515291978de.zip
sys-apps/man virtual/man: Add upate of version removed from gentoo repository
Signed-off-by: Martin Väth <martin@mvath.de>
-rw-r--r--metadata/pkg_desc_index2
-rw-r--r--profiles/use.local.desc1
-rw-r--r--sys-apps/man/Manifest1
-rw-r--r--sys-apps/man/files/makewhatis.cron5
-rw-r--r--sys-apps/man/files/man-1.5m2-apropos.patch16
-rw-r--r--sys-apps/man/files/man-1.6-cross-compile.patch61
-rw-r--r--sys-apps/man/files/man-1.6c-cut-duplicate-manpaths.patch83
-rw-r--r--sys-apps/man/files/man-1.6e-headers.patch13
-rw-r--r--sys-apps/man/files/man-1.6f-makewhatis-compression-cleanup.patch69
-rw-r--r--sys-apps/man/files/man-1.6f-man2html-compression-2.patch61
-rw-r--r--sys-apps/man/files/man-1.6f-parallel-build.patch78
-rw-r--r--sys-apps/man/files/man-1.6f-so-search-2.patch34
-rw-r--r--sys-apps/man/files/man-1.6f-unicode.patch28
-rw-r--r--sys-apps/man/files/man-1.6g-compress.patch17
-rw-r--r--sys-apps/man/files/man-1.6g-echo-escape.patch15
-rw-r--r--sys-apps/man/files/man-1.6g-fbsd.patch15
-rw-r--r--sys-apps/man/files/man-1.6g-xz.patch53
-rw-r--r--sys-apps/man/man-1.6g-r1.ebuild152
-rw-r--r--sys-apps/man/metadata.xml11
-rw-r--r--virtual/man/man-0-r3.ebuild18
-rw-r--r--virtual/man/metadata.xml8
21 files changed, 741 insertions, 0 deletions
diff --git a/metadata/pkg_desc_index b/metadata/pkg_desc_index
index ddbae2d9..ef4b6db1 100644
--- a/metadata/pkg_desc_index
+++ b/metadata/pkg_desc_index
@@ -100,6 +100,7 @@ sci-mathematics/genius 1.0.21: Genius Mathematics Tool and the GEL Language
sci-mathematics/reduce 20141130-r2 20190413: A general-purpose computer algebra system
sys-apps/cpi 3.1: A wrapper for cp -i -a, making use of diff
sys-apps/less 556: Excellent text file viewer, optionally with additional selection feature
+sys-apps/man 1.6g-r1: Standard commands to read man pages
sys-apps/openrc-wrapper 2.3-r2: Use openrc init scripts with systemd or other init systems
sys-apps/paxopen 1.2: A wrapper script to set PAX kernel variables to an insecure/safe state
sys-apps/schedule 8.0-r1: script to schedule jobs in a multiuser multitasking environment
@@ -116,6 +117,7 @@ sys-kernel/kccmp 0.3-r1: A simple tool for comparing two linux kernel .config fi
sys-kernel/kernel 5.0: A POSIX shell script to compile the kernel with user permissions
virtual/cdrtools 1: Virtual for command-line recorders cdrtools and cdrkit
virtual/freedesktop-icon-theme 0-r3: A virtual to choose between different icon themes
+virtual/man 0-r3: Virtual for man
www-plugins/bookmark-dupes 6.4: Firefox webextension: remove duplicate bookmarks/empty folders/descriptions
www-plugins/calc-extension 5.3: Firefox webextension: calculate values of mathematical expressions
www-plugins/canvasblocker 0.5.5: Firefox webextension: block canvas API to prevent canvas fingerprinting
diff --git a/profiles/use.local.desc b/profiles/use.local.desc
index 20a5e10c..85efb73a 100644
--- a/profiles/use.local.desc
+++ b/profiles/use.local.desc
@@ -196,6 +196,7 @@ sys-apps/less:less-select - Add the less-select feature (additional options and
sys-apps/less:lesspipe - Default to lesspipe.sh from app-text/lesspipe instead of the gentoo specific lesspipe.
sys-apps/less:original-gentoo - Use the gentoo default for the LESS variable.
sys-apps/less:source - Install sources for keybindings (only useful with less-select).
+sys-apps/man:cache - Use cache directory. Superfluous on modern machines
sys-block/parted:debug - Enable debugging as encouraged by upstream: [The default configuration] includes --enable-debug (by default), which contains many assertions. Obviously, these "waste" space, but in the past, they have caught potentially dangerous bugs before they would have done damage, so we think it's worth it. Also, it means we get more bug reports ;)
sys-block/parted:device-mapper - Enable device-mapper support from sys-fs/lvm2 in parted
sys-block/parted:standalone - Install a standalone version which provides all headers and binaries which collide with sys-block/parted:0. If this flag is not set, sys-block/parted:0 is pulled in to provide the non-installed headers and binaries.
diff --git a/sys-apps/man/Manifest b/sys-apps/man/Manifest
new file mode 100644
index 00000000..880c77b2
--- /dev/null
+++ b/sys-apps/man/Manifest
@@ -0,0 +1 @@
+DIST man-1.6g.tar.gz 256906 SHA512 c786fa2201aed92293e5590dc3ad5d550cf14e5059fa274ef7719af86ee4c892e747576495b6dc0a09286e73e2f0f0caf860216e0c8032d9ef13e5d26853048b
diff --git a/sys-apps/man/files/makewhatis.cron b/sys-apps/man/files/makewhatis.cron
new file mode 100644
index 00000000..bef5ea6d
--- /dev/null
+++ b/sys-apps/man/files/makewhatis.cron
@@ -0,0 +1,5 @@
+#!/bin/sh
+# this is part of the man package
+# it updates the search database for manpages
+
+exec nice makewhatis -u
diff --git a/sys-apps/man/files/man-1.5m2-apropos.patch b/sys-apps/man/files/man-1.5m2-apropos.patch
new file mode 100644
index 00000000..9735a533
--- /dev/null
+++ b/sys-apps/man/files/man-1.5m2-apropos.patch
@@ -0,0 +1,16 @@
+Ripped from Fedora
+
+--- man-1.5m2/src/apropos.sh
++++ man-1.5m2/src/apropos.sh
+@@ -19,9 +19,9 @@
+
+ # When man pages in your favorite locale look to grep like binary files
+ # (and you use GNU grep) you may want to add the 'a' option to *grepopt1.
+-aproposgrepopt1='i'
++aproposgrepopt1='ai'
+ aproposgrepopt2=''
+-whatisgrepopt1='iw'
++whatisgrepopt1='aiw'
+ whatisgrepopt2='^'
+ grepopt1=$%apropos_or_whatis%grepopt1
+ grepopt2=$%apropos_or_whatis%grepopt2
diff --git a/sys-apps/man/files/man-1.6-cross-compile.patch b/sys-apps/man/files/man-1.6-cross-compile.patch
new file mode 100644
index 00000000..18423691
--- /dev/null
+++ b/sys-apps/man/files/man-1.6-cross-compile.patch
@@ -0,0 +1,61 @@
+Fix up to work with cross-compiling ... most of these tests only
+need to see if the example compiled, not whether it runs ...
+
+--- configure
++++ configure
+@@ -232,15 +232,13 @@
+
+ echo checking for POSIX.1 header files
+ echo "#include <unistd.h>
+-main() {
+ #ifdef _POSIX_VERSION
+-exit(0);
++main() { exit(0); }
+ #else
+-exit(1);
+-#endif
+-}" > conftest.c
++# error no _POSIX_VERSION
++#endif" > conftest.c
+ eval $compile
+-if test -s conftest && ./conftest 2>/dev/null; then
++if test -s conftest ; then
+ DEFS="$DEFS -DPOSIX"
+ fi
+ rm -f conftest conftest.c
+@@ -249,7 +247,7 @@
+ echo "#include <strings.h>
+ main() { exit(0); rindex(0, 0); bzero(0, 0); }" > conftest.c
+ eval $compile
+-if test -s conftest && ./conftest 2>/dev/null; then :
++if test -s conftest ; then :
+ else DEFS="$DEFS -DUSG"
+ fi
+ rm -f conftest conftest.c
+@@ -258,7 +256,7 @@
+ echo '#include <sys/types.h>
+ main() { uid_t x; exit(0); }' > conftest.c
+ eval $compile
+-if test -s conftest && ./conftest 2>/dev/null; then :
++if test -s conftest ; then :
+ else
+ uid_t=`awk '/pw_uid;/ {print $1}' $INCLUDEDIR/pwd.h`
+ DEFS="$DEFS -Duid_t=${uid_t} -Dgid_t=${uid_t}"
+@@ -291,7 +289,7 @@
+ #endif
+ main() { char *p = (char *) alloca(1); exit(0); }' > conftest.c
+ eval $compile
+-if test -s conftest && ./conftest 2>/dev/null; then :
++if test -s conftest ; then :
+ elif test -d /usr/ucblib; then LIBS="$LIBS -L/usr/ucblib -lucb"
+ elif test -f /usr/lib/libPW.a; then LIBS="$LIBS -lPW"
+ else DEFS="$DEFS -DALLOCA_MISSING"
+@@ -321,7 +319,7 @@
+ struct option long_opts[] = { { "", no_argument, NULL, 0 } };
+ main() { exit(0); }' > conftest.c
+ eval $compile
+-if test -s conftest && ./conftest 2>/dev/null; then
++if test -s conftest ; then
+ manpathoption="--path"
+ else
+ manpathoption="-w"
diff --git a/sys-apps/man/files/man-1.6c-cut-duplicate-manpaths.patch b/sys-apps/man/files/man-1.6c-cut-duplicate-manpaths.patch
new file mode 100644
index 00000000..9ecaeb70
--- /dev/null
+++ b/sys-apps/man/files/man-1.6c-cut-duplicate-manpaths.patch
@@ -0,0 +1,83 @@
+http://bugs.gentoo.org/90186
+
+If we have entries in MANPATH that are really symlinks to other entries,
+then many man functions will yield duplicate entries.
+
+Without this patch, we see this behavior:
+$ echo $MANPATH
+/usr/share/man:/usr/man
+$ man --path
+/usr/share/man:/usr/man
+$ ls -ld /usr/share/man /usr/man
+lrwxrwxrwx 1 /usr/man -> /usr/share/man
+drwxr-xr-x 36 /usr/share/man
+$ man -k passwd
+passwd (1) - change user password
+passwd (1) - change user password
+
+With this patch, we get:
+$ echo $MANPATH
+/usr/share/man:/usr/man
+$ man --path
+/usr/share/man
+$ ls -ld /usr/share/man /usr/man
+lrwxrwxrwx 1 /usr/man -> /usr/share/man
+drwxr-xr-x 36 /usr/share/man
+$ man -k passwd
+passwd (1) - change user password
+
+--- man-1.6c/src/manpath.c
++++ man-1.6c/src/manpath.c
+@@ -380,6 +380,44 @@
+ }
+ }
+
++void trim_symlinked_manpaths (void);
++void
++trim_symlinked_manpaths () {
++ /*
++ * Skip symlinks to other entries in path.
++ * Do this after we've built the entire list.
++ */
++ struct stat *stat_cache;
++ size_t i, j, size;
++
++ if (!mandirlist)
++ return;
++
++ for (size = 0; mandirlist[size]; ++size)
++ /* count # of elements */;
++ if (size == 0)
++ return;
++ /* cache stat information for every element */
++ stat_cache = (struct stat *) my_malloc (size * sizeof(*stat_cache));
++ for (i = 0; i < size; ++i)
++ stat(mandirlist[i], &stat_cache[i]);
++
++#define EQU_STAT(s,d) ((s).st_dev == (d).st_dev && (s).st_ino == (d).st_ino)
++ for (i = 0; i < size; ++i) {
++ for (j = i+1; j < size; ++j) {
++ if (EQU_STAT(stat_cache[i], stat_cache[j])) {
++ /* these two entries are the same, so cut out the second one */
++ memmove(mandirlist+j, mandirlist+j+1, (size-j)*sizeof(*mandirlist));
++ memmove(stat_cache+j, stat_cache+j+1, (size-j)*sizeof(*stat_cache));
++ mandirlist[--size] = NULL;
++ --j;
++ }
++ }
++ }
++
++ free(stat_cache);
++}
++
+ void
+ init_manpath () {
+ static int done = 0;
+@@ -391,6 +431,7 @@
+ (manp = getenv ("MANPATH")) == NULL)
+ manp = ""; /* default path */
+ split (manp, to_mandirlist, 0);
++ trim_symlinked_manpaths ();
+ done = 1;
+ }
+ }
diff --git a/sys-apps/man/files/man-1.6e-headers.patch b/sys-apps/man/files/man-1.6e-headers.patch
new file mode 100644
index 00000000..9c6fd6f4
--- /dev/null
+++ b/sys-apps/man/files/man-1.6e-headers.patch
@@ -0,0 +1,13 @@
+--- gencat/genlib.c
++++ gencat/genlib.c
+@@ -49,10 +49,8 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
+-#ifdef SYSV
+ #include <sys/types.h>
+ #include <unistd.h>
+-#endif
+
+ #if !defined(__linux__) && !defined(__FreeBSD__)
+ #include <memory.h>
diff --git a/sys-apps/man/files/man-1.6f-makewhatis-compression-cleanup.patch b/sys-apps/man/files/man-1.6f-makewhatis-compression-cleanup.patch
new file mode 100644
index 00000000..a7d74c32
--- /dev/null
+++ b/sys-apps/man/files/man-1.6f-makewhatis-compression-cleanup.patch
@@ -0,0 +1,69 @@
+http://bugs.gentoo.org/331979
+
+patch by William Throwe <wthrowe@mit.edu>
+
+The problem is that a failed match() resets the RSTART variable used to
+extract filename_no_gz (visible in the trailing context of the patch),
+so it is important that no more match() commands are attempted after the
+successful one. Without the scoping, if (for example) the test for .bz2
+succeeds, it prevents testing for .lzma, but doesn't prevent testing for
+.xz. The failing .xz test causes RSTART to be set to zero so
+filename_no_gz becomes the empty string.
+
+--- man-1.6f/src/makewhatis.sh
++++ man-1.6f/src/makewhatis.sh
+@@ -234,7 +234,7 @@
+ find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK '
+
+ function readline() {
+- if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
++ if (use_compression) {
+ result = (pipe_cmd | getline);
+ if (result < 0) {
+ print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr";
+@@ -249,7 +249,7 @@
+ }
+
+ function closeline() {
+- if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
++ if (use_compression) {
+ return close(pipe_cmd);
+ } else {
+ return close(filename);
+@@ -263,16 +263,20 @@
+ if (verbose) {
+ print "adding " filename > "/dev/stderr"
+ }
+-
++
+ use_zcat = match(filename,"\\.Z$") ||
+ match(filename,"\\.z$") || match(filename,"\\.gz$");
+- if (!use_zcat)
++ if (!use_zcat) {
+ use_bzcat = match(filename,"\\.bz2");
+- if(!use_bzcat)
+- use_lzcat = match(filename,"\\.lzma");
+- if(!use_lzcat)
+- use_xzcat = match(filename,"\\.xz");
+- if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
++ if (!use_bzcat) {
++ use_lzcat = match(filename,"\\.lzma");
++ if (!use_lzcat) {
++ use_xzcat = match(filename,"\\.xz");
++ }
++ }
++ }
++ use_compression = (use_zcat || use_bzcat || use_lzcat || use_xzcat);
++ if (use_compression) {
+ filename_no_gz = substr(filename, 0, RSTART - 1);
+ } else {
+ filename_no_gz = filename;
+@@ -285,7 +289,7 @@
+ actual_section = section;
+ }
+ sub(/\..*/, "", progname);
+- if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
++ if (use_compression) {
+ if (use_zcat) {
+ pipe_cmd = "zcat \"" filename "\"";
+ } else if (use_bzcat) {
diff --git a/sys-apps/man/files/man-1.6f-man2html-compression-2.patch b/sys-apps/man/files/man-1.6f-man2html-compression-2.patch
new file mode 100644
index 00000000..b79b3a18
--- /dev/null
+++ b/sys-apps/man/files/man-1.6f-man2html-compression-2.patch
@@ -0,0 +1,61 @@
+add support for bzip2/lzma to man2html and friends
+
+--- man2html/glimpse_filters
++++ man2html/glimpse_filters
+@@ -1,3 +1,6 @@
++*.bz2 bzip2 -d -c
++*.lzma lzma -d -c
++*.xz xz -d -c
+ *.gz gzip -d -c
+ *.Z gzip -d -c
+
+--- man2html/scripts/cgi-bin/man/man2html
++++ man2html/scripts/cgi-bin/man/man2html
+@@ -93,6 +93,12 @@
+ *.bz2)
+ bzcat "$PAGE" | "$MAN2HTML" "$LL" -D "$PAGE"
+ ;;
++ *.lzma)
++ lzcat "$PAGE" | "$MAN2HTML" "$LL" -D "$PAGE"
++ ;;
++ *.xz)
++ xzcat "$PAGE" | "$MAN2HTML" "$LL" -D "$PAGE"
++ ;;
+ *)
+ "$MAN2HTML" "$LL" "$PAGE"
+ ;;
+@@ -103,6 +106,12 @@
+ elif [ -r "$PAGE".bz2 ]
+ then
+ bzcat "$PAGE".bz2 | "$MAN2HTML" "$LL" -D "$PAGE"
++elif [ -r "$PAGE".lzma ]
++then
++ lzcat "$PAGE".lzma | "$MAN2HTML" "$LL" -D "$PAGE"
++elif [ -r "$PAGE".xz ]
++then
++ xzcat "$PAGE".xz | "$MAN2HTML" "$LL" -D "$PAGE"
+ else
+ "$MAN2HTML" -E "Strange... Cannot find (or read) $PAGE."
+ fi
+--- man2html/scripts/cgi-bin/man/mansearch
++++ man2html/scripts/cgi-bin/man/mansearch
+@@ -153,7 +153,7 @@
+ }
+ print "<DT> <a href=\"" cgipath "/man2html?" fullname "\">";
+ textname = filename;
+- sub(/\.(gz)|Z|z$/, "", textname);
++ sub(/\.([zZ]|gz|bz2|lzma|xz)$/, "", textname);
+ sub(/\./, "(", textname);
+ textname = textname ")";
+ print textname;
+--- man2html/scripts/cgi-bin/man/mansec
++++ man2html/scripts/cgi-bin/man/mansec
+@@ -128,7 +128,7 @@
+ # Print out alphabetic quick index and other links
+ }
+ # Split page.n into "page" and "n" and generate an entry
+- sub(/[.]([zZ]|(gz))$/, "", manpage);
++ sub(/[.]([zZ]|gz|bz2|lzma|xz)$/, "", manpage);
+ match(manpage, /[.][^.]+$/);
+ title = substr(manpage, 1, RSTART - 1);
+ if (section != "all") {
diff --git a/sys-apps/man/files/man-1.6f-parallel-build.patch b/sys-apps/man/files/man-1.6f-parallel-build.patch
new file mode 100644
index 00000000..41918d92
--- /dev/null
+++ b/sys-apps/man/files/man-1.6f-parallel-build.patch
@@ -0,0 +1,78 @@
+http://bugs.gentoo.org/207148
+
+patch by Kevin Pyle to fix parallel build issues
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -42,9 +42,12 @@
+ makemsg:
+ $(BUILD_CC) -o makemsg makemsg.c
+
+-msg.c gripedefs.h: ../msgs/mess.en makemsg
++gripedefs.h: ../msgs/mess.en makemsg
+ ./makemsg ../msgs/mess.en gripedefs.h msg.c
+
++# avoid parallel build issues with makemsg
++msg.c: gripedefs.h
++
+ # glob.c does not have prototypes
+ glob.o: glob.c ndir.h
+ $(CC) -c $(CWARNNP) $(CFLAGS) -I. $(DEFS) glob.c
+
+http://bugs.gentoo.org/258916
+
+avoid:
+ make[2]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule.
+
+--- a/man/Makefile.in
++++ b/man/Makefile.in
+@@ -3,7 +3,7 @@
+ MAN5 = man.conf
+ MAN8 = makewhatis
+ ALL = man.1 whatis.1 apropos.1 man.conf.5
+-MAYBE8 = makewhatis
++MAYBE8 = $(wildcard makewhatis.man)
+
+ .SUFFIXES: .man .1 .5 .8
+
+@@ -21,9 +21,7 @@
+ # Where to put the manual pages.
+ mandir = $(DESTDIR)$(PREFIX)@mandir@$(SLANG)
+
+-all: $(ALL)
+- for i in $(MAYBE8); \
+- do if test -f $$i.man; then make -f ../Makefile $$i.8; fi; done
++all: $(ALL) $(MAYBE8:.man=.8)
+
+ install: $(ALL)
+ mkdir -p $(mandir)/man1 $(mandir)/man5 $(mandir)/man8
+@@ -39,18 +37,17 @@
+
+ spotless:
+
+-subdirs:
+- @for i in @languages@; do if test -d $$i; then echo; \
+- echo "==== Making the `cat $$i.txt` man pages. ===="; \
+- cd $$i; make -f ../Makefile; cd ..; \
+- else echo "==== No $$i man pages found. ===="; fi; done
+-
+-installsubdirs:
+- @for i in @languages@; do if test -d $$i; then echo; \
+- echo "==== Installing the `cat $$i.txt` man pages. ===="; \
+- cd $$i; SLANG=/$$i; if test $$SLANG = /en; then SLANG= ; fi; \
+- export SLANG; make -f ../Makefile install; cd ..; \
+- else echo "==== No $$i man pages found. ===="; fi; done
++MAN_LANGS = $(wildcard @languages@)
++subdirs: $(MAN_LANGS:=_lang_subdir)
++%_lang_subdir:
++ @echo "==== Making the `cat $(@:_lang_subdir=).txt` man pages. ===="
++ $(MAKE) -f ../Makefile -C $(@:_lang_subdir=)
++
++installsubdirs: $(MAN_LANGS:=_lang_installsubdir)
++%_lang_installsubdir:
++ @echo "==== Making the `cat $(@:_lang_installsubdir=).txt` man pages. ===="
++ $(MAKE) -f ../Makefile -C $(@:_lang_installsubdir=) install \
++ SLANG=`s=$(@:_lang_installsubdir=); test $$s = en || echo /$$s`
+
+ cleansubdirs:
+ @for i in ??; do cd $$i; make -f ../Makefile clean; cd ..; done
diff --git a/sys-apps/man/files/man-1.6f-so-search-2.patch b/sys-apps/man/files/man-1.6f-so-search-2.patch
new file mode 100644
index 00000000..ac42c8df
--- /dev/null
+++ b/sys-apps/man/files/man-1.6f-so-search-2.patch
@@ -0,0 +1,34 @@
+improve the uncompressed .so search
+
+--- a/src/man.c
++++ b/src/man.c
+@@ -381,13 +381,23 @@ again:
+ }
+ /*
+ * Some people have compressed man pages, but uncompressed
+- * .so files - we could glob for all possible extensions,
+- * for now: only try .gz
++ * .so files - we should discover this list dynamically, but
++ * for now just hardcode it.
+ */
+- else if (fp == NULL && get_expander(".gz") &&
+- strlen(name)+strlen(".gz") < BUFSIZE) {
+- strcat(name, ".gz");
+- fp = fopen (name, "r");
++ else if (fp == NULL) {
++#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
++ size_t i, name_len = strlen(name);
++ const char *extensions[] = { ".gz", ".bz2", ".lzma", ".xz", ".z", ".Z" };
++ for (i = 0; i < ARRAY_SIZE(extensions); ++i) {
++ const char *comp = extensions[i];
++ name[name_len] = '\0';
++ if (get_expander(comp) && name_len+strlen(comp) < BUFSIZE) {
++ strcat(name, comp);
++ fp = fopen(name, "r");
++ if (fp)
++ break;
++ }
++ }
+ }
+
+ if (fp == NULL) {
diff --git a/sys-apps/man/files/man-1.6f-unicode.patch b/sys-apps/man/files/man-1.6f-unicode.patch
new file mode 100644
index 00000000..89d3821d
--- /dev/null
+++ b/sys-apps/man/files/man-1.6f-unicode.patch
@@ -0,0 +1,28 @@
+let the active locale work its magic
+
+http://bugs.gentoo.org/146315
+
+--- man-1.6f/configure
++++ man-1.6f/configure
+@@ -473,9 +473,9 @@
+ then
+ if test $Fnroff = "missing"
+ then
+- nroff="nroff -Tlatin1 -mandoc"
++ nroff="nroff -Tascii -c -mandoc"
+ else
+- nroff="$Fnroff -Tlatin1 -mandoc"
++ nroff="$Fnroff -mandoc"
+ fi
+ troff="troff -mandoc"
+ echo "Warning: could not find groff"
+@@ -484,7 +484,7 @@
+ then
+ nroff="$Fgroff -Tlatin1 -mandoc"
+ else
+- nroff="$Fnroff -Tlatin1 -mandoc"
++ nroff="$Fnroff -mandoc"
+ fi
+ troff="$Fgroff -Tps -mandoc"
+ jnroff="$Fgroff -Tnippon -mandocj"
+
diff --git a/sys-apps/man/files/man-1.6g-compress.patch b/sys-apps/man/files/man-1.6g-compress.patch
new file mode 100644
index 00000000..374d8073
--- /dev/null
+++ b/sys-apps/man/files/man-1.6g-compress.patch
@@ -0,0 +1,17 @@
+allow selection of default cache compressor
+
+http://bugs.gentoo.org/205147
+
+--- configure
++++ configure
+@@ -1012,6 +1012,10 @@
+ done
+ done
+
++ if [ x$COMPRESS != x ]; then
++ compress=$COMPRESS
++ fi
++
+ if [ x$default = x ]; then
+ echo ""
+ echo "What program should be used to compress the formatted pages?"
diff --git a/sys-apps/man/files/man-1.6g-echo-escape.patch b/sys-apps/man/files/man-1.6g-echo-escape.patch
new file mode 100644
index 00000000..96e950a5
--- /dev/null
+++ b/sys-apps/man/files/man-1.6g-echo-escape.patch
@@ -0,0 +1,15 @@
+avoid using escape sequences in echo as they're not portable
+
+https://bugs.gentoo.org/523874
+
+--- a/src/man.c
++++ b/src/man.c
+@@ -626,7 +626,7 @@ make_roff_command (const char *path, const char *file) {
+ the current position plus 10 lines. This plus setpl()
+ gives us a single page that just contains the whole
+ man page. (William Webber, wew@cs.rmit.edu.au) */
+- strcat(buft, "; echo \".\\\\\\\"\"; echo \".pl \\n(nlu+10\"");
++ strcat(buft, "; echo \".\\\\\\\"\"; echo \".pl \"; echo \"(nlu+10\"");
+ #if 0
+ /* In case this doesnt work for some reason,
+ michaelkjohnson suggests: I've got a simple
diff --git a/sys-apps/man/files/man-1.6g-fbsd.patch b/sys-apps/man/files/man-1.6g-fbsd.patch
new file mode 100644
index 00000000..ef01a6e0
--- /dev/null
+++ b/sys-apps/man/files/man-1.6g-fbsd.patch
@@ -0,0 +1,15 @@
+Fixes compilation in FreeBSD
+
+http://bugs.gentoo.org/138123
+
+--- man-1.6g/gencat/genlib.c
++++ man-1.6g/gencat/genlib.c
+@@ -54,7 +54,7 @@
+ #include <unistd.h>
+ #endif
+
+-#if !defined(__linux__) && !defined(__CYGWIN__)
++#if !defined(__linux__) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
+ #include <memory.h>
+ static int bcopy(src, dst, length)
+ char *src, *dst;
diff --git a/sys-apps/man/files/man-1.6g-xz.patch b/sys-apps/man/files/man-1.6g-xz.patch
new file mode 100644
index 00000000..fcf91f71
--- /dev/null
+++ b/sys-apps/man/files/man-1.6g-xz.patch
@@ -0,0 +1,53 @@
+add support for xz
+
+http://bugs.gentoo.org/302380
+
+--- a/src/makewhatis.sh
++++ b/src/makewhatis.sh
+@@ -230,7 +230,7 @@
+ find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK '
+
+ function readline() {
+- if (use_zcat || use_bzcat || use_lzcat) {
++ if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
+ result = (pipe_cmd | getline);
+ if (result < 0) {
+ print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr";
+@@ -245,7 +245,7 @@
+ }
+
+ function closeline() {
+- if (use_zcat || use_bzcat || use_lzcat) {
++ if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
+ return close(pipe_cmd);
+ } else {
+ return close(filename);
+@@ -266,7 +266,9 @@
+ use_bzcat = match(filename,"\\.bz2");
+ if(!use_bzcat)
+ use_lzcat = match(filename,"\\.lzma");
+- if (use_zcat || use_bzcat || use_lzcat ) {
++ if(!use_lzcat)
++ use_xzcat = match(filename,"\\.xz");
++ if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
+ filename_no_gz = substr(filename, 0, RSTART - 1);
+ } else {
+ filename_no_gz = filename;
+@@ -279,13 +281,15 @@
+ actual_section = section;
+ }
+ sub(/\..*/, "", progname);
+- if (use_zcat || use_bzcat || use_lzcat) {
++ if (use_zcat || use_bzcat || use_lzcat || use_xzcat) {
+ if (use_zcat) {
+ pipe_cmd = "zcat \"" filename "\"";
+ } else if (use_bzcat) {
+ pipe_cmd = "bzcat \"" filename "\"";
+- } else {
++ } else if (use_lzcat) {
+ pipe_cmd = "lzcat \"" filename "\"";
++ } else {
++ pipe_cmd = "xzcat \"" filename "\"";
+ }
+ # try to avoid suspicious stuff
+ if (filename ~ /[;&|`$(]/) {
diff --git a/sys-apps/man/man-1.6g-r1.ebuild b/sys-apps/man/man-1.6g-r1.ebuild
new file mode 100644
index 00000000..ef5fe5e7
--- /dev/null
+++ b/sys-apps/man/man-1.6g-r1.ebuild
@@ -0,0 +1,152 @@
+# Copyright 1999-2020 Martin V\"ath and Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit eutils prefix toolchain-funcs user
+
+DESCRIPTION="Standard commands to read man pages"
+HOMEPAGE="http://primates.ximian.com/~flucifredi/man/"
+SRC_URI="http://primates.ximian.com/~flucifredi/man/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="cache +lzma nls selinux"
+
+DEPEND="nls? ( sys-devel/gettext )"
+RDEPEND=">=sys-apps/groff-1.19.2-r1
+ !sys-apps/man-db
+ !<app-arch/lzma-4.63
+ lzma? ( app-arch/xz-utils )
+ selinux? ( sec-policy/selinux-makewhatis )"
+
+pkg_setup() {
+ enewgroup man 15
+ enewuser man 13 -1 /usr/share/man man
+}
+
+src_prepare() {
+ eapply -p0 "${FILESDIR}"/man-1.6f-man2html-compression-2.patch
+ eapply -p0 "${FILESDIR}"/man-1.6-cross-compile.patch
+ eapply "${FILESDIR}"/man-1.6f-unicode.patch #146315
+ eapply "${FILESDIR}"/man-1.6c-cut-duplicate-manpaths.patch
+ eapply "${FILESDIR}"/man-1.5m2-apropos.patch
+ eapply "${FILESDIR}"/man-1.6g-fbsd.patch #138123
+ eapply -p0 "${FILESDIR}"/man-1.6e-headers.patch
+ eapply "${FILESDIR}"/man-1.6f-so-search-2.patch
+ eapply -p0 "${FILESDIR}"/man-1.6g-compress.patch #205147
+ eapply "${FILESDIR}"/man-1.6f-parallel-build.patch #207148 #258916
+ eapply "${FILESDIR}"/man-1.6g-xz.patch #302380
+ eapply "${FILESDIR}"/man-1.6f-makewhatis-compression-cleanup.patch #331979
+ eapply "${FILESDIR}"/man-1.6g-echo-escape.patch #523874
+ # make sure `less` handles escape sequences #287183
+ sed -i -e '/^DEFAULTLESSOPT=/s:"$:R":' configure
+ default
+}
+
+echoit() { echo "$@" ; "$@" ; }
+src_configure() {
+ local mylang=
+ strip-linguas $(eval $(grep ^LANGUAGES= configure) ; echo ${LANGUAGES//,/ })
+
+ unset NLSPATH #175258
+
+ tc-export CC BUILD_CC
+
+ if use nls ; then
+ if [[ -z ${LINGUAS} ]] ; then
+ mylang="all"
+ else
+ mylang="${LINGUAS// /,}"
+ fi
+ else
+ mylang="none"
+ fi
+ export COMPRESS
+ if use lzma ; then
+ COMPRESS="${EPREFIX}"/usr/bin/xz
+ else
+ COMPRESS="${EPREFIX}"/bin/bzip2
+ fi
+
+ if [[ -n ${EPREFIX} ]]; then
+ hprefixify configure || die
+ sed -i \
+ -e "s/man_user=root/man_user=$(id -u)/" \
+ -e "s/man_group=man/man_group=$(id -g)/" \
+ configure || die "Failed to disable suid/sgid options for man"
+ sed -i -e 's:/usr/bin:@bindir@:' man2html/Makefile.in || die
+ fi
+
+ echoit \
+ ./configure \
+ -bindir="${EPREFIX}"/usr/bin \
+ -confdir="${EPREFIX}"/etc \
+ +sgid +fhs \
+ +lang ${mylang} \
+ || die "configure failed"
+}
+
+src_install() {
+ unset NLSPATH #175258
+
+ emake PREFIX="${ED}" install || die "make install failed"
+ dosym man /usr/bin/manpath
+
+ dodoc LSM README* TODO
+
+ # makewhatis only adds man-pages from the last 24hrs
+ exeinto /etc/cron.daily
+ newexe "${FILESDIR}"/makewhatis.cron makewhatis
+
+ keepdir /var/cache/man
+ [[ -z ${EPREFIX} ]] && diropts -m0775 -g man
+ local mansects=$(grep ^MANSECT "${ED}"/etc/man.conf | cut -f2-)
+ for x in ${mansects//:/ } ; do
+ keepdir /var/cache/man/cat${x}
+ done
+}
+
+pkg_postinst() {
+ local files f i
+ einfo "Forcing sane permissions onto ${ROOT}/var/cache/man (Bug #40322)"
+ if use cache ; then
+ chown -R root:man "${EROOT}"/var/cache/man
+ chmod -R g+w "${EROOT}"/var/cache/man
+ [[ -e ${EROOT}/var/cache/man/whatis ]] \
+ && chown root:0 "${EROOT}"/var/cache/man/whatis
+ elif test -d "${EROOT}"/var/cache/man ; then
+ rm -rfv -- "${EROOT}"/var/cache/man
+ fi
+
+ echo
+
+ for f in "${EROOT}"/etc/cron.{daily,weekly}/makewhatis{,.cron} ; do
+ case ${f} in
+ */etc/cron.daily/makewhatis)
+ continue;;
+ esac
+ test -r "${f}" || continue
+ case $(md5sum -- "${f}") in
+ "8b2016cc778ed4e2570b912c0f420266 "*)
+ rm -f -- "${f}";;
+ esac
+ done
+ files=
+ i=false
+ for f in "${EROOT}"/etc/cron.{daily,weekly}/makewhatis{,.cron} ; do
+ test -r "${f}" || continue
+ if [ -z "${files}" ] ; then
+ files=${f}
+ else
+ files="${files} ${f}"
+ i=:
+ fi
+ done
+ if ${i} ; then
+ ewarn "You have multiple makewhatis cron files installed."
+ ewarn "You might want to delete all but one of these:"
+ ewarn "${files}"
+ fi
+}
diff --git a/sys-apps/man/metadata.xml b/sys-apps/man/metadata.xml
new file mode 100644
index 00000000..901f1d3b
--- /dev/null
+++ b/sys-apps/man/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="person">
+ <email>martin@mvath.de</email>
+ <name>Martin Väth</name>
+</maintainer>
+<use>
+<flag name="cache">Use cache directory. Superfluous on modern machines</flag>
+</use>
+</pkgmetadata>
diff --git a/virtual/man/man-0-r3.ebuild b/virtual/man/man-0-r3.ebuild
new file mode 100644
index 00000000..de8ed011
--- /dev/null
+++ b/virtual/man/man-0-r3.ebuild
@@ -0,0 +1,18 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="Virtual for man"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+HOMEPAGE=
+SRC_URI=
+LICENSE=
+IUSE=
+
+RDEPEND="
+ || (
+ sys-apps/man
+ sys-apps/man-db
+ )"
diff --git a/virtual/man/metadata.xml b/virtual/man/metadata.xml
new file mode 100644
index 00000000..56c12441
--- /dev/null
+++ b/virtual/man/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="project">
+ <email>base-system@gentoo.org</email>
+ <name>Gentoo Base System</name>
+</maintainer>
+</pkgmetadata>