git: cda23fc36d22 - main - Move mntopts(3) suppport into libutil

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Tue, 22 Apr 2025 21:51:55 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=cda23fc36d22bfa9d57d1a57c0daaeeb86bac94f

commit cda23fc36d22bfa9d57d1a57c0daaeeb86bac94f
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2025-04-22 21:50:19 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2025-04-22 21:51:42 +0000

    Move mntopts(3) suppport into libutil
    
    Many programs use this functionality so it should be available centrally
    rather than compiled into each program independently.  This has the
    modest downside of adding libutil dependencies to some mount_<foo>
    programs, but many (plus mount(8)) already have those depndencies so
    this shouldn't be a major imposition.
    
    In commit 906c312bbf74, Kirk said this could be done once the change was
    merged to FreeBSD 13.  That happened in commit 668dfa016698 in 2023.
    
    While here perform related tidying including removing SRCS where the
    only entry is ${PROG}.c rendering it unnecessary.
    
    Reviewed by:    olce, dim, emaste
    Differential Revision:  https://reviews.freebsd.org/D49951
---
 lib/libutil/Makefile                             | 14 +++++++++++--
 {sbin/mount => lib/libutil}/mntopts.3            | 26 +++++++++++-------------
 sbin/mount/getmntopts.c => lib/libutil/mntopts.c |  0
 {sbin/mount => lib/libutil}/mntopts.h            |  5 +++++
 sbin/fsck/Makefile                               |  5 +----
 sbin/fsck_ffs/Makefile                           |  8 ++++----
 sbin/growfs/Makefile                             |  5 +----
 sbin/init/Makefile                               |  6 ------
 sbin/mksnap_ffs/Makefile                         |  3 +--
 sbin/mount/Makefile                              | 12 ++---------
 sbin/mount_cd9660/Makefile                       |  8 +-------
 sbin/mount_fusefs/Makefile                       |  7 +------
 sbin/mount_msdosfs/Makefile                      | 11 +---------
 sbin/mount_nfs/Makefile                          |  8 ++++----
 sbin/mount_nullfs/Makefile                       |  7 +------
 sbin/mount_udf/Makefile                          |  7 +------
 sbin/mount_unionfs/Makefile                      |  7 +------
 sbin/tunefs/Makefile                             |  7 +------
 tests/sys/fs/fusefs/Makefile                     |  4 ----
 usr.sbin/autofs/Makefile                         |  7 -------
 usr.sbin/mount_smbfs/Makefile                    |  7 ++-----
 usr.sbin/mountd/Makefile                         |  5 -----
 22 files changed, 51 insertions(+), 118 deletions(-)

diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile
index 8178d33b7ba8..0639745d08fc 100644
--- a/lib/libutil/Makefile
+++ b/lib/libutil/Makefile
@@ -16,9 +16,10 @@ SRCS=	_secure_path.c auth.c cpuset.c expand_number.c flopen.c fparseln.c \
 	kinfo_getvmobject.c kld.c \
 	login_auth.c login_cap.c \
 	login_class.c login_crypt.c login_ok.c login_times.c login_tty.c \
+	mntopts.c \
 	pidfile.c property.c pty.c pw_scan.c pw_util.c quotafile.c \
 	realhostname.c stub.c trimdomain.c uucplock.c
-INCS=	libutil.h login_cap.h
+INCS=	libutil.h login_cap.h mntopts.h
 
 CFLAGS+= -DNO__SCCSID
 
@@ -32,7 +33,8 @@ MAN+=	cpuset.3 expand_number.3 flopen.3 fparseln.3 ftime.3 getlocalbase.3 \
 	hexdump.3 humanize_number.3 kinfo_getallproc.3 kinfo_getfile.3 \
 	kinfo_getproc.3 kinfo_getvmmap.3 kinfo_getvmobject.3 kld.3 \
 	login_auth.3 login_cap.3 \
-	login_class.3 login_ok.3 login_times.3 login_tty.3 pidfile.3 \
+	login_class.3 login_ok.3 login_times.3 login_tty.3 mntopts.3 \
+	pidfile.3 \
 	property.3 pty.3 quotafile.3 realhostname.3 realhostname_sa.3 \
 	_secure_path.3 trimdomain.3 uucplock.3 pw_util.3
 MAN+=	login.conf.5
@@ -54,6 +56,14 @@ MLINKS+=login_times.3 in_lt.3 login_times.3 in_ltm.3 \
 	login_times.3 in_ltms.3 \
 	login_times.3 in_lts.3 \
 	login_times.3 parse_lt.3
+MLINKS+=mntopts.3 getmntopts.3 \
+	mntopts.3 getmntpoint.3 \
+	mntopts.3 chkdoreload.3 \
+	mntopts.3 build_iovec.3 \
+	mntopts.3 build_iovec_argf.3 \
+	mntopts.3 free_iovec.3 \
+	mntopts.3 checkpath.3 \
+	mntopts.3 rmslashes.3
 MLINKS+=pidfile.3 pidfile_close.3 \
 	pidfile.3 pidfile_fileno.3 \
 	pidfile.3 pidfile_open.3 \
diff --git a/sbin/mount/mntopts.3 b/lib/libutil/mntopts.3
similarity index 96%
rename from sbin/mount/mntopts.3
rename to lib/libutil/mntopts.3
index 74fca612479f..35f6d476fcec 100644
--- a/sbin/mount/mntopts.3
+++ b/lib/libutil/mntopts.3
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd January 19, 2023
+.Dd April 21, 2025
 .Dt MNTOPTS 3
 .Os
 .Sh NAME
@@ -35,6 +35,8 @@
 .Nm checkpath ,
 .Nm rmslashes
 .Nd "mount point operations"
+.Sh LIBRARY
+.Lb libutil
 .Sh SYNOPSIS
 .In mntopts.h
 .Ft void
@@ -69,18 +71,6 @@
 The
 .Nm mntopts
 functions support operations associated with a mount point.
-For historic reasons are in a file in the sources for the
-.Xr mount 8
-program.
-Thus, to access them the following lines need to be added to the
-.Nm Makefile
-of the program wanting to use them:
-.Bd -literal
-SRCS+=	getmntopts.c
-MOUNT=  ${SRCTOP}/sbin/mount
-CFLAGS+= -I${MOUNT}
-\&.PATH: ${MOUNT}
-.Ed
 .Pp
 The
 .Fn getmntopts
@@ -326,7 +316,7 @@ flag, would also have an
 entry.
 This can be declared and used as follows:
 .Bd -literal
-#include "mntopts.h"
+#include <mntopts.h>
 
 struct mntopt mopts[] = {
 	MOPT_STDOPTS,
@@ -377,3 +367,11 @@ and
 .Fn chkdoreload
 functions were added in
 .Fx 13.2 .
+.Pp
+Historically, these functions were found in getmntopts.c in the sources for the
+.Xr mount 8
+program.
+As of
+.Fx 15.0
+they are part of
+.Nm libutil .
diff --git a/sbin/mount/getmntopts.c b/lib/libutil/mntopts.c
similarity index 100%
rename from sbin/mount/getmntopts.c
rename to lib/libutil/mntopts.c
diff --git a/sbin/mount/mntopts.h b/lib/libutil/mntopts.h
similarity index 98%
rename from sbin/mount/mntopts.h
rename to lib/libutil/mntopts.h
index dc1452097ed8..0027b8ca7155 100644
--- a/sbin/mount/mntopts.h
+++ b/lib/libutil/mntopts.h
@@ -29,6 +29,9 @@
  * SUCH DAMAGE.
  */
 
+#ifndef _MNTOPTS_H_
+#define _MNTOPTS_H_
+
 struct mntopt {
 	const char *m_option;	/* option name */
 	int m_inverse;		/* if a negative option, e.g. "atime" */
@@ -107,3 +110,5 @@ extern int getmnt_silent;
 void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
 void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
 void free_iovec(struct iovec **iovec, int *iovlen);
+
+#endif /* !_MNTOPTS_H_ */
diff --git a/sbin/fsck/Makefile b/sbin/fsck/Makefile
index 3273ea730dc8..33ff4784a92b 100644
--- a/sbin/fsck/Makefile
+++ b/sbin/fsck/Makefile
@@ -3,10 +3,7 @@
 PACKAGE=runtime
 PROG=	fsck
 SRCS=	fsck.c fsutil.c preen.c
-SRCS+=	getmntopts.c
 MAN=	fsck.8
-MOUNT=	${SRCTOP}/sbin/mount
-CFLAGS+= -I${MOUNT}
-.PATH:  ${MOUNT}
+LIBADD=	util
 
 .include <bsd.prog.mk>
diff --git a/sbin/fsck_ffs/Makefile b/sbin/fsck_ffs/Makefile
index 7b0f0ed822bf..c6676007db2a 100644
--- a/sbin/fsck_ffs/Makefile
+++ b/sbin/fsck_ffs/Makefile
@@ -5,12 +5,12 @@ LINKS+=	${BINDIR}/fsck_ffs ${BINDIR}/fsck_4.2bsd
 MAN=	fsck_ffs.8
 MLINKS=	fsck_ffs.8 fsck_ufs.8 fsck_ffs.8 fsck_4.2bsd.8
 SRCS=	dir.c ea.c fsutil.c inode.c main.c pass1.c pass1b.c pass2.c pass3.c \
-	pass4.c pass5.c setup.c suj.c utilities.c gjournal.c getmntopts.c \
+	pass4.c pass5.c setup.c suj.c utilities.c gjournal.c \
 	globs.c
-LIBADD=	ufs
+LIBADD=	ufs util
 WARNS?=	2
-CFLAGS+= -I${.CURDIR} -I${.CURDIR:H}/mount
+CFLAGS+= -I${.CURDIR}
 
-.PATH:	${SRCTOP}/sys/ufs/ffs ${.CURDIR:H}/mount
+.PATH:	${SRCTOP}/sys/ufs/ffs
 
 .include <bsd.prog.mk>
diff --git a/sbin/growfs/Makefile b/sbin/growfs/Makefile
index 6fb1ba51db00..b5b3d99f287d 100644
--- a/sbin/growfs/Makefile
+++ b/sbin/growfs/Makefile
@@ -3,13 +3,10 @@
 
 .include <src.opts.mk>
 
-.PATH:	${.CURDIR:H}/mount
-
 PACKAGE=ufs
 PROG=   growfs
-SRCS=   growfs.c getmntopts.c
+SRCS=   growfs.c
 MAN=	growfs.8
-CFLAGS+=-I${.CURDIR:H}/mount
 
 .if defined(GFSDBG)
 SRCS+=	debug.c
diff --git a/sbin/init/Makefile b/sbin/init/Makefile
index 124a9f77dede..1fc9b633f664 100644
--- a/sbin/init/Makefile
+++ b/sbin/init/Makefile
@@ -1,7 +1,6 @@
 CONFGROUPS=	CONFTTYS
 PACKAGE=runtime
 PROG=	init
-SRCS=	init.c getmntopts.c
 MAN=	init.8
 PRECIOUSPROG=
 INSTALLFLAGS=-b -B.bak
@@ -11,11 +10,6 @@ LIBADD=	util crypt
 CONFTTYSNAME=	ttys
 CONFTTYS+=	ttys
 
-# Needed for getmntopts.c
-MOUNT=	${SRCTOP}/sbin/mount
-CFLAGS+=-I${MOUNT}
-.PATH:	${MOUNT}
-
 NO_SHARED?=	YES
 
 .include <bsd.prog.mk>
diff --git a/sbin/mksnap_ffs/Makefile b/sbin/mksnap_ffs/Makefile
index 591fd6adcc22..cf5079fdfa8e 100644
--- a/sbin/mksnap_ffs/Makefile
+++ b/sbin/mksnap_ffs/Makefile
@@ -2,11 +2,10 @@
 
 PACKAGE=ufs
 PROG=	mksnap_ffs
-SRCS=	mksnap_ffs.c getmntopts.c
+LIBADD=	util
 MAN=	mksnap_ffs.8
 
 WARNS?=	2
-CFLAGS+=-I${.CURDIR:H}/mount
 
 .if defined(NOSUID)
 BINMODE=554
diff --git a/sbin/mount/Makefile b/sbin/mount/Makefile
index 9b5c9b9e593d..e2a3098813c4 100644
--- a/sbin/mount/Makefile
+++ b/sbin/mount/Makefile
@@ -1,15 +1,7 @@
 PACKAGE=runtime
 PROG=	mount
-SRCS=	mount.c mount_fs.c getmntopts.c vfslist.c
-MAN=	mntopts.3 mount.8
-MLINKS+= mntopts.3 getmntopts.3
-MLINKS+= mntopts.3 getmntpoint.3
-MLINKS+= mntopts.3 chkdoreload.3
-MLINKS+= mntopts.3 build_iovec.3
-MLINKS+= mntopts.3 build_iovec_argf.3
-MLINKS+= mntopts.3 free_iovec.3
-MLINKS+= mntopts.3 checkpath.3
-MLINKS+= mntopts.3 rmslashes.3
+SRCS=	mount.c mount_fs.c vfslist.c
+MAN=	mount.8
 
 LIBADD=	util xo
 
diff --git a/sbin/mount_cd9660/Makefile b/sbin/mount_cd9660/Makefile
index 3a8f9cd45cb4..9fa8e7436169 100644
--- a/sbin/mount_cd9660/Makefile
+++ b/sbin/mount_cd9660/Makefile
@@ -1,16 +1,10 @@
 PACKAGE=runtime
 PROG=	mount_cd9660
-SRCS=	mount_cd9660.c getmntopts.c
 MAN=	mount_cd9660.8
-LIBADD=	kiconv
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+= -I${MOUNT}
+LIBADD=	kiconv util
 
 # Needs to be dynamically linked for optional dlopen() access to
 # userland libiconv
 NO_SHARED?=	NO
 
-.PATH:	${MOUNT}
-
 .include <bsd.prog.mk>
diff --git a/sbin/mount_fusefs/Makefile b/sbin/mount_fusefs/Makefile
index 0c173bf1b687..e683b35f0c8a 100644
--- a/sbin/mount_fusefs/Makefile
+++ b/sbin/mount_fusefs/Makefile
@@ -20,12 +20,7 @@ DEBUG_FLAGS+= -DFUSE4BSD_VERSION="\"${F4BVERS}\""
 
 PACKAGE=runtime
 PROG=	mount_fusefs
-SRCS=	mount_fusefs.c getmntopts.c
 MAN8=	mount_fusefs.8
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+=	-I${MOUNT}
-
-.PATH: ${MOUNT}
+LIBADD=	util
 
 .include <bsd.prog.mk>
diff --git a/sbin/mount_msdosfs/Makefile b/sbin/mount_msdosfs/Makefile
index e01755b2fce2..50f07f175001 100644
--- a/sbin/mount_msdosfs/Makefile
+++ b/sbin/mount_msdosfs/Makefile
@@ -1,19 +1,10 @@
-#
-#
-
 PACKAGE=runtime
 PROG=	mount_msdosfs
-SRCS=	mount_msdosfs.c getmntopts.c
 MAN=	mount_msdosfs.8
-LIBADD=	kiconv
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+= -I${MOUNT}
+LIBADD=	kiconv util
 
 # Needs to be dynamically linked for optional dlopen() access to
 # userland libiconv
 NO_SHARED?=	NO
 
-.PATH:	${MOUNT}
-
 .include <bsd.prog.mk>
diff --git a/sbin/mount_nfs/Makefile b/sbin/mount_nfs/Makefile
index 3e61a9f680e0..fb425106dd81 100644
--- a/sbin/mount_nfs/Makefile
+++ b/sbin/mount_nfs/Makefile
@@ -1,12 +1,12 @@
 PACKAGE=nfs
 PROG=	mount_nfs
-SRCS=	mount_nfs.c getmntopts.c mounttab.c
+SRCS=	mount_nfs.c mounttab.c
 MAN=	mount_nfs.8
+LIBADD=	util
 
-MOUNT=	${.CURDIR:H}/mount
 UMNTALL= ${SRCTOP}/usr.sbin/rpc.umntall
-CFLAGS+= -DNFS -I${MOUNT} -I${UMNTALL}
+CFLAGS+= -DNFS -I${UMNTALL}
 
-.PATH: ${MOUNT} ${UMNTALL}
+.PATH: ${UMNTALL}
 
 .include <bsd.prog.mk>
diff --git a/sbin/mount_nullfs/Makefile b/sbin/mount_nullfs/Makefile
index 12e87308ed13..1844aa14b24f 100644
--- a/sbin/mount_nullfs/Makefile
+++ b/sbin/mount_nullfs/Makefile
@@ -1,11 +1,6 @@
 PACKAGE=runtime
 PROG=	mount_nullfs
-SRCS=	mount_nullfs.c getmntopts.c
 MAN=	mount_nullfs.8
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+=-I${MOUNT}
-
-.PATH:	${MOUNT}
+LIBADD=	util
 
 .include <bsd.prog.mk>
diff --git a/sbin/mount_udf/Makefile b/sbin/mount_udf/Makefile
index c41c051fc315..6506f6ba3985 100644
--- a/sbin/mount_udf/Makefile
+++ b/sbin/mount_udf/Makefile
@@ -1,12 +1,7 @@
 PACKAGE=runtime
 PROG=	mount_udf
-SRCS=	mount_udf.c getmntopts.c
 MAN=	mount_udf.8
-LIBADD=	kiconv
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+= -I${MOUNT} -I${SRCTOP}/sys
-.PATH:	${MOUNT}
+LIBADD=	kiconv util
 
 # Needs to be dynamically linked for optional dlopen() access to
 # userland libiconv
diff --git a/sbin/mount_unionfs/Makefile b/sbin/mount_unionfs/Makefile
index 2096386a3784..35e7e8fa75b7 100644
--- a/sbin/mount_unionfs/Makefile
+++ b/sbin/mount_unionfs/Makefile
@@ -1,11 +1,6 @@
 PACKAGE=runtime
 PROG=	mount_unionfs
-SRCS=	mount_unionfs.c getmntopts.c
 MAN=	mount_unionfs.8
-
-MOUNT=	${.CURDIR:H}/mount
-CFLAGS+=-I${MOUNT}
-
-.PATH:	${MOUNT}
+LIBADD=	util
 
 .include <bsd.prog.mk>
diff --git a/sbin/tunefs/Makefile b/sbin/tunefs/Makefile
index e236525557e1..4ea2219c8e03 100644
--- a/sbin/tunefs/Makefile
+++ b/sbin/tunefs/Makefile
@@ -1,13 +1,8 @@
 PACKAGE=ufs
 PROG=	tunefs
-SRCS=	tunefs.c getmntopts.c
-LIBADD=	ufs
+LIBADD=	ufs util
 MAN=	tunefs.8
 
-MOUNT=	${SRCTOP}/sbin/mount
-CFLAGS+=	-I${MOUNT}
-.PATH:	${MOUNT}
-
 WARNS?=	3
 
 .include <bsd.prog.mk>
diff --git a/tests/sys/fs/fusefs/Makefile b/tests/sys/fs/fusefs/Makefile
index 06b82071fe31..4265f5b71dfa 100644
--- a/tests/sys/fs/fusefs/Makefile
+++ b/tests/sys/fs/fusefs/Makefile
@@ -55,7 +55,6 @@ GTESTS+=	xattr
 
 .for p in ${GTESTS}
 SRCS.$p+=	${p}.cc
-SRCS.$p+=	getmntopts.c
 SRCS.$p+=	mockfs.cc
 SRCS.$p+=	utils.cc
 .endfor
@@ -68,7 +67,6 @@ TEST_METADATA.nfs+=	required_user="root"
 TEST_METADATA+= timeout=10
 
 FUSEFS=		${SRCTOP}/sys/fs/fuse
-MOUNT=		${SRCTOP}/sbin/mount
 # Suppress warnings that GCC generates for the libc++ and gtest headers.
 CXXWARNFLAGS.gcc+=	-Wno-placement-new -Wno-attributes
 # Suppress Wcast-align for readdir.cc, because it is unavoidable when using
@@ -87,8 +85,6 @@ CXXWARNFLAGS+=	-Wno-vla-cxx-extension
 .endif
 CXXFLAGS+=	-I${SRCTOP}/tests
 CXXFLAGS+=	-I${FUSEFS}
-CXXFLAGS+=	-I${MOUNT}
-.PATH:		${MOUNT}
 
 LIBADD+=	pthread
 LIBADD+=	gmock gtest
diff --git a/usr.sbin/autofs/Makefile b/usr.sbin/autofs/Makefile
index 2d0c1bcb8806..b32c617cfd56 100644
--- a/usr.sbin/autofs/Makefile
+++ b/usr.sbin/autofs/Makefile
@@ -6,7 +6,6 @@ SRCS+=	automountd.c
 SRCS+=	autounmountd.c
 SRCS+=	common.c
 SRCS+=	defined.c
-SRCS+=	getmntopts.c
 SRCS+=	log.c
 SRCS+=	popen.c
 SRCS+=	token.l
@@ -18,15 +17,9 @@ MAN=	automount.8 automountd.8 autounmountd.8 auto_master.5
 
 LIBADD=	util
 
-# Needed for getmntopts.c
-MOUNT=  ${SRCTOP}/sbin/mount
-CFLAGS+=-I${MOUNT}
-
 LINKS=	${BINDIR}/automountd ${BINDIR}/automount
 LINKS+=	${BINDIR}/automountd ${BINDIR}/autounmountd
 
-.PATH:	${MOUNT}
-
 SUBDIR=	autofs
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/mount_smbfs/Makefile b/usr.sbin/mount_smbfs/Makefile
index 8bd1b0f34d99..857d475103d0 100644
--- a/usr.sbin/mount_smbfs/Makefile
+++ b/usr.sbin/mount_smbfs/Makefile
@@ -1,15 +1,12 @@
 PROG=	mount_smbfs
 PACKAGE=	smbutils
-SRCS=	mount_smbfs.c getmntopts.c
 MAN=	mount_smbfs.8
 
-MOUNTDIR=	${SRCTOP}/sbin/mount
 CONTRIBDIR=	${SRCTOP}/contrib/smbfs
-CFLAGS+=	-DSMBFS -I${MOUNTDIR} -I${CONTRIBDIR}/include
+CFLAGS+=	-DSMBFS -I${CONTRIBDIR}/include
 
-LIBADD=	smb
+LIBADD=	smb util
 
 .PATH:	${CONTRIBDIR}/mount_smbfs
-.PATH:  ${MOUNTDIR}
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/mountd/Makefile b/usr.sbin/mountd/Makefile
index e63b03bbfe45..ebc4d3438cc1 100644
--- a/usr.sbin/mountd/Makefile
+++ b/usr.sbin/mountd/Makefile
@@ -1,13 +1,8 @@
 PROG=	mountd
-SRCS=	mountd.c getmntopts.c
 MAN=	exports.5 netgroup.5 mountd.8
 
-MOUNT=  ${SRCTOP}/sbin/mount
-CFLAGS+= -I${MOUNT}
 WARNS?= 2
 
-.PATH: ${MOUNT}
-
 LIBADD=	util
 
 .include <bsd.prog.mk>