instead of setuid man, how about this? a number of people got back to me,
so i know i'm not the only one irked by the fact that packages don't have
cat pages. probably a better way to solve this problem is to make them
before the package is created.
this diff isn't complete, because i don't know enough about how the
packaging code works. i think this is about the right place to create the
man pages. i think my tree's a little behind, the bsd.port.mk chunk goes
near the end of FAKE_COOKIE.
marc, is something like this doable?
Index: infrastructure/mk/bsd.port.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
retrieving revision 1.893
diff -u -r1.893 bsd.port.mk
--- infrastructure/mk/bsd.port.mk 1 May 2007 17:17:54 -0000 1.893
+++ infrastructure/mk/bsd.port.mk 15 May 2007 05:58:42 -0000
@@ -2159,6 +2159,7 @@
.if target(post-install)
@cd ${.CURDIR} && exec ${SUDO} ${_SYSTRACE_CMD} ${MAKE} post-install
${_FAKE_SETUP}
.endif
+ ${PORTSDIR}/infrastructure/package/makeman ${WRKINST}${TRUEPREFIX}/man
.for _p in ${PROTECT_MOUNT_POINTS}
@${SUDO} mount -u -w ${_p}
.endfor
--- /dev/null Mon May 14 23:01:07 2007
+++ infrastructure/package/makeman Mon May 14 23:00:54 2007
@@ -0,0 +1,38 @@
+#! /usr/bin/perl -w
+
+# Copyright (c) 2007 Ted Unangst
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+use strict;
+
+my $base = "/usr/local/man";
+if (defined($ARGV[0])) {
+ $base = $ARGV[0];
+}
+
+my $file;
+foreach my $i (1 .. 9) {
+ my $dirname = "$base/man$i";
+ opendir(DIR, $dirname) or die "can't open dir";
+ while (defined($file = readdir(DIR))) {
+ next if ($file !~ /([[:alnum:]]*)\.$i/);
+ my $man = $1;
+ my $cat = "$base/cat$i/$man.0";
+ if (! -e $cat && -f "$dirname/$file" && -s _ > 64) {
+ system("/usr/bin/nroff -man $dirname/$file > $cat");
+ }
+
+ }
+ closedir(DIR);
+}