Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Dec 2001 16:40:04 -0800 (PST)
From:      Jeremy Norris <ishmael27x@yahoo.com>
To:        freebsd-ports@FreeBSD.org
Subject:   Re: ports/32231: Update port devel/fam
Message-ID:  <200112170040.fBH0e4C80554@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/32231; it has been noted by GNATS.

From: Jeremy Norris <ishmael27x@yahoo.com>
To: FreeBSD-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: ports/32231: Update port devel/fam
Date: Sun, 16 Dec 2001 18:31:47 -0600

 Please use this diff. Updates in this diff include:
 
 Now uses USE_AUTOMAKE_VER=15 and USE_AUTOCONF_VER=213 (note: it is
 USE_AUTOCONF_VER=25 ready when we get that).
 
 Created custom do-configure target, so that we run auto-stuff in a more proper
 order.
 
 Added comments in a few places in Makefile to explain my methods.
 
 Changed tabbing after variable declarations in Makefile to line everything up.
 
 Added patch-fam::Directory.c++ and patch-fam::DirectoryScanner.h to change
 #include <sys/dir.h> -> #include <dirent.h> (sys/dir.h is depracated).
 
 Added patches obtained from Redhat (patch-fam::Interest.c++ and
 patch-fam::NetConnection.c++) that "fixes some of the one second mtime
 resolution races" and "fixes a warning that Kde tends to trigger a lot that can
 fill up your logs".
 
 
 Index: Makefile
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/Makefile,v
 retrieving revision 1.1
 diff -u -r1.1 Makefile
 --- Makefile	31 Mar 2001 02:45:55 -0000	1.1
 +++ Makefile	17 Dec 2001 00:13:48 -0000
 @@ -5,25 +5,91 @@
  # $FreeBSD: ports/devel/fam/Makefile,v 1.1 2001/03/31 02:45:55 will Exp $
  #
  
 -PORTNAME=	fam
 -PORTVERSION=	2.6.4
 -CATEGORIES=	devel
 -MASTER_SITES=	ftp://oss.sgi.com/projects/fam/download/
 -DISTNAME=	${PORTNAME}-oss-${PORTVERSION}
 -
 -MAINTAINER=	ishmael27@home.com
 -
 -USE_AUTOMAKE=	yes
 -USE_LIBTOOL=	yes
 -USE_GMAKE=	yes
 -PATCH_STRIP=	-p1
 -INSTALLS_SHLIB=	yes
 +PORTNAME=		fam
 +PORTVERSION=		2.6.6
 +CATEGORIES=		sysutils
 +MASTER_SITES=		ftp://oss.sgi.com/projects/fam/download/
  
 -MAN1=		fam.1m
 -MAN3=		fam.3x
 +MAINTAINER=		ishmael27x@yahoo.com
 +
 +USE_AUTOCONF_VER=	213
 +USE_AUTOMAKE_VER=	15
 +AUTOMAKE_ARGS=		--add-missing --force-missing --copy --foreign
 +USE_LIBTOOL=		yes
 +EXTRACT_AFTER_ARGS=	| ${TAR} -xf - -C ${WRKSRC}
 +PKGMESSAGE=		${WRKDIR}/.MESSAGE
 +INSTALLS_SHLIB=		yes
 +MAN3=			fam.3
 +MAN8=			fam.8
 +
 +LIBTOOLIZE=		libtoolize
 +LIBTOOLIZE_ARGS=	--force --copy
 +.if exists(/usr/sbin/rpcbind)
 +PORTMAP=		rpcbind
 +.else
 +PORTMAP=		portmap
 +.endif
 +
 +# XXX This and ${EXTRACT_AFTER_ARGS} are needed since tarball doesn't extract
 +#     directly into ${WRKDIR}/fam-2.6.6
 +do-extract:
 +	@${RM} -rf ${WRKDIR}
 +	@${MKDIR} ${WRKSRC}
 +	@for file in ${EXTRACT_ONLY}; do \
 +		if ! (cd ${WRKDIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\
 +		then \
 +			exit 1; \
 +		fi \
 +	done
 +.if !defined(EXTRACT_PRESERVE_OWNERSHIP)
 +	@if [ `id -u` = 0 ]; then \
 +		${CHMOD} -R ug-s ${WRKDIR}; \
 +		${CHOWN} -R 0:0 ${WRKDIR}; \
 +	fi
 +.endif
 +
 +post-patch:
 +	@${MV} ${WRKSRC}/man/fam.1m.in ${WRKSRC}/man/fam.8.in
 +	@${MV} ${WRKSRC}/man/fam.3x ${WRKSRC}/man/fam.3
 +
 +# XXX This seems to be the more preferred order of running things.
 +do-configure:
 +	@(cd ${WRKSRC} && ${LIBTOOLIZE} ${LIBTOOLIZE_ARGS})
 +	@(cd ${WRKSRC} && ${ACLOCAL})
 +	@(cd ${WRKSRC} && ${SETENV} ${AUTOCONF_ENV} ${AUTOCONF} \
 +		${AUTOCONF_ARGS})
 +# XXX This can go away when we get autoconf-2.52 in the ports tree.
 +	@${PERL} -pi -e '\
 +		s|^AUTOCONF=.*|AUTOCONF=\$${AUTOCONF-"\$${am_missing_run}${AUTOCONF}"}| ; \
 +		s|^AUTOHEADER=.*|AUTOHEADER=\$${AUTOHEADER-"\$${am_missing_run}${AUTOHEADER}"}|' \
 +		${WRKSRC}/configure
 +	@(cd ${WRKSRC} && ${AUTOHEADER})
 +	@(cd ${WRKSRC} && ${SETENV} ${AUTOMAKE_ENV} ${AUTOMAKE} \
 +		${AUTOMAKE_ARGS})
 +	@(cd ${WRKSRC} && \
 +		if ! ${SETENV} CC="${CC}" CXX="${CXX}" \
 +	    CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
 +	    INSTALL="/usr/bin/install -c -o ${BINOWN} -g ${BINGRP}" \
 +	    INSTALL_DATA="${INSTALL_DATA}" \
 +	    INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
 +	    INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
 +	    ${CONFIGURE_ENV} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}; then \
 +			${ECHO} "===>  Script \"${CONFIGURE_SCRIPT}\" failed: here are the contents of \"${CONFIGURE_LOG}\""; \
 +			${CAT} ${CONFIGURE_LOG}; \
 +			${ECHO} "(end of \"${CONFIGURE_LOG}\")"; \
 +			${FALSE}; \
 +		fi)
 +
 +post-configure:
 +	@${PERL} -pi -e 's|%%PORTMAP%%|${PORTMAP}|g' ${WRKSRC}/man/fam.8
 +	@${MV} ${WRKSRC}/fam/fam.conf ${WRKSRC}/fam/fam.conf.sample
 +	@${SED} -e 's|%%PORTMAP%%|${PORTMAP}|g' -e 's|%%PREFIX%%|${PREFIX}|g' \
 +		${PKGDIR}/pkg-message >${PKGMESSAGE}
  
  post-install:
 -	@${INSTALL_SCRIPT} -m 751 ${FILESDIR}/fam.sh.sample ${PREFIX}/etc/rc.d/fam.sh.sample
 +	@if [ ! -f ${PREFIX}/etc/fam.conf ]; then \
 +		${CP} -p ${PREFIX}/etc/fam.conf.sample ${PREFIX}/etc/fam.conf; \
 +	fi
  	@${CAT} ${PKGMESSAGE}
  
  .include <bsd.port.mk>
 Index: distinfo
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/distinfo,v
 retrieving revision 1.1
 diff -u -r1.1 distinfo
 --- distinfo	31 Mar 2001 02:45:55 -0000	1.1
 +++ distinfo	23 Nov 2001 14:53:49 -0000
 @@ -1 +1 @@
 -MD5 (fam-oss-2.6.4.tar.gz) = d060919b3d9ede61a8b68eae1ded53ce
 +MD5 (fam-2.6.6.tar.gz) = c1ecf4136b673e49fd0ea7a2e50d9885
 Index: pkg-descr
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/pkg-descr,v
 retrieving revision 1.1
 diff -u -r1.1 pkg-descr
 --- pkg-descr	31 Mar 2001 02:45:55 -0000	1.1
 +++ pkg-descr	16 Dec 2001 17:42:15 -0000
 @@ -1,4 +1,5 @@
 -FAM, the File Alteration Monitor, provides an API which applications can use
 -to be notified when specific files or directories are changed.
 +FAM, the File Alteration Monitor, provides a daemon and an API which
 +applications can use to be notified when specific files or directories are
 +changed.
  
  WWW: http://oss.sgi.com/projects/fam/
 Index: pkg-message
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/pkg-message,v
 retrieving revision 1.1
 diff -u -r1.1 pkg-message
 --- pkg-message	31 Mar 2001 02:45:55 -0000	1.1
 +++ pkg-message	25 Nov 2001 23:13:59 -0000
 @@ -1,8 +1,17 @@
 -************************************************************************
  
 -In order to run this port, please add the following line to /etc/rpc if
 -it is not already there:
 +To run FAM, please check and perform the following:
  
 +1. Be sure that the following line is in /etc/rpc
  sgi_fam		391002
  
 -************************************************************************
 +2. Be sure that %%PORTMAP%%(8) is running.
 +You probably will want to add the following line to /etc/rc.conf
 +portmap_enable="YES"
 +
 +3. Be sure that the following line is in /etc/inetd.conf
 +sgi_fam/1-2	stream rpc/tcp wait root	%%PREFIX%%/sbin/fam	fam
 +
 +4. Be sure that inetd(8) is running.
 +You probably will want to add the following line to /etc/rc.conf
 +inetd_enable="YES"
 +
 Index: pkg-plist
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/pkg-plist,v
 retrieving revision 1.2
 diff -u -r1.2 pkg-plist
 --- pkg-plist	21 May 2001 07:13:05 -0000	1.2
 +++ pkg-plist	26 Nov 2001 00:20:53 -0000
 @@ -1,9 +1,9 @@
 -bin/fam
 -etc/fam.conf
 -etc/rc.d/fam.sh.sample
 +@comment $FreeBSD$
 +@unexec if cmp -s %D/etc/fam.conf %D/etc/fam.conf.sample; then rm -f %D/etc/fam.conf; fi
 +etc/fam.conf.sample
 +@exec if [ ! -f %D/etc/fam.conf ]; then cp -p %D/%F %B/fam.conf; fi
  include/fam.h
 -lib/fam/editconf.perl
  lib/libfam.a
  lib/libfam.so
  lib/libfam.so.0
 -@dirrm lib/fam
 +sbin/fam
 Index: files/fam.sh.sample
 ===================================================================
 RCS file: files/fam.sh.sample
 diff -N files/fam.sh.sample
 --- files/fam.sh.sample	31 Mar 2001 02:45:55 -0000	1.1
 +++ /dev/null	1 Jan 1970 00:00:00 -0000
 @@ -1,20 +0,0 @@
 -#!/bin/sh
 -
 -if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
 -    echo "$0: Cannot determine the PREFIX" >&2
 -    exit 1
 -fi
 -
 -case "$1" in
 -start)
 -	[ -x ${PREFIX}/bin/fam ] && ( ${PREFIX}/bin/fam & ) && echo -n ' fam'
 -	;;
 -stop)
 -	killall fam && echo -n ' fam'
 -	;;
 -*)
 -	echo "Usage: `basename $0` {start|stop}" >&2
 -	;;
 -esac
 -
 -exit 0
 Index: files/patch-Makefile.am
 ===================================================================
 RCS file: /home/ncvs/ports/devel/fam/files/patch-Makefile.am,v
 retrieving revision 1.1
 diff -u -r1.1 patch-Makefile.am
 --- files/patch-Makefile.am	31 Mar 2001 02:45:55 -0000	1.1
 +++ files/patch-Makefile.am	16 Dec 2001 00:32:21 -0000
 @@ -1,33 +1,58 @@
 ---- Makefile.am.orig	Fri May 19 23:46:31 2000
 -+++ Makefile.am	Mon Mar 19 11:51:05 2001
 -@@ -7,30 +7,3 @@
 - rpm: dist
 - 	@cd build && $(MAKE) $(AM_MAKEFLAGS) rpm
 +
 +$FreeBSD$
 +
 +--- Makefile.am.orig	Mon Oct 22 01:33:09 2001
 ++++ Makefile.am	Sun Nov 25 18:46:14 2001
 +@@ -1,6 +1,6 @@
 + include $(top_srcdir)/common.am
   
 --#  We proceed even if these commands fail because this might be an install
 --#  into $DESTDIR by a non-root user.
 +-SUBDIRS = util include support libfam fam man test build
 ++SUBDIRS = include support libfam fam man
 + 
 + EXTRA_DIST = common.am INSTALL.rpm
 + 
 +@@ -9,28 +9,28 @@
 + 
 + #  We proceed even if these commands fail because this might be an install
 + #  into $DESTDIR by a non-root user.
  -install-exec-hook:
  -	-@if test "no$(LDCONFIG)" != "no"; then \
 --##	    echo "Adding $(libdir) to ld.so.conf..."; \
 ++#install-exec-hook:
 ++#	-@if test "no$(LDCONFIG)" != "no"; then \
 + ##	    echo "Adding $(libdir) to ld.so.conf..."; \
  -	    $(EDITCONF) ld.so.conf add $(DESTDIR)$(libdir) $(DESTDIR)$(libdir); \
  -	    exec $(LDCONFIG); \
  -	fi
 --##	@echo "Adding fam to rpc..."
 ++#	    $(EDITCONF) ld.so.conf add $(DESTDIR)$(libdir) $(DESTDIR)$(libdir); \
 ++#	    exec $(LDCONFIG); \
 ++#	fi
 + ##	@echo "Adding fam to rpc..."
  -	-@$(EDITCONF) rpc add 391002 "sgi_fam		391002"
 --##	@echo "Adding fam to inetd.conf..."
 ++#	-@$(EDITCONF) rpc add 391002 "sgi_fam		391002"
 + ##	@echo "Adding fam to inetd.conf..."
  -	-@$(EDITCONF) inetd.conf add '\b(fam|FAM)\b' \
  -	    "#  fam, the File Alteration Monitor, http://oss.sgi.com/projects/fam/" \
  -	    "sgi_fam/1-2 stream rpc/tcp wait root $(DESTDIR)$(bindir)/fam fam"
  -	@echo "Restarting inetd..."
  -	-@killall -HUP inetd
 --
 --#  We don't remove $(libdir) from ld.so.conf here because we don't have
 --#  a way to tell whether we're the ones who added it, and other things
 --#  probably use it as well.
 ++#	-@$(EDITCONF) inetd.conf add '\b(fam|FAM)\b' \
 ++#	    "#  fam, the File Alteration Monitor, http://oss.sgi.com/projects/fam/" \
 ++#	    "sgi_fam/1-2 stream rpc/tcp wait root $(DESTDIR)$(bindir)/fam fam"
 ++#	@echo "Restarting inetd..."
 ++#	-@killall -HUP inetd
 + 
 + #  We don't remove $(libdir) from ld.so.conf here because we don't have
 + #  a way to tell whether we're the ones who added it, and other things
 + #  probably use it as well.
  -uninstall-local:
 --##	@echo "Removing fam from rpc..."
 ++#uninstall-local:
 + ##	@echo "Removing fam from rpc..."
  -	-@$(EDITCONF) rpc remove 391002
 --##	@echo "Removing fam from inetd.conf..."
 ++#	-@$(EDITCONF) rpc remove 391002
 + ##	@echo "Removing fam from inetd.conf..."
  -	-@$(EDITCONF) inetd.conf remove '\b(fam|FAM)\b'
  -	@echo "Restarting inetd..."
  -	-@killall -HUP inetd
 ++#	-@$(EDITCONF) inetd.conf remove '\b(fam|FAM)\b'
 ++#	@echo "Restarting inetd..."
 ++#	-@killall -HUP inetd
 Index: files/patch-acconfig.h
 ===================================================================
 RCS file: files/patch-acconfig.h
 diff -N files/patch-acconfig.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-acconfig.h	16 Dec 2001 00:33:17 -0000
 @@ -0,0 +1,14 @@
 +
 +$FreeBSD$
 +
 +--- acconfig.h.orig	Mon Oct 22 01:33:09 2001
 ++++ acconfig.h	Fri Nov 23 09:54:00 2001
 +@@ -47,6 +47,8 @@
 + **  Otherwise, we'll use MNTTYPE_NFS.  */
 + #undef HAVE_FSID_NFS2
 + 
 ++#undef HAVE_MNTENT_H
 ++
 + /* Define if we have MNTTYPE_NFS2 */
 + #define HAVE_MNTTYPE_NFS2 0
 + 
 Index: files/patch-common.am
 ===================================================================
 RCS file: files/patch-common.am
 diff -N files/patch-common.am
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-common.am	16 Dec 2001 00:33:29 -0000
 @@ -0,0 +1,20 @@
 +
 +$FreeBSD$
 +
 +--- common.am.orig	Mon Oct 22 01:33:09 2001
 ++++ common.am	Fri Dec 14 17:44:24 2001
 +@@ -1,7 +1,7 @@
 + #  Since we're not always using gcc, we don't want to use dependency
 + #  tracking.  (It croaks non-GNU compilers.)  Seems like this should be
 + #  configurable through autoconf!
 +-AUTOMAKE_OPTIONS=no-dependencies
 ++#AUTOMAKE_OPTIONS=no-dependencies
 + 
 + #  why couldn't CONFIG_ETC_CONFIG_PATH be defined in config.h???
 + INCLUDES = @FAMPROTOINC@ -DCONFIG_ETC_CONFIG_PATH=\"@FAM_CONF@\"
 +@@ -10,3 +10,5 @@
 + EDITCONF = perl $(top_srcdir)/util/editconf/editconf.perl
 + 
 + uninstallscriptdir = $(pkglibdir)
 ++
 ++CLEANFILES =
 Index: files/patch-configure.in
 ===================================================================
 RCS file: files/patch-configure.in
 diff -N files/patch-configure.in
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-configure.in	16 Dec 2001 17:17:18 -0000
 @@ -0,0 +1,91 @@
 +
 +$FreeBSD$
 +
 +--- configure.in.orig	Sun Nov  4 23:31:30 2001
 ++++ configure.in	Sun Dec 16 11:16:25 2001
 +@@ -73,7 +73,7 @@
 + fi
 + AC_PROG_CXX
 + AC_PROG_CXXCPP
 +-AC_PROG_RANLIB
 ++dnl AC_PROG_RANLIB
 + 
 + AC_PROG_INSTALL
 + dnl I don't know why, but automake wants to use ./mkinstalldirs.
 +@@ -95,6 +95,8 @@
 + dnl AC_HEADER_SYS_WAIT
 + dnl AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h syslog.h unistd.h)
 + 
 ++AC_CHECK_HEADER(mntent.h, AC_DEFINE(HAVE_MNTENT_H))
 ++
 + dnl
 + dnl  See if imon is available; if so, is it IRIX or Linux?
 + dnl
 +@@ -310,10 +312,10 @@
 + dnl If we don't have MNTTYPE_NFS , we croak.
 + dnl
 + 
 +-FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h))
 +-FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2))
 +-FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3))
 +-FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS))
 ++dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h))
 ++dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2))
 ++dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3))
 ++dnl FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS))
 + 
 + dnl
 + dnl  Test for bindresvport() prototype.
 +@@ -516,8 +518,8 @@
 + 
 + dnl
 + dnl  This grief is for replacing XXX_FAM_CONF with $FAM_CONF
 +-dnl  in the fam(1M) man page.  (Simply putting @FAM_CONF@ in
 +-dnl  fam.1m.in puts the string "$sysconfdir/fam.conf" in the
 ++dnl  in the fam(8) man page.  (Simply putting @FAM_CONF@ in
 ++dnl  fam.8.in puts the string "$sysconfdir/fam.conf" in the
 + dnl  man page, which isn't acceptable.  Isn't there a way to make
 + dnl  autoconf handle this??)
 + dnl
 +@@ -529,7 +531,7 @@
 + [
 +     TMPFILE=configure.tmp
 +     for f in $CONFIG_FILES; do
 +-        if test `basename $f` != 'fam.1m'; then
 ++        if test `basename $f` != 'fam.8'; then
 +             continue
 +         fi
 +         echo "replacing XXX_FAM_CONF with $FAM_CONF and removing maintainer comments in $f"
 +@@ -554,25 +556,25 @@
 + dnl
 + AC_OUTPUT(
 +     Makefile 
 +-    build/Makefile
 +-    build/rpm/Makefile
 +-    build/rpm/rpm.spec
 ++dnl    build/Makefile
 ++dnl    build/rpm/Makefile
 ++dnl    build/rpm/rpm.spec
 +     fam/Makefile
 +     fam/fam.conf
 +     include/Makefile
 +     libfam/Makefile
 +     man/Makefile
 +-    man/fam.1m
 ++    man/fam.8
 +     support/Makefile
 +     test/Makefile
 +-    util/Makefile
 +-    util/editconf/Makefile
 ++dnl    util/Makefile
 ++dnl    util/editconf/Makefile
 + )
 + 
 + dnl 
 + dnl  fam is a good deal less interesting without imon.
 + dnl 
 +-if test "$have_imon" != 'yes'; then
 ++if test `uname` = Linux && "$have_imon" != 'yes'; then
 +     cat << EOF
 + 
 +   ******************************************************************
 Index: files/patch-fam::Client.h
 ===================================================================
 RCS file: files/patch-fam::Client.h
 diff -N files/patch-fam::Client.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Client.h	16 Dec 2001 00:34:15 -0000
 @@ -0,0 +1,13 @@
 +
 +$FreeBSD$
 +
 +--- fam/Client.h.orig	Fri May 19 23:46:31 2000
 ++++ fam/Client.h	Sun Oct  7 15:22:17 2001
 +@@ -23,6 +23,7 @@
 + #ifndef Client_included
 + #define Client_included
 + 
 ++#include <sys/types.h>
 + #include <netinet/in.h>  // for in_addr
 + 
 + #include "Activity.h"
 Index: files/patch-fam::Directory.c++
 ===================================================================
 RCS file: files/patch-fam::Directory.c++
 diff -N files/patch-fam::Directory.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Directory.c++	17 Dec 2001 00:08:54 -0000
 @@ -0,0 +1,16 @@
 +
 +$FreeBSD$
 +
 +--- fam/Directory.c++.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/Directory.c++	Sun Dec 16 18:06:34 2001
 +@@ -26,7 +26,9 @@
 + #include <errno.h>
 + #include <string.h>
 + #include <stdio.h>
 +-#include <sys/dir.h>
 ++#if !defined(__FreeBSD__)
 ++#  include <sys/dir.h>
 ++#endif
 + #include <sys/stat.h>
 + #include <sys/wait.h>
 + #include <unistd.h>
 Index: files/patch-fam::DirectoryScanner.h
 ===================================================================
 RCS file: files/patch-fam::DirectoryScanner.h
 diff -N files/patch-fam::DirectoryScanner.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::DirectoryScanner.h	17 Dec 2001 00:09:02 -0000
 @@ -0,0 +1,19 @@
 +
 +$FreeBSD$
 +
 +--- fam/DirectoryScanner.h.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/DirectoryScanner.h	Sun Dec 16 18:07:45 2001
 +@@ -27,7 +27,12 @@
 + 
 + #include <stddef.h>
 + #include <sys/types.h>
 +-#include <sys/dir.h>
 ++#if defined(__FreeBSD__)
 ++#  include <dirent.h>
 ++#  define direct dirent
 ++#else
 ++#  include <sys/dir.h>
 ++#endif
 + 
 + #include "Event.h"
 + 
 Index: files/patch-fam::FileSystem.c++
 ===================================================================
 RCS file: files/patch-fam::FileSystem.c++
 diff -N files/patch-fam::FileSystem.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::FileSystem.c++	16 Dec 2001 00:34:31 -0000
 @@ -0,0 +1,14 @@
 +
 +$FreeBSD$
 +
 +--- fam/FileSystem.c++.orig	Fri May 19 23:46:31 2000
 ++++ fam/FileSystem.c++	Sun Oct  7 15:22:17 2001
 +@@ -22,7 +22,7 @@
 + 
 + #include "FileSystem.h"
 + 
 +-#include <mntent.h>
 ++#include "mntent.h"
 + #include <string.h>
 + 
 + #include "Event.h"
 Index: files/patch-fam::FileSystemTable.c++
 ===================================================================
 RCS file: files/patch-fam::FileSystemTable.c++
 diff -N files/patch-fam::FileSystemTable.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::FileSystemTable.c++	16 Dec 2001 00:34:49 -0000
 @@ -0,0 +1,28 @@
 +
 +$FreeBSD$
 +
 +--- fam/FileSystemTable.c++.orig	Fri May 19 23:46:31 2000
 ++++ fam/FileSystemTable.c++	Sun Oct  7 15:22:17 2001
 +@@ -21,9 +21,10 @@
 + //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 + 
 + #include <stddef.h>
 ++#include <stdio.h>
 + #include "FileSystemTable.h"
 + 
 +-#include <mntent.h>
 ++#include "mntent.h"
 + #include <stdlib.h>
 + #include <string.h>
 + 
 +@@ -255,7 +256,10 @@
 +     //  create_fs_by_name initializes our "root" member variable.
 +     if (!fs_by_name)
 +     {   create_fs_by_name();
 ++#if !defined(__FreeBSD__)
 ++	/* there is no mtab "file" in freebsd! */
 + 	mtab_watcher = new InternalClient(mtab_name, mtab_event_handler, NULL);
 ++#endif
 +     }
 + 
 +     cr.become_user();
 Index: files/patch-fam::IMon.c++
 ===================================================================
 RCS file: files/patch-fam::IMon.c++
 diff -N files/patch-fam::IMon.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::IMon.c++	16 Dec 2001 00:35:04 -0000
 @@ -0,0 +1,16 @@
 +
 +$FreeBSD$
 +
 +--- fam/IMon.c++.orig	Fri May 19 23:46:31 2000
 ++++ fam/IMon.c++	Sun Oct  7 15:22:17 2001
 +@@ -34,7 +34,9 @@
 + #endif
 + #endif
 + 
 +-#include <sys/sysmacros.h>
 ++#if !defined(__FreeBSD__)
 ++#  include <sys/sysmacros.h>
 ++#endif
 + #include <unistd.h>
 + 
 + #include "Interest.h"
 Index: files/patch-fam::Interest.c++
 ===================================================================
 RCS file: files/patch-fam::Interest.c++
 diff -N files/patch-fam::Interest.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Interest.c++	16 Dec 2001 00:36:07 -0000
 @@ -0,0 +1,35 @@
 +
 +$FreeBSD$
 +
 +--- fam/Interest.c++.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/Interest.c++	Fri Dec 14 17:40:52 2001
 +@@ -25,7 +25,9 @@
 + #include <string.h>
 + #include <errno.h>
 + #include <sys/param.h>
 +-#include <sys/sysmacros.h>
 ++#if !defined(__FreeBSD__)
 ++#  include <sys/sysmacros.h>
 ++#endif
 + 
 + #ifdef HAVE_IRIX_XTAB_VERIFICATION
 + #include <stdio.h>
 +@@ -186,11 +188,16 @@
 +     bool stat_changed = (old_stat.st_ctim.tv_sec != status.st_ctim.tv_sec) ||
 +                         (old_stat.st_ctim.tv_nsec != status.st_ctim.tv_nsec) ||
 +                         (old_stat.st_mtim.tv_sec != status.st_mtim.tv_sec) ||
 +-                        (old_stat.st_mtim.tv_nsec != status.st_mtim.tv_nsec);
 ++                        (old_stat.st_mtim.tv_nsec != status.st_mtim.tv_nsec) ||
 + #else
 +     bool stat_changed = (old_stat.st_ctime != status.st_ctime) ||
 +-                        (old_stat.st_mtime != status.st_mtime);
 ++                        (old_stat.st_mtime != status.st_mtime) ||
 + #endif
 ++                        (old_stat.st_mode != status.st_mode) ||
 ++                        (old_stat.st_uid != status.st_uid) ||
 ++                        (old_stat.st_gid != status.st_gid) ||
 ++                        (old_stat.st_size != status.st_size) ||
 ++                        (old_stat.st_ino != status.st_ino);
 +     old_stat = status;
 + 
 +     //  If dev/ino changed, move this interest to the right hash chain.
 Index: files/patch-fam::InternalClient.c++
 ===================================================================
 RCS file: files/patch-fam::InternalClient.c++
 diff -N files/patch-fam::InternalClient.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::InternalClient.c++	16 Dec 2001 00:36:27 -0000
 @@ -0,0 +1,15 @@
 +
 +$FreeBSD$
 +
 +--- fam/InternalClient.c++.orig	Fri May 19 23:46:31 2000
 ++++ fam/InternalClient.c++	Sun Oct  7 15:22:17 2001
 +@@ -35,8 +35,8 @@
 + {
 +     assert(filename);
 +     assert(h);
 +-    assert(filename[0] == '/');
 +     Log::debug("%s watching %s", name(), filename);
 ++    assert(filename[0] == '/');
 +     interest = new File(filename, this, Request(0), Cred::SuperUser);
 + }
 + 
 Index: files/patch-fam::Listener.c++
 ===================================================================
 RCS file: files/patch-fam::Listener.c++
 diff -N files/patch-fam::Listener.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Listener.c++	16 Dec 2001 00:36:40 -0000
 @@ -0,0 +1,59 @@
 +
 +$FreeBSD$
 +
 +--- fam/Listener.c++.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/Listener.c++	Fri Nov 23 09:52:14 2001
 +@@ -22,6 +22,8 @@
 + 
 + #include "Listener.h"
 + 
 ++#include <stdio.h>
 ++#include <stdlib.h>
 + #include <assert.h>
 + #include <fcntl.h>
 + #include <sys/types.h>
 +@@ -205,7 +207,11 @@
 +     unsetenv("TMPDIR");
 + 
 +     char *tmpfile = tempnam("/tmp", ".fam");
 ++#if defined(__FreeBSD__)
 ++    sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" };
 ++#else
 +     sockaddr_un sun = { AF_UNIX, "" };
 ++#endif
 +     if(strlen(tmpfile) >= (sizeof(sun.sun_path) - 1))
 +     {
 +         Log::error("tmpnam() too long for sun_path (%d >= %d)!",
 +@@ -239,7 +245,7 @@
 +         return;
 +     }
 + 
 +-    if (chown(sun.sun_path, uid, -1) != 0)
 ++    if (chown(sun.sun_path, uid, (gid_t)-1) != 0)
 +     {   Log::perror("localclient chown");
 + 	close(client_sock);
 +         return;
 +@@ -275,7 +281,11 @@
 + 
 +     // Get the new socket.
 + 
 ++#if defined(__FreeBSD__)
 ++    struct sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" };
 ++#else
 +     struct sockaddr_un sun = { AF_UNIX, "" };
 ++#endif
 +     CONFIG_SOCKLEN_T sunlen = sizeof(sun);
 +     int client_fd = accept(ofd, (struct sockaddr *) &sun, &sunlen);
 +     if (client_fd < 0)
 +@@ -337,7 +347,11 @@
 + void
 + Listener::dirty_ugly_hack()
 + {
 ++#if defined(__FreeBSD__)
 ++    static sockaddr_un sun = { sizeof (sockaddr_un), AF_UNIX, "/tmp/.fam_socket" };
 ++#else
 +     static sockaddr_un sun = { AF_UNIX, "/tmp/.fam_socket" };
 ++#endif
 + 
 +     int sock = socket(PF_UNIX, SOCK_STREAM, 0);
 +     if (sock < 0)
 Index: files/patch-fam::Log.c++
 ===================================================================
 RCS file: files/patch-fam::Log.c++
 diff -N files/patch-fam::Log.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Log.c++	16 Dec 2001 00:36:53 -0000
 @@ -0,0 +1,14 @@
 +
 +$FreeBSD$
 +
 +--- fam/Log.c++.orig	Fri May 19 23:46:31 2000
 ++++ fam/Log.c++	Sun Oct  7 15:22:17 2001
 +@@ -28,6 +28,8 @@
 + #include <stdlib.h>
 + #include <string.h>
 + #include <syslog.h>
 ++#include <sys/time.h>
 ++#include <sys/types.h>
 + #include <sys/resource.h>
 + #include <sys/stat.h>
 + #include <unistd.h>
 Index: files/patch-fam::Makefile.am
 ===================================================================
 RCS file: files/patch-fam::Makefile.am
 diff -N files/patch-fam::Makefile.am
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Makefile.am	16 Dec 2001 00:37:05 -0000
 @@ -0,0 +1,29 @@
 +
 +$FreeBSD$
 +
 +--- fam/Makefile.am.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/Makefile.am	Sat Dec 15 18:13:35 2001
 +@@ -1,7 +1,7 @@
 + include $(top_srcdir)/common.am
 + 
 +-bin_PROGRAMS = fam
 +-sysconf_DATA = fam.conf
 ++sbin_PROGRAMS = fam
 ++sysconf_DATA = fam.conf.sample
 + 
 + fam_SOURCES = \
 +   Activity.c++ \
 +@@ -72,6 +72,7 @@
 +   main.c++ \
 +   timeval.c++ \
 +   timeval.h \
 ++  mntent_compat.c++ \
 +   @IMON_FUNCS@.c++
 + 
 + EXTRA_fam_SOURCES = IMonIrix.c++ IMonLinux.c++ IMonNone.c++
 +@@ -79,4 +80,4 @@
 + fam_LDADD = -lrpcsvc $(top_srcdir)/support/libsupport.a
 + 
 + CLEANFILES += @MKDEPFILE@ ii_files/*.ii
 +-sinclude @MKDEPFILE@
 ++#sinclude @MKDEPFILE@
 Index: files/patch-fam::NetConnection.c++
 ===================================================================
 RCS file: files/patch-fam::NetConnection.c++
 diff -N files/patch-fam::NetConnection.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::NetConnection.c++	16 Dec 2001 00:37:17 -0000
 @@ -0,0 +1,26 @@
 +
 +$FreeBSD$
 +
 +--- fam/NetConnection.c++.orig	Mon Oct 22 01:33:10 2001
 ++++ fam/NetConnection.c++	Fri Dec 14 17:41:01 2001
 +@@ -252,7 +252,19 @@
 +                 assert(ret == omsgList->len);
 +             } else 
 +             {
 +-                Log::error("fd %d write error: %m", fd);
 ++		/* Since the client library can close it's fd before
 ++		 * getting acks from all FAMCancelMonitor requests we
 ++		 * may get a broken pipe error here when writing the ack.
 ++		 * Don't threat this as an error, since that fills the logs
 ++		 * with crap.
 ++		 */
 ++		if (errno == EPIPE)
 ++		{
 ++		    Log::debug("fd %d write error: %m", fd);
 ++		} else
 ++		{
 ++		    Log::error("fd %d write error: %m", fd);
 ++		}
 +                 
 +             }
 +             msgList_t *oldHead = omsgList;
 Index: files/patch-fam::Scheduler.h
 ===================================================================
 RCS file: files/patch-fam::Scheduler.h
 diff -N files/patch-fam::Scheduler.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::Scheduler.h	16 Dec 2001 00:37:41 -0000
 @@ -0,0 +1,13 @@
 +
 +$FreeBSD$
 +
 +--- fam/Scheduler.h.orig	Fri May 19 23:46:32 2000
 ++++ fam/Scheduler.h	Sun Oct  7 15:22:17 2001
 +@@ -24,6 +24,7 @@
 + #define Scheduler_included
 + 
 + #include <sys/time.h>
 ++#include <string.h>
 + 
 + #include "Boolean.h"
 + 
 Index: files/patch-fam::StringTable.h
 ===================================================================
 RCS file: files/patch-fam::StringTable.h
 diff -N files/patch-fam::StringTable.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::StringTable.h	16 Dec 2001 00:37:55 -0000
 @@ -0,0 +1,13 @@
 +
 +$FreeBSD$
 +
 +--- fam/StringTable.h.orig	Fri May 19 23:46:32 2000
 ++++ fam/StringTable.h	Sun Oct  7 15:22:17 2001
 +@@ -25,6 +25,7 @@
 + 
 + #include <assert.h>
 + #include <string.h>
 ++#include "mntent.h"
 + 
 + //  A StringTable maps C strings onto values.  It is a cheap O(n)
 + //  implementation, suitable only for small tables that are
 Index: files/patch-fam::fam.conf.in
 ===================================================================
 RCS file: files/patch-fam::fam.conf.in
 diff -N files/patch-fam::fam.conf.in
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::fam.conf.in	16 Dec 2001 00:38:08 -0000
 @@ -0,0 +1,14 @@
 +
 +$FreeBSD$
 +
 +--- fam/fam.conf.in.orig	Mon Oct 22 01:33:11 2001
 ++++ fam/fam.conf.in	Sun Nov 25 18:23:46 2001
 +@@ -6,7 +6,7 @@
 + #  fam.conf
 + #
 + #  For more information on the configuration options below, see the
 +-#  fam(1M) man page.
 ++#  fam(8) man page.
 + 
 + #
 + #  insecure_compatibility disables authentication.  This causes
 Index: files/patch-fam::mntent.h
 ===================================================================
 RCS file: files/patch-fam::mntent.h
 diff -N files/patch-fam::mntent.h
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::mntent.h	16 Dec 2001 00:38:24 -0000
 @@ -0,0 +1,62 @@
 +
 +$FreeBSD$
 +
 +--- fam/mntent.h.orig	Sun Oct  7 15:22:17 2001
 ++++ fam/mntent.h	Sun Oct  7 15:22:17 2001
 +@@ -0,0 +1,56 @@
 ++/*
 ++ *  mntent
 ++ *  mntent.h - compatability header for FreeBSD
 ++ *
 ++ *  Copyright (c) 2001 David Rufino <daverufino@btinternet.com>
 ++ *  All rights reserved.
 ++ *
 ++ * Redistribution and use in source and binary forms, with or without
 ++ * modification, are permitted provided that the following conditions
 ++ * are met:
 ++ * 1. Redistributions of source code must retain the above copyright
 ++ *    notice, this list of conditions and the following disclaimer.
 ++ * 2. Redistributions in binary form must reproduce the above copyright
 ++ *    notice, this list of conditions and the following disclaimer in the
 ++ *    documentation and/or other materials provided with the distribution.
 ++ *
 ++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ++ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 ++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 ++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 ++ * SUCH DAMAGE.
 ++ */
 ++
 ++#if defined(HAVE_MNTENT_H)
 ++#include <mntent.h>
 ++#else
 ++#ifndef _MNTENT_H
 ++#define _MNTENT_H
 ++#include <stdio.h>
 ++
 ++#define MOUNTED "dummy"
 ++
 ++#define MNTTYPE_NFS "nfs"
 ++
 ++struct mntent {
 ++	char *mnt_fsname;
 ++	char *mnt_dir;
 ++	char *mnt_type;
 ++	char *mnt_opts;
 ++	int mnt_freq;
 ++	int mnt_passno;
 ++};
 ++
 ++#define setmntent(x,y) ((FILE *)0x1)
 ++struct mntent *getmntent __P ((FILE *fp));
 ++char *hasmntopt __P ((const struct mntent *mnt, const char *option));
 ++#define endmntent(x) ((int)1)
 ++
 ++#endif /* _MNTENT_H */
 ++#endif /* HAVE_MNTENT_H */
 Index: files/patch-fam::mntent_compat.c++
 ===================================================================
 RCS file: files/patch-fam::mntent_compat.c++
 diff -N files/patch-fam::mntent_compat.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-fam::mntent_compat.c++	16 Dec 2001 00:38:39 -0000
 @@ -0,0 +1,157 @@
 +
 +$FreeBSD$
 +
 +--- fam/mntent_compat.c++.orig	Sun Oct  7 15:22:17 2001
 ++++ fam/mntent_compat.c++	Sun Oct  7 15:22:17 2001
 +@@ -0,0 +1,151 @@
 ++/*
 ++ * Copyright (c) 1980, 1989, 1993, 1994
 ++ *      The Regents of the University of California.  All rights reserved.
 ++ * Copyright (c) 2001
 ++ *      David Rufino <daverufino@btinternet.com>
 ++ *
 ++ * Redistribution and use in source and binary forms, with or without
 ++ * modification, are permitted provided that the following conditions
 ++ * are met:
 ++ * 1. Redistributions of source code must retain the above copyright
 ++ *    notice, this list of conditions and the following disclaimer.
 ++ * 2. Redistributions in binary form must reproduce the above copyright
 ++ *    notice, this list of conditions and the following disclaimer in the
 ++ *    documentation and/or other materials provided with the distribution.
 ++ * 3. All advertising materials mentioning features or use of this software
 ++ *    must display the following acknowledgement:
 ++ *      This product includes software developed by the University of
 ++ *      California, Berkeley and its contributors.
 ++ * 4. Neither the name of the University nor the names of its contributors
 ++ *    may be used to endorse or promote products derived from this software
 ++ *    without specific prior written permission.
 ++ *
 ++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ++ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 ++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 ++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 ++ * SUCH DAMAGE.
 ++ */
 ++
 ++/* most of this was ripped from the mount(3) source */
 ++
 ++#include "config.h"
 ++#include "mntent.h"
 ++#if !defined(HAVE_MNTENT_H)
 ++#include <stdlib.h>
 ++#include <string.h>
 ++#include <sys/param.h>
 ++#include <sys/ucred.h>
 ++#include <sys/mount.h>
 ++
 ++static int pos = -1;
 ++static int mntsize = -1;
 ++static struct mntent _mntent;
 ++
 ++char *
 ++hasmntopt (const struct mntent *mnt, const char *option)
 ++{
 ++        int found;
 ++        char *opt, *optbuf;
 ++
 ++        optbuf = strdup(mnt->mnt_opts);
 ++        found = 0;
 ++        for (opt = optbuf; (opt = strtok(opt, " ")) != NULL; opt = NULL) {
 ++                if (!strcasecmp(opt, option)) {
 ++			opt = opt - optbuf + mnt->mnt_opts;
 ++			free (optbuf);
 ++			return (opt);
 ++		}
 ++        }
 ++	free (optbuf);
 ++        return (NULL);
 ++}
 ++
 ++static char *
 ++catopt (char *s0, const char *s1)
 ++{
 ++        size_t i;
 ++        char *cp;
 ++
 ++        if (s1 == NULL || *s1 == '\0')
 ++                return s0;
 ++        if (s0 && *s0) {
 ++                i = strlen(s0) + strlen(s1) + 1 + 1;
 ++                if ((cp = (char *)malloc(i)) == NULL)
 ++			return (NULL);
 ++                (void)snprintf(cp, i, "%s %s", s0, s1);
 ++        } else
 ++                cp = strdup(s1);
 ++
 ++        if (s0)
 ++                free(s0);
 ++        return (cp);
 ++}
 ++
 ++
 ++static char *
 ++flags2opts (int flags)
 ++{
 ++        char *res;
 ++        res = NULL;
 ++        res = catopt(res, (flags & MNT_RDONLY) ? "ro" : "rw");
 ++        if (flags & MNT_SYNCHRONOUS)    res = catopt(res, "sync");
 ++        if (flags & MNT_NOEXEC)         res = catopt(res, "noexec");
 ++        if (flags & MNT_NOSUID)         res = catopt(res, "nosuid");
 ++        if (flags & MNT_NODEV)          res = catopt(res, "nodev");
 ++        if (flags & MNT_UNION)          res = catopt(res, "union");
 ++        if (flags & MNT_ASYNC)          res = catopt(res, "async");
 ++        if (flags & MNT_NOATIME)        res = catopt(res, "noatime");
 ++        if (flags & MNT_NOCLUSTERR)     res = catopt(res, "noclusterr");
 ++        if (flags & MNT_NOCLUSTERW)     res = catopt(res, "noclusterw");
 ++        if (flags & MNT_NOSYMFOLLOW)    res = catopt(res, "nosymfollow");
 ++        if (flags & MNT_SUIDDIR)        res = catopt(res, "suiddir");
 ++
 ++        return res;
 ++}
 ++
 ++static struct mntent *
 ++statfs_to_mntent (struct statfs *mntbuf)
 ++{
 ++	static char opts_buf[40], *tmp;
 ++	
 ++	_mntent.mnt_fsname = mntbuf->f_mntfromname;
 ++	_mntent.mnt_dir = mntbuf->f_mntonname;
 ++	_mntent.mnt_type = mntbuf->f_fstypename;
 ++	tmp = flags2opts (mntbuf->f_flags);
 ++	if (tmp) {
 ++		opts_buf[sizeof(opts_buf)-1] = '\0';
 ++		strncpy (opts_buf, tmp, sizeof(opts_buf)-1);
 ++		free (tmp);
 ++	} else {
 ++		*opts_buf = '\0';
 ++	}
 ++	_mntent.mnt_opts = opts_buf;	
 ++	_mntent.mnt_freq = _mntent.mnt_passno = 0;
 ++	return (&_mntent);
 ++}
 ++
 ++struct mntent *
 ++getmntent (FILE *fp)
 ++{
 ++	struct statfs *mntbuf;
 ++
 ++	if (pos == -1 || mntsize == -1)
 ++		mntsize = getmntinfo (&mntbuf, MNT_NOWAIT);
 ++
 ++	++pos;
 ++	if (pos == mntsize) {
 ++		pos = mntsize = -1;
 ++		return (NULL);
 ++	}
 ++
 ++	return (statfs_to_mntent (&mntbuf[pos]));
 ++}
 ++
 ++#endif /* HAVE_MNTENT_H */
 Index: files/patch-freebsd
 ===================================================================
 RCS file: files/patch-freebsd
 diff -N files/patch-freebsd
 --- files/patch-freebsd	31 Mar 2001 02:45:55 -0000	1.1
 +++ /dev/null	1 Jan 1970 00:00:00 -0000
 @@ -1,490 +0,0 @@
 -diff -urN fam-oss-2.6.4/config.h.in fam-oss-2.6.4-freebsd/config.h.in
 ---- fam-oss-2.6.4/config.h.in	Sat May 20 05:50:17 2000
 -+++ fam-oss-2.6.4-freebsd/config.h.in	Sun Mar 18 00:02:38 2001
 -@@ -12,6 +12,8 @@
 - /*  Define if the system has imon and IMONIOC_ ioctl flags.  */
 - #undef HAVE_IMON
 - 
 -+#undef HAVE_MNTENT_H
 -+
 - /*  Define if the system has the struct revokdi and the IMONIOC_REVOKDI
 - **  ioctl flag.  (IRIX 5.3 doesn't.)
 - */
 -diff -urN fam-oss-2.6.4/configure.in fam-oss-2.6.4-freebsd/configure.in
 ---- fam-oss-2.6.4/configure.in	Sat May 20 06:23:17 2000
 -+++ fam-oss-2.6.4-freebsd/configure.in	Sun Mar 18 00:36:29 2001
 -@@ -95,6 +95,8 @@
 - dnl AC_HEADER_SYS_WAIT
 - dnl AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h syslog.h unistd.h)
 - 
 -+AC_CHECK_HEADER(mntent.h, AC_DEFINE(HAVE_MNTENT_H))
 -+
 - dnl
 - dnl  See if imon is available; if so, is it IRIX or Linux?
 - dnl
 -@@ -299,10 +301,10 @@
 - dnl If we don't have MNTTYPE_NFS , we croak.
 - dnl
 - 
 --FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h))
 --FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2))
 --FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3))
 --FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS))
 -+dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h))
 -+dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2))
 -+dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3))
 -+dnl FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS))
 - 
 - dnl
 - dnl  Test for bindresvport() prototype.
 -diff -urN fam-oss-2.6.4/fam/Client.h fam-oss-2.6.4-freebsd/fam/Client.h
 ---- fam-oss-2.6.4/fam/Client.h	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Client.h	Sat Mar 17 00:14:35 2001
 -@@ -23,6 +23,7 @@
 - #ifndef Client_included
 - #define Client_included
 - 
 -+#include <sys/types.h>
 - #include <netinet/in.h>  // for in_addr
 - 
 - #include "Activity.h"
 -diff -urN fam-oss-2.6.4/fam/FileSystem.c++ fam-oss-2.6.4-freebsd/fam/FileSystem.c++
 ---- fam-oss-2.6.4/fam/FileSystem.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/FileSystem.c++	Sat Mar 17 13:18:10 2001
 -@@ -22,7 +22,7 @@
 - 
 - #include "FileSystem.h"
 - 
 --#include <mntent.h>
 -+#include "mntent.h"
 - #include <string.h>
 - 
 - #include "Event.h"
 -diff -urN fam-oss-2.6.4/fam/FileSystemTable.c++ fam-oss-2.6.4-freebsd/fam/FileSystemTable.c++
 ---- fam-oss-2.6.4/fam/FileSystemTable.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/FileSystemTable.c++	Sat Mar 17 23:44:17 2001
 -@@ -21,9 +21,10 @@
 - //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 - 
 - #include <stddef.h>
 -+#include <stdio.h>
 - #include "FileSystemTable.h"
 - 
 --#include <mntent.h>
 -+#include "mntent.h"
 - #include <stdlib.h>
 - #include <string.h>
 - 
 -@@ -255,7 +256,10 @@
 -     //  create_fs_by_name initializes our "root" member variable.
 -     if (!fs_by_name)
 -     {   create_fs_by_name();
 -+#if !defined(__FreeBSD__)
 -+	/* there is no mtab "file" in freebsd! */
 - 	mtab_watcher = new InternalClient(mtab_name, mtab_event_handler, NULL);
 -+#endif
 -     }
 - 
 -     cr.become_user();
 -diff -urN fam-oss-2.6.4/fam/IMon.c++ fam-oss-2.6.4-freebsd/fam/IMon.c++
 ---- fam-oss-2.6.4/fam/IMon.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/IMon.c++	Sat Mar 17 14:06:17 2001
 -@@ -34,7 +34,9 @@
 - #endif
 - #endif
 - 
 --#include <sys/sysmacros.h>
 -+#if !defined(__FreeBSD__)
 -+#  include <sys/sysmacros.h>
 -+#endif
 - #include <unistd.h>
 - 
 - #include "Interest.h"
 -diff -urN fam-oss-2.6.4/fam/Interest.c++ fam-oss-2.6.4-freebsd/fam/Interest.c++
 ---- fam-oss-2.6.4/fam/Interest.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Interest.c++	Sat Mar 17 14:06:37 2001
 -@@ -25,7 +25,9 @@
 - #include <string.h>
 - #include <errno.h>
 - #include <sys/param.h>
 --#include <sys/sysmacros.h>
 -+#if !defined(__FreeBSD__)
 -+#  include <sys/sysmacros.h>
 -+#endif
 - 
 - #ifdef HAVE_IRIX_XTAB_VERIFICATION
 - #include <stdio.h>
 -diff -urN fam-oss-2.6.4/fam/InternalClient.c++ fam-oss-2.6.4-freebsd/fam/InternalClient.c++
 ---- fam-oss-2.6.4/fam/InternalClient.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/InternalClient.c++	Sat Mar 17 23:20:15 2001
 -@@ -35,8 +35,8 @@
 - {
 -     assert(filename);
 -     assert(h);
 --    assert(filename[0] == '/');
 -     Log::debug("%s watching %s", name(), filename);
 -+    assert(filename[0] == '/');
 -     interest = new File(filename, this, Request(0), Cred::SuperUser);
 - }
 - 
 -diff -urN fam-oss-2.6.4/fam/Listener.c++ fam-oss-2.6.4-freebsd/fam/Listener.c++
 ---- fam-oss-2.6.4/fam/Listener.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Listener.c++	Sat Mar 17 14:12:57 2001
 -@@ -22,6 +22,8 @@
 - 
 - #include "Listener.h"
 - 
 -+#include <stdio.h>
 -+#include <stdlib.h>
 - #include <assert.h>
 - #include <fcntl.h>
 - #include <sys/types.h>
 -@@ -202,7 +204,11 @@
 -     //  requested user and pass the name back to the client.
 - 
 -     char *tmpfile = tempnam("/tmp", ".fam");
 -+#if defined(__FreeBSD__)
 -+    sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" };
 -+#else
 -     sockaddr_un sun = { AF_UNIX, "" };
 -+#endif
 -     if(strlen(tmpfile) >= (sizeof(sun.sun_path) - 1))
 -     {
 -         Log::error("tmpnam() too long for sun_path (%d >= %d)!",
 -@@ -235,7 +241,7 @@
 -         return;
 -     }
 - 
 --    if (chown(sun.sun_path, uid, -1) != 0)
 -+    if (chown(sun.sun_path, uid, (gid_t)-1) != 0)
 -     {   Log::perror("localclient chown");
 - 	close(client_sock);
 -         return;
 -@@ -271,7 +277,11 @@
 - 
 -     // Get the new socket.
 - 
 -+#if defined(__FreeBSD__)
 -+    struct sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" };
 -+#else
 -     struct sockaddr_un sun = { AF_UNIX, "" };
 -+#endif
 -     CONFIG_SOCKLEN_T sunlen = sizeof(sun);
 -     int client_fd = accept(ofd, (struct sockaddr *) &sun, &sunlen);
 -     if (client_fd < 0)
 -@@ -333,7 +343,11 @@
 - void
 - Listener::dirty_ugly_hack()
 - {
 -+#if defined(__FreeBSD__)
 -+    static sockaddr_un sun = { sizeof (sockaddr_un), AF_UNIX, "/tmp/.fam_socket" };
 -+#else
 -     static sockaddr_un sun = { AF_UNIX, "/tmp/.fam_socket" };
 -+#endif
 - 
 -     int sock = socket(PF_UNIX, SOCK_STREAM, 0);
 -     if (sock < 0)
 -diff -urN fam-oss-2.6.4/fam/Log.c++ fam-oss-2.6.4-freebsd/fam/Log.c++
 ---- fam-oss-2.6.4/fam/Log.c++	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Log.c++	Sat Mar 17 14:14:31 2001
 -@@ -28,6 +28,8 @@
 - #include <stdlib.h>
 - #include <string.h>
 - #include <syslog.h>
 -+#include <sys/time.h>
 -+#include <sys/types.h>
 - #include <sys/resource.h>
 - #include <sys/stat.h>
 - #include <unistd.h>
 -diff -urN fam-oss-2.6.4/fam/Makefile.am fam-oss-2.6.4-freebsd/fam/Makefile.am
 ---- fam-oss-2.6.4/fam/Makefile.am	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Makefile.am	Sat Mar 17 18:12:17 2001
 -@@ -72,6 +72,7 @@
 -   main.c++ \
 -   timeval.c++ \
 -   timeval.h \
 -+  mntent_compat.c++ \
 -   @IMON_FUNCS@.c++
 - 
 - EXTRA_fam_SOURCES = IMonIrix.c++ IMonLinux.c++ IMonNone.c++
 -diff -urN fam-oss-2.6.4/fam/Scheduler.h fam-oss-2.6.4-freebsd/fam/Scheduler.h
 ---- fam-oss-2.6.4/fam/Scheduler.h	Sat May 20 05:46:32 2000
 -+++ fam-oss-2.6.4-freebsd/fam/Scheduler.h	Sat Mar 17 00:14:04 2001
 -@@ -24,6 +24,7 @@
 - #define Scheduler_included
 - 
 - #include <sys/time.h>
 -+#include <string.h>
 - 
 - #include "Boolean.h"
 - 
 -diff -urN fam-oss-2.6.4/fam/StringTable.h fam-oss-2.6.4-freebsd/fam/StringTable.h
 ---- fam-oss-2.6.4/fam/StringTable.h	Sat May 20 05:46:32 2000
 -+++ fam-oss-2.6.4-freebsd/fam/StringTable.h	Sat Mar 17 18:05:38 2001
 -@@ -25,6 +25,7 @@
 - 
 - #include <assert.h>
 - #include <string.h>
 -+#include "mntent.h"
 - 
 - //  A StringTable maps C strings onto values.  It is a cheap O(n)
 - //  implementation, suitable only for small tables that are
 -diff -urN fam-oss-2.6.4/fam/mntent.h fam-oss-2.6.4-freebsd/fam/mntent.h
 ---- fam-oss-2.6.4/fam/mntent.h	Thu Jan  1 01:00:00 1970
 -+++ fam-oss-2.6.4-freebsd/fam/mntent.h	Sat Mar 17 18:11:08 2001
 -@@ -0,0 +1,56 @@
 -+/*
 -+ *  mntent
 -+ *  mntent.h - compatability header for FreeBSD
 -+ *
 -+ *  Copyright (c) 2001 David Rufino <daverufino@btinternet.com>
 -+ *  All rights reserved.
 -+ *
 -+ * Redistribution and use in source and binary forms, with or without
 -+ * modification, are permitted provided that the following conditions
 -+ * are met:
 -+ * 1. Redistributions of source code must retain the above copyright
 -+ *    notice, this list of conditions and the following disclaimer.
 -+ * 2. Redistributions in binary form must reproduce the above copyright
 -+ *    notice, this list of conditions and the following disclaimer in the
 -+ *    documentation and/or other materials provided with the distribution.
 -+ *
 -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 -+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 -+ * SUCH DAMAGE.
 -+ */
 -+
 -+#if defined(HAVE_MNTENT_H)
 -+#include <mntent.h>
 -+#else
 -+#ifndef _MNTENT_H
 -+#define _MNTENT_H
 -+#include <stdio.h>
 -+
 -+#define MOUNTED "dummy"
 -+
 -+#define MNTTYPE_NFS "nfs"
 -+
 -+struct mntent {
 -+	char *mnt_fsname;
 -+	char *mnt_dir;
 -+	char *mnt_type;
 -+	char *mnt_opts;
 -+	int mnt_freq;
 -+	int mnt_passno;
 -+};
 -+
 -+#define setmntent(x,y) ((FILE *)0x1)
 -+struct mntent *getmntent __P ((FILE *fp));
 -+char *hasmntopt __P ((const struct mntent *mnt, const char *option));
 -+#define endmntent(x) ((int)1)
 -+
 -+#endif /* _MNTENT_H */
 -+#endif /* HAVE_MNTENT_H */
 -diff -urN fam-oss-2.6.4/fam/mntent_compat.c++ fam-oss-2.6.4-freebsd/fam/mntent_compat.c++
 ---- fam-oss-2.6.4/fam/mntent_compat.c++	Thu Jan  1 01:00:00 1970
 -+++ fam-oss-2.6.4-freebsd/fam/mntent_compat.c++	Sat Mar 17 23:48:07 2001
 -@@ -0,0 +1,151 @@
 -+/*
 -+ * Copyright (c) 1980, 1989, 1993, 1994
 -+ *      The Regents of the University of California.  All rights reserved.
 -+ * Copyright (c) 2001
 -+ *      David Rufino <daverufino@btinternet.com>
 -+ *
 -+ * Redistribution and use in source and binary forms, with or without
 -+ * modification, are permitted provided that the following conditions
 -+ * are met:
 -+ * 1. Redistributions of source code must retain the above copyright
 -+ *    notice, this list of conditions and the following disclaimer.
 -+ * 2. Redistributions in binary form must reproduce the above copyright
 -+ *    notice, this list of conditions and the following disclaimer in the
 -+ *    documentation and/or other materials provided with the distribution.
 -+ * 3. All advertising materials mentioning features or use of this software
 -+ *    must display the following acknowledgement:
 -+ *      This product includes software developed by the University of
 -+ *      California, Berkeley and its contributors.
 -+ * 4. Neither the name of the University nor the names of its contributors
 -+ *    may be used to endorse or promote products derived from this software
 -+ *    without specific prior written permission.
 -+ *
 -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 -+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 -+ * SUCH DAMAGE.
 -+ */
 -+
 -+/* most of this was ripped from the mount(3) source */
 -+
 -+#include "config.h"
 -+#include "mntent.h"
 -+#if !defined(HAVE_MNTENT_H)
 -+#include <stdlib.h>
 -+#include <string.h>
 -+#include <sys/param.h>
 -+#include <sys/ucred.h>
 -+#include <sys/mount.h>
 -+
 -+static int pos = -1;
 -+static int mntsize = -1;
 -+static struct mntent _mntent;
 -+
 -+char *
 -+hasmntopt (const struct mntent *mnt, const char *option)
 -+{
 -+        int found;
 -+        char *opt, *optbuf;
 -+
 -+        optbuf = strdup(mnt->mnt_opts);
 -+        found = 0;
 -+        for (opt = optbuf; (opt = strtok(opt, " ")) != NULL; opt = NULL) {
 -+                if (!strcasecmp(opt, option)) {
 -+			opt = opt - optbuf + mnt->mnt_opts;
 -+			free (optbuf);
 -+			return (opt);
 -+		}
 -+        }
 -+	free (optbuf);
 -+        return (NULL);
 -+}
 -+
 -+static char *
 -+catopt (char *s0, const char *s1)
 -+{
 -+        size_t i;
 -+        char *cp;
 -+
 -+        if (s1 == NULL || *s1 == '\0')
 -+                return s0;
 -+        if (s0 && *s0) {
 -+                i = strlen(s0) + strlen(s1) + 1 + 1;
 -+                if ((cp = (char *)malloc(i)) == NULL)
 -+			return (NULL);
 -+                (void)snprintf(cp, i, "%s %s", s0, s1);
 -+        } else
 -+                cp = strdup(s1);
 -+
 -+        if (s0)
 -+                free(s0);
 -+        return (cp);
 -+}
 -+
 -+
 -+static char *
 -+flags2opts (int flags)
 -+{
 -+        char *res;
 -+        res = NULL;
 -+        res = catopt(res, (flags & MNT_RDONLY) ? "ro" : "rw");
 -+        if (flags & MNT_SYNCHRONOUS)    res = catopt(res, "sync");
 -+        if (flags & MNT_NOEXEC)         res = catopt(res, "noexec");
 -+        if (flags & MNT_NOSUID)         res = catopt(res, "nosuid");
 -+        if (flags & MNT_NODEV)          res = catopt(res, "nodev");
 -+        if (flags & MNT_UNION)          res = catopt(res, "union");
 -+        if (flags & MNT_ASYNC)          res = catopt(res, "async");
 -+        if (flags & MNT_NOATIME)        res = catopt(res, "noatime");
 -+        if (flags & MNT_NOCLUSTERR)     res = catopt(res, "noclusterr");
 -+        if (flags & MNT_NOCLUSTERW)     res = catopt(res, "noclusterw");
 -+        if (flags & MNT_NOSYMFOLLOW)    res = catopt(res, "nosymfollow");
 -+        if (flags & MNT_SUIDDIR)        res = catopt(res, "suiddir");
 -+
 -+        return res;
 -+}
 -+
 -+static struct mntent *
 -+statfs_to_mntent (struct statfs *mntbuf)
 -+{
 -+	static char opts_buf[40], *tmp;
 -+	
 -+	_mntent.mnt_fsname = mntbuf->f_mntfromname;
 -+	_mntent.mnt_dir = mntbuf->f_mntonname;
 -+	_mntent.mnt_type = mntbuf->f_fstypename;
 -+	tmp = flags2opts (mntbuf->f_flags);
 -+	if (tmp) {
 -+		opts_buf[sizeof(opts_buf)-1] = '\0';
 -+		strncpy (opts_buf, tmp, sizeof(opts_buf)-1);
 -+		free (tmp);
 -+	} else {
 -+		*opts_buf = '\0';
 -+	}
 -+	_mntent.mnt_opts = opts_buf;	
 -+	_mntent.mnt_freq = _mntent.mnt_passno = 0;
 -+	return (&_mntent);
 -+}
 -+
 -+struct mntent *
 -+getmntent (FILE *fp)
 -+{
 -+	struct statfs *mntbuf;
 -+
 -+	if (pos == -1 || mntsize == -1)
 -+		mntsize = getmntinfo (&mntbuf, MNT_NOWAIT);
 -+
 -+	++pos;
 -+	if (pos == mntsize) {
 -+		pos = mntsize = -1;
 -+		return (NULL);
 -+	}
 -+
 -+	return (statfs_to_mntent (&mntbuf[pos]));
 -+}
 -+
 -+#endif /* HAVE_MNTENT_H */
 -diff -urN fam-oss-2.6.4/libfam/Client.c++ fam-oss-2.6.4-freebsd/libfam/Client.c++
 ---- fam-oss-2.6.4/libfam/Client.c++	Sat May 20 05:46:32 2000
 -+++ fam-oss-2.6.4-freebsd/libfam/Client.c++	Sat Mar 17 00:12:01 2001
 -@@ -20,6 +20,7 @@
 - //  with this program; if not, write the Free Software Foundation, Inc., 59
 - //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 - 
 -+#include <stdio.h>
 - #include <stdlib.h>
 - #include <unistd.h>
 - #include <netinet/in.h>
 -diff -urN fam-oss-2.6.4/libfam/fam.c++ fam-oss-2.6.4-freebsd/libfam/fam.c++
 ---- fam-oss-2.6.4/libfam/fam.c++	Sat May 20 05:46:32 2000
 -+++ fam-oss-2.6.4-freebsd/libfam/fam.c++	Sat Mar 17 00:12:43 2001
 -@@ -21,6 +21,7 @@
 - //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 - 
 - #include <sys/types.h>
 -+#include <rpc/rpc.h>
 - #include <sys/time.h>
 - #include <unistd.h>
 - #include <stdlib.h>
 -diff -urN fam-oss-2.6.4/test/test.c++ fam-oss-2.6.4-freebsd/test/test.c++
 ---- fam-oss-2.6.4/test/test.c++	Sat May 20 05:46:32 2000
 -+++ fam-oss-2.6.4-freebsd/test/test.c++	Sat Mar 17 18:39:23 2001
 -@@ -1,6 +1,7 @@
 - #include <sys/types.h>
 - #include <sys/time.h>
 - #include <stdio.h>
 -+#include <string.h>
 - #include <unistd.h>
 - #include <signal.h>
 - #include <errno.h>
 ---- fam-oss-2.6.4/acconfig.h	Sat May 20 05:46:31 2000
 -+++ fam-oss-2.6.4-freebsd/acconfig.h	Sun Mar 18 00:40:47 2001
 -@@ -44,6 +44,8 @@
 - **  Otherwise, we'll use MNTTYPE_NFS.  */
 - #undef HAVE_FSID_NFS2
 - 
 -+#undef HAVE_MNTENT_H
 -+
 - /* Define if we have MNTTYPE_NFS2 */
 - #define HAVE_MNTTYPE_NFS2 0
 - 
 Index: files/patch-libfam::Client.c++
 ===================================================================
 RCS file: files/patch-libfam::Client.c++
 diff -N files/patch-libfam::Client.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-libfam::Client.c++	16 Dec 2001 00:38:52 -0000
 @@ -0,0 +1,13 @@
 +
 +$FreeBSD$
 +
 +--- libfam/Client.c++.orig	Fri May 19 23:46:32 2000
 ++++ libfam/Client.c++	Sun Oct  7 15:22:17 2001
 +@@ -20,6 +20,7 @@
 + //  with this program; if not, write the Free Software Foundation, Inc., 59
 + //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 + 
 ++#include <stdio.h>
 + #include <stdlib.h>
 + #include <unistd.h>
 + #include <netinet/in.h>
 Index: files/patch-libfam::fam.c++
 ===================================================================
 RCS file: files/patch-libfam::fam.c++
 diff -N files/patch-libfam::fam.c++
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-libfam::fam.c++	16 Dec 2001 00:39:05 -0000
 @@ -0,0 +1,13 @@
 +
 +$FreeBSD$
 +
 +--- libfam/fam.c++.orig	Fri May 19 23:46:32 2000
 ++++ libfam/fam.c++	Sun Oct  7 15:22:17 2001
 +@@ -21,6 +21,7 @@
 + //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
 + 
 + #include <sys/types.h>
 ++#include <rpc/rpc.h>
 + #include <sys/time.h>
 + #include <unistd.h>
 + #include <stdlib.h>
 Index: files/patch-man::Makefile.am
 ===================================================================
 RCS file: files/patch-man::Makefile.am
 diff -N files/patch-man::Makefile.am
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-man::Makefile.am	16 Dec 2001 00:39:22 -0000
 @@ -0,0 +1,15 @@
 +
 +$FreeBSD$
 +
 +--- man/Makefile.am.orig	Mon Oct 22 01:33:11 2001
 ++++ man/Makefile.am	Fri Nov 23 10:49:15 2001
 +@@ -1,5 +1,5 @@
 +-#  This is a little weird because fam.1m is generated from fam.1m.in
 ++#  This is a little weird because fam.8 is generated from fam.8.in
 + #  at the end of the configure script.
 +-man_MANS = fam.1m fam.3x
 +-EXTRA_DIST = fam.1m.in fam.3x
 +-CLEANFILES = fam.1m
 ++man_MANS = fam.8 fam.3
 ++EXTRA_DIST = fam.8.in fam.3
 ++CLEANFILES = fam.8
 Index: files/patch-man::fam.1m.in
 ===================================================================
 RCS file: files/patch-man::fam.1m.in
 diff -N files/patch-man::fam.1m.in
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-man::fam.1m.in	16 Dec 2001 00:39:41 -0000
 @@ -0,0 +1,89 @@
 +
 +$FreeBSD$
 +
 +--- man/fam.1m.in.orig	Mon Oct 22 01:33:11 2001
 ++++ man/fam.1m.in	Sat Dec 15 18:29:50 2001
 +@@ -1,6 +1,6 @@
 +-.\"##  fam.1m.in
 ++.\"##  fam.8.in
 + .\"##
 +-.\"##  When configure.in generates fam.1m, lines starting with .\"##
 ++.\"##  When configure.in generates fam.8, lines starting with .\"##
 + .\"##  should be removed; when building on IRIX, lines starting with
 + .\"##  .\"IRIX should have that part removed (uncommenting the rest
 + .\"##  of the line).
 +@@ -9,13 +9,13 @@
 + .\"##  separate files.
 + .\"##
 + .nr X
 +-.if \nX=0 .ds x} fam 1M "Silicon Graphics" "\&"
 ++.if \nX=0 .ds x} fam 8 "Silicon Graphics" "\&"
 + .TH \*(x}
 + .SH NAME
 + fam \- file alteration monitor
 + .SH SYNOPSIS
 + .nf
 +-\f3/usr/etc/fam\f1 [ \f3\-f\f1 | \f3\-v\f1 | \f3\-d\f1 ] [ \f3\-l\f1 | \c
 ++\f3fam\f1 [ \f3\-f\f1 | \f3\-v\f1 | \f3\-d\f1 ] [ \f3\-l\f1 | \c
 + \f3\-t\f1 \f2NFS_polling_interval\f1 ] 
 + 	[ \f3\-T\f1 \f2idle_timeout\f1 ] [ \f3\-p\f1 \c
 + \f2program\f3.\f2version\f1 ] [ \f3\-L\f1 ] [ \f3-C\f1 ]
 +@@ -24,22 +24,13 @@
 + .SH DESCRIPTION
 + \f2fam\f1 is a server that tracks changes to the filesystem and
 + relays these changes to interested applications.
 +-Applications such as
 +-\f2fm\f1(1G) and \f2mailbox\f1(1) present an up-to-date view of the filesystem.
 +-In the absence of \f2fam\f1, these applications and others like them
 +-are forced to poll the filesystem to detect changes.
 +-\f2fam\f1 is
 +-more efficient.
 +-.P
 + Applications can request \f2fam\f1 to monitor any files or directories in
 + any filesystem.
 + When \f2fam\f1 detects changes to monitored files, it notifies
 + the appropriate application.
 + The FAM API provides a programmatic interface to \f2fam\f1; see
 +-.IR fam (3X).
 ++.IR fam (3).
 + .P
 +-\f2fam\f1 is informed of filesystem changes as they happen by the
 +-kernel through the \f2imon\f1(7M) pseudo device driver.
 + If asked to
 + monitor files on an NFS mounted filesystem, \f2fam\f1 tries to use
 + \f2fam\f1 on the NFS server to monitor files.
 +@@ -47,9 +38,9 @@
 + contact a remote \f2fam\f1, it polls the files instead.
 + \f2fam\f1 also polls special files.
 + .P
 +-Normally, \f2fam\f1 is started by \f2inetd\f1(1M).
 ++Normally, \f2fam\f1 is started by \f2inetd\f1(8).
 + It is registered with
 +-\f2portmap\f1(1M) as performing the sgi_fam service.
 ++\f2%%PORTMAP%%\f1(8) as performing the sgi_fam service.
 + .SH OPTIONS
 + .TP 26
 + \f3\-l\f1
 +@@ -166,8 +157,7 @@
 + \f2Note that fam never opens the files it's monitoring\f1, and cannot
 + be used by a rogue client to read the contents of any file on the system.
 + \f2fam\f1 only gives out the names of monitored files, and only monitors files
 +-which the client can
 +-.IR stat (1M).
 ++which the client can stat.
 + Users can stat a file without having read permission on it as long as
 + they have search permission on the directory containing it.
 + .\"IRIX .SH COMPATIBILITY
 +@@ -196,9 +186,7 @@
 + XXX_FAM_CONF
 + .SH "SEE ALSO"
 + .\"IRIX fm(1G),
 +-inetd(1M),
 ++fam(3),
 ++inetd(8),
 + .\"IRIX mailbox(1),
 +-portmap(1M),
 +-fam(3X),
 +-imon(7M),
 +-stat(1M).
 ++%%PORTMAP%%(8).
 Index: files/patch-man::fam.3x
 ===================================================================
 RCS file: files/patch-man::fam.3x
 diff -N files/patch-man::fam.3x
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-man::fam.3x	16 Dec 2001 00:39:55 -0000
 @@ -0,0 +1,41 @@
 +
 +$FreeBSD$
 +
 +--- man/fam.3x.orig	Mon Oct 22 01:33:11 2001
 ++++ man/fam.3x	Fri Nov 23 10:51:07 2001
 +@@ -1,9 +1,9 @@
 + '\"macro stdmacro
 +-.if n .pH g3x.fam @(#)fam	30.3 of 1/19/86
 ++.if n .pH g3.fam @(#)fam	30.3 of 1/19/86
 + .nr X
 +-.if \nX=0 .ds x} FAM 3X "Specialized Libraries" "\&"
 +-.if \nX=1 .ds x} FAM 3X "Specialized Libraries"
 +-.if \nX=2 .ds x} FAM 3X "" "\&"
 ++.if \nX=0 .ds x} FAM 3 "Specialized Libraries" "\&"
 ++.if \nX=1 .ds x} FAM 3 "Specialized Libraries"
 ++.if \nX=2 .ds x} FAM 3 "" "\&"
 + .if \nX=3 .ds x} FAM "" "" "\&"
 + .TH \*(x}
 + .SH NAME
 +@@ -65,10 +65,9 @@
 + .PP
 + .SH DESCRIPTION
 + \fIFAM\fP monitors files and directories, notifying interested
 +-applications of changes.  Routines for communicating with the fam(1M)
 ++applications of changes.  Routines for communicating with the fam(8)
 + server process are found in ``libfam.a'', which is loaded if the
 +-option ``-lfam'' is used with cc(1) or ld(1).  The library
 +-``libC.a'' (``-lC'') must also be specified.
 ++option ``-lfam'' is used with cc(1) or ld(1).
 + .PP
 + An application calls routines described here to establish a list of
 + files for \fIfam \fPto monitor.  \fIFam \fPgenerates events on a socket to
 +@@ -282,7 +281,7 @@
 + 
 + 
 + .SH SEE ALSO
 +-fam(1M).
 ++fam(8).
 + .SH BUGS
 + The FAMMoved event is not currently supported.
 + .PP
 Index: files/patch-support::Makefile.am
 ===================================================================
 RCS file: files/patch-support::Makefile.am
 diff -N files/patch-support::Makefile.am
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ files/patch-support::Makefile.am	16 Dec 2001 00:40:07 -0000
 @@ -0,0 +1,11 @@
 +
 +$FreeBSD$
 +
 +--- support/Makefile.am.orig	Mon Oct 22 01:33:11 2001
 ++++ support/Makefile.am	Sat Dec 15 18:14:16 2001
 +@@ -12,4 +12,4 @@
 + libsupport_a_LIBADD       = @snprintf_o@ @foo_o@
 + 
 + CLEANFILES += @MKDEPFILE@ ii_files/*.ii
 +-sinclude @MKDEPFILE@
 ++#sinclude @MKDEPFILE@

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112170040.fBH0e4C80554>