Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Jul 2014 16:33:42 -0700
From:      Sean Fagan <sef@ixsystems.com>
To:        hackers@freebsd.org
Subject:   Expanding on NO_ROOT:  Categorizing installed files
Message-ID:  <048B595B-6B91-40B6-84A4-E23948423354@ixsystems.com>

next in thread | raw e-mail | index | archive | help

--Apple-Mail=_15A94C1A-F8ED-40F8-8003-9FB67C14B62F
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

We've been looking at some significant changes to how we distribute and =
update FreeNAS; one of the things I've done is take the NO_ROOT build =
changes, and expand upon them to have categories.

I'd like to say I went for minimal changes here, but mostly what I was =
going for was minimal work on my part.  However, this seems to mostly =
work; the METALOG that gets generated has lines such as

	./bin/cat type=3Dfile uname=3Droot gname=3Dwheel mode=3D0555 =
size=3D11520 category=3Dbase

and I've written a python script that will take that METALOG, and create =
PKGNG-style packages from it.  (This may be more useful for things like =
"category=3Ddev", or "secure".)  I did have to change xinstall a bit to =
handle this, and I also changed how it handled hard links for the =
metalog.

Any comments on this?  More importantly, any interest in it?

(Note that I am not subscribed to the list from this address, so if you =
respond to the list, I may follow up from a different address :).)


--Apple-Mail=_15A94C1A-F8ED-40F8-8003-9FB67C14B62F
Content-Disposition: attachment;
	filename=categorizing-diffs.txt
Content-Type: text/plain;
	name="categorizing-diffs.txt"
Content-Transfer-Encoding: quoted-printable

diff --git a/Makefile.inc1 b/Makefile.inc1
index c0591b6..b9edd0d 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -14,6 +14,7 @@
 #	-DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel
 #	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
 #	-DNO_ROOT install without using root privilege
+#	-DLOG_META_INFO Log metadata about installed files
 #	-DNO_DOCUPDATE do not update doc in ${MAKE} update
 #	-DNO_CTF do not run the DTrace CTF conversion tools on built =
objects
 #	LOCAL_DIRS=3D"list of dirs" to add additional dirs to the SUBDIR =
list
@@ -271,7 +272,7 @@ WMAKEENV=3D	${CROSSENV} \
=20
 # make hierarchy
 HMAKE=3D		PATH=3D${TMPPATH} ${MAKE} =
LOCAL_MTREE=3D${LOCAL_MTREE}
-.if defined(NO_ROOT)
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
 HMAKE+=3D		PATH=3D${TMPPATH} METALOG=3D${METALOG} -DNO_ROOT
 .endif
=20
@@ -333,6 +334,10 @@ LIB32WMAKEENV+=3D	=
MAKEOBJDIRPREFIX=3D${OBJTREE}/lib32 \
 		LIBDIR=3D/usr/lib32 \
 		SHLIBDIR=3D/usr/lib32 \
 		COMPILER_TYPE=3D${WMAKE_COMPILER_TYPE}
+.if defined(LOG_META_INFO) || defined(NO_ROOT)
+LIB32WMAKEENV+=3D	META_CATEGORY=3Dcompat32
+.endif
+
 LIB32WMAKEFLAGS+=3D	\
 		CC=3D"${CC} ${LIB32FLAGS}" \
 		CXX=3D"${CXX} ${LIB32FLAGS}" \
@@ -364,14 +369,21 @@ IMAKEENV+=3D	PATH=3D${TMPPATH}:${INSTALLTMP}
 INSTALLFLAGS+=3D	-N ${.CURDIR}/etc
 MTREEFLAGS+=3D	-N ${.CURDIR}/etc
 .endif
-.if defined(NO_ROOT)
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
 METALOG?=3D	${DESTDIR}/${DISTDIR}/METALOG
-IMAKE+=3D		-DNO_ROOT METALOG=3D${METALOG}
-INSTALL_DDIR=3D	${DESTDIR}/${DISTDIR}
-INSTALLFLAGS+=3D	-U -M ${METALOG} -D =
${INSTALL_DDIR:S://:/:g:C:/$::}
+. if defined(NO_ROOT)
+IMAKE+=3D		-DNO_ROOT
+INSTALLFLAGS+=3D	-U
 MTREEFLAGS+=3D	-W
+. endif
+. if defined(LOG_META_INFO)
+IMAKE+=3D		-DLOG_META_INFO
+. endif
+IMAKE+=3D		METALOG=3D${METALOG}
+INSTALL_DDIR=3D	${DESTDIR}/${DISTDIR}
+INSTALLFLAGS+=3D	-M ${METALOG} -D ${INSTALL_DDIR:S://:/:g:C:/$::}
 .endif
-.if defined(DB_FROM_SRC) || defined(NO_ROOT)
+.if defined(DB_FROM_SRC) || defined(NO_ROOT) || defined(LOG_META_INFO)
 IMAKE_INSTALL=3D	INSTALL=3D"install ${INSTALLFLAGS}"
 IMAKE_MTREE=3D	MTREE_CMD=3D"nmtree ${MTREEFLAGS}"
 .endif
@@ -739,7 +751,7 @@ distributeworld installworld: installcheck =
installcheck_UGID
 	    done); \
 	cp $$libs $$progs ${INSTALLTMP}
 	cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale
-.if defined(NO_ROOT)
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
 	echo "#${MTREE_MAGIC}" > ${METALOG}
 .endif
 .if make(distributeworld)
@@ -755,7 +767,8 @@ distributeworld installworld: installcheck =
installcheck_UGID
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
 	    -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null
 .endif
-.if defined(NO_ROOT)
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
+	echo bar
 	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \
 	    sed -e 's#^\./#./${dist}/#' >> ${METALOG}
 	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.usr.dist | \
@@ -766,7 +779,7 @@ distributeworld installworld: installcheck =
installcheck_UGID
 .endfor
 	-mkdir ${DESTDIR}/${DISTDIR}/base
 	cd ${.CURDIR}/etc; ${CROSSENV} PATH=3D${TMPPATH} ${MAKE} \
-	    METALOG=3D${METALOG} ${IMAKE_INSTALL} ${IMAKE_MTREE} \
+	    METALOG=3D${METALOG} META_CATEGORY=3Dbase ${IMAKE_INSTALL} =
${IMAKE_MTREE} \
 	    DISTBASE=3D/base DESTDIR=3D${DESTDIR}/${DISTDIR}/base \
 	    LOCAL_MTREE=3D${LOCAL_MTREE} distrib-dirs
 .endif
@@ -987,7 +1000,7 @@ reinstallkernel reinstallkernel.debug: installcheck
 	@echo ">>> Installing kernel ${INSTALLKERNEL}"
 	@echo =
"--------------------------------------------------------------"
 	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
-	    ${CROSSENV} PATH=3D${TMPPATH} \
+	    ${CROSSENV} PATH=3D${TMPPATH} META_CATEGORY=3D"kernel" \
 	    ${MAKE} ${IMAKE_INSTALL} KERNEL=3D${INSTKERNNAME} =
${.TARGET:S/kernel//}
=20
 distributekernel distributekernel.debug:
diff --git a/bin/Makefile b/bin/Makefile
index e5052ca..ca218ac 100644
--- a/bin/Makefile
+++ b/bin/Makefile
@@ -1,6 +1,9 @@
 #	From: @(#)Makefile	8.1 (Berkeley) 5/31/93
 # $FreeBSD$
=20
+META_CATEGORY=3D base
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D cat \
diff --git a/etc/Makefile b/etc/Makefile
index 7a805ae..5284d29 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -1,6 +1,9 @@
 #	from: @(#)Makefile	5.11 (Berkeley) 5/21/91
 # $FreeBSD$
=20
+META_CATEGORY=3Dbase
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 .if ${MK_SENDMAIL} !=3D "no"
@@ -209,12 +212,12 @@ distribution:
 .endif
 	pwd_mkdb ${PWD_MKDB_ENDIAN} -i -p -d ${DESTDIR}/etc \
 	    ${DESTDIR}/etc/master.passwd
-.if defined(NO_ROOT)
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
 	( \
-		echo "./etc/login.conf.db type=3Dfile mode=3D0644 =
uname=3Droot gname=3Dwheel"; \
-		echo "./etc/passwd type=3Dfile mode=3D0644 uname=3Droot =
gname=3Dwheel"; \
-		echo "./etc/pwd.db type=3Dfile mode=3D0644 uname=3Droot =
gname=3Dwheel"; \
-		echo "./etc/spwd.db type=3Dfile mode=3D0600 uname=3Droot =
gname=3Dwheel"; \
+		echo "./etc/login.conf.db type=3Dfile mode=3D0644 =
uname=3Droot gname=3Dwheel category=3Dbase"; \
+		echo "./etc/passwd type=3Dfile mode=3D0644 uname=3Droot =
gname=3Dwheel category=3Dbase"; \
+		echo "./etc/pwd.db type=3Dfile mode=3D0644 uname=3Droot =
gname=3Dwheel category=3Dbase"; \
+		echo "./etc/spwd.db type=3Dfile mode=3D0600 uname=3Droot =
gname=3Dwheel category=3Dbase"; \
 	) | ${METALOG.add}
 .endif
 .if ${MK_BLUETOOTH} !=3D "no"
@@ -346,6 +349,9 @@ distrib-dirs: ${MTREES:N/*}
 .if defined(NO_ROOT)
 	@set ${MTREES}; \
 	while test $$# -ge 2; do \
+		p=3D"category=3Dbase"; \
+		test "$$1" =3D=3D BSD.include.dist && p=3D"category=3Ddev"=
 ; \
+		test "$$1" =3D=3D BSD.groff.dist && p=3D"category=3Ddoc" =
; \
 		m=3D${.CURDIR}/$$1; \
 		shift; \
 		d=3D$$1; \
@@ -353,8 +359,8 @@ distrib-dirs: ${MTREES:N/*}
 		d=3D${DISTBASE}$$d; \
 		shift; \
 		${ECHO} "${MTREE_CMD:N-W} -C -f $$m -K uname,gname | " \
-		    "sed s#^\.#.$$d# | ${METALOG.add}" ; \
-		${MTREE_CMD:N-W} -C -f $$m -K uname,gname | sed =
s#^\.#.$$d# | \
+		    "sed -e s#^\.#.$$d# -e \"s#\$$# $$p#\" | =
${METALOG.add}" ; \
+		${MTREE_CMD:N-W} -C -f $$m -K uname,gname | sed -e =
s#^\.#.$$d# -e "s#\$$# $$p#" | \
 		    ${METALOG.add} ; \
 	done; true
 .endif
diff --git a/gnu/lib/Makefile b/gnu/lib/Makefile
index c33cef6..c2a6af4 100644
--- a/gnu/lib/Makefile
+++ b/gnu/lib/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3D	base
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D csu libgcc libgcov libdialog libgomp libodialog libregex =
libreadline \
diff --git a/gnu/usr.bin/cc/Makefile b/gnu/usr.bin/cc/Makefile
index efb548a..be673bc 100644
--- a/gnu/usr.bin/cc/Makefile
+++ b/gnu/usr.bin/cc/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3Ddev
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # The order of some of these are rather important.  Some depend on =
previous
diff --git a/include/Makefile b/include/Makefile
index 0328e70..1c924bf 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -3,6 +3,9 @@
 #
 # Doing a "make install" builds /usr/include.
=20
+META_CATEGORY=3D	dev
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 CLEANFILES=3D osreldate.h version vers.c
diff --git a/lib/Makefile b/lib/Makefile
index 32a620d..aacc93b 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 # $FreeBSD$
=20
+META_CATEGORY=3D	base
+.EXPORTVAR:	META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # To satisfy shared library or ELF linkage when only the libraries =
being
diff --git a/lib/clang/Makefile b/lib/clang/Makefile
index 6bc9552..e80193a 100644
--- a/lib/clang/Makefile
+++ b/lib/clang/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3Ddev
+.EXPORT_VAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 .if !make(install)
diff --git a/lib/csu/amd64/Makefile b/lib/csu/amd64/Makefile
index afe7fe6..5616e04 100644
--- a/lib/csu/amd64/Makefile
+++ b/lib/csu/amd64/Makefile
@@ -9,6 +9,9 @@ CFLAGS+=3D	-I${.CURDIR}/../common \
 		-I${.CURDIR}/../../libc/include
 CFLAGS+=3D	-fno-omit-frame-pointer
=20
+META_CATEGORY=3D	base
+.EXPORTVAR: META_CATEGORY
+
 all: ${OBJS}
=20
 CLEANFILES=3D	${OBJS}
@@ -39,7 +42,7 @@ Scrt1.o: Scrt1.s
 	${CC} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
=20
 realinstall:
-	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+	${INSTALL} -P ${META_CATEGORY} -o ${LIBOWN} -g ${LIBGRP} -m =
${LIBMODE} \
 	    ${OBJS} ${DESTDIR}${LIBDIR}
=20
 .include <bsd.lib.mk>
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 77c7ce0..ad27971 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.2 (Berkeley) 2/3/94
 # $FreeBSD$
=20
+META_CATEGORY?=3D base
+.EXPORTVAR: META_CATEGORY
+
 SHLIBDIR?=3D /lib
=20
 .include <bsd.own.mk>
@@ -9,6 +12,7 @@ SHLIBDIR?=3D /lib
 # named MACHINE_CPUARCH, but some ABIs are different enough to require
 # their own libc, so allow a directory named MACHINE_ARCH to override =
this.
=20
+
 .if exists(${.CURDIR}/${MACHINE_ARCH})
 LIBC_ARCH=3D${MACHINE_ARCH}
 .else
diff --git a/lib/libelf/Makefile b/lib/libelf/Makefile
index fe921cb..9178c36 100644
--- a/lib/libelf/Makefile
+++ b/lib/libelf/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3D	base
+.EXPORTVAR:	META_CATEGORY
+
 LIB=3D	elf
=20
 SRCS=3D	elf_begin.c						=
\
diff --git a/lib/libkvm/Makefile b/lib/libkvm/Makefile
index 1250bf7..a611a5f 100644
--- a/lib/libkvm/Makefile
+++ b/lib/libkvm/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 # $FreeBSD$
=20
+META_CATEGORY=3D	base
+.EXPORTVAR:	META_CATEGORY
+
 LIB=3D	kvm
 SHLIBDIR?=3D /lib
 CFLAGS+=3D-DLIBC_SCCS -I${.CURDIR}
diff --git a/libexec/Makefile b/libexec/Makefile
index 78953b4..4d43a92 100644
--- a/libexec/Makefile
+++ b/libexec/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 # $FreeBSD$
=20
+META_CATEGORY=3Dbase
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D	${_atrun} \
diff --git a/rescue/Makefile b/rescue/Makefile
index 0945ed3..685af4d 100644
--- a/rescue/Makefile
+++ b/rescue/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3Drescue
+.EXPORTVAR: META_CATEGORY
+
 SUBDIR=3D	librescue \
 	rescue
=20
diff --git a/sbin/Makefile b/sbin/Makefile
index f9ba4ca..33603cf 100644
--- a/sbin/Makefile
+++ b/sbin/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.5 (Berkeley) 3/31/94
 # $FreeBSD$
=20
+META_CATEGORY=3D base
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # XXX MISSING:		icheck ncheck
diff --git a/secure/Makefile b/secure/Makefile
index 7342709..d870cc0 100644
--- a/secure/Makefile
+++ b/secure/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3D	secure
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D lib libexec usr.bin usr.sbin
diff --git a/share/Makefile b/share/Makefile
index 3e613d6..8b51bd2 100644
--- a/share/Makefile
+++ b/share/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/5/93
 # $FreeBSD$
=20
+META_CATEGORY=3Dbase
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # Do not include `info' in the SUBDIR list, it is handled separately.
diff --git a/share/dtrace/Makefile b/share/dtrace/Makefile
index adbdc84..44514c0 100644
--- a/share/dtrace/Makefile
+++ b/share/dtrace/Makefile
@@ -4,6 +4,9 @@
 # the DTraceToolkit.
 #
=20
+META_CATEGORY=3Ddtrace
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D ${_toolkit}
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index dfa450e8..268ce8a 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3D	kernel
+.EXPORTVAR: META_CATEGORY
+
 MAN=3D	accept_filter.9 \
 	accf_data.9 \
 	accf_dns.9 \
diff --git a/share/mk/bsd.incs.mk b/share/mk/bsd.incs.mk
index 74c378b..24559d6 100644
--- a/share/mk/bsd.incs.mk
+++ b/share/mk/bsd.incs.mk
@@ -8,6 +8,14 @@
=20
 INCSGROUPS?=3D	INCS
=20
+.if defined(NO_ROOT) || defined(LOG_META_INFO)
+.if defined(META_CATEGORY)
+_META_INC=3D -P ${META_CATEGORY}:dev
+.else
+_META_INC=3D -P dev
+.endif
+.endif
+
 .if !target(buildincludes)
 .for group in ${INCSGROUPS}
 buildincludes: ${${group}}
@@ -39,9 +47,10 @@ ${group}NAME_${header:T}?=3D	${${group}NAME}
 .else
 ${group}NAME_${header:T}?=3D	${header:T}
 .endif
+
 installincludes: _${group}INS_${header:T}
 _${group}INS_${header:T}: ${header}
-	${INSTALL} -C -o ${${group}OWN_${.ALLSRC:T}} \
+	${INSTALL} ${_META_INC} -C -o ${${group}OWN_${.ALLSRC:T}} \
 	    -g ${${group}GRP_${.ALLSRC:T}} -m =
${${group}MODE_${.ALLSRC:T}} \
 	    ${.ALLSRC} \
 	    =
${DESTDIR}${${group}DIR_${.ALLSRC:T}}/${${group}NAME_${.ALLSRC:T}}
@@ -53,10 +62,11 @@ _${group}INCS+=3D ${header}
 installincludes: _${group}INS
 _${group}INS: ${_${group}INCS}
 .if defined(${group}NAME)
-	${INSTALL} -C -o ${${group}OWN} -g ${${group}GRP} -m =
${${group}MODE} \
+	${INSTALL} ${_META_INC} -C -o ${${group}OWN} -g ${${group}GRP} =
-m ${${group}MODE} \
 	    ${.ALLSRC} ${DESTDIR}${${group}DIR}/${${group}NAME}
 .else
-	${INSTALL} -C -o ${${group}OWN} -g ${${group}GRP} -m =
${${group}MODE} \
+	echo WHERE ARE ${_META_INC} YOU=20
+	${INSTALL} ${_META_INC} -C -o ${${group}OWN} -g ${${group}GRP} =
-m ${${group}MODE} \
 	    ${.ALLSRC} ${DESTDIR}${${group}DIR}
 .endif
 .endif
@@ -73,7 +83,7 @@ installincludes:
 		t=3D${DESTDIR}$$1; \
 		shift; \
 		${ECHO} $$t -\> $$l; \
-		${INSTALL_SYMLINK} $$l $$t; \
+		${INSTALL_SYMLINK} ${_META_INC} $$l $$t; \
 	done; true
 .endif
 .endif # !target(installincludes)
diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk
index b8b886a..2e6fa26 100644
--- a/share/mk/bsd.lib.mk
+++ b/share/mk/bsd.lib.mk
@@ -285,28 +285,36 @@ _SHLINSTALLFLAGS:=3D	${SHLINSTALLFLAGS}
 _SHLINSTALLFLAGS:=3D	${_SHLINSTALLFLAGS${ie}}
 .endfor
=20
+.if defined(META_CATEGORY)
+_PKG_FLAGS=3D	-P ${META_CATEGORY}
+_DEV_PKG_FLAGS=3D	-P ${META_CATEGORY}:dev
+.else
+_PKG_FLAGS=3D
+_DEV_PKG_FLAGS=3D
+.endif
+
 .if !defined(INTERNALLIB)
 realinstall: _libinstall
 .ORDER: beforeinstall _libinstall
 _libinstall:
 .if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} !=3D "no"
 	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
+	    ${_INSTALLFLAGS} ${_DEV_PKG_FLAGS} lib${LIB}.a =
${DESTDIR}${LIBDIR}
 .endif
 .if ${MK_PROFILE} !=3D "no" && defined(LIB) && !empty(LIB)
 	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
+	    ${_INSTALLFLAGS} ${_DEV_PKG_FLAGS} lib${LIB}_p.a =
${DESTDIR}${LIBDIR}
 .endif
 .if defined(SHLIB_NAME)
 	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
+	    ${_INSTALLFLAGS} ${_PKG_FLAGS} ${_SHLINSTALLFLAGS} \
 	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
 .if ${MK_DEBUG_FILES} !=3D "no"
 .if defined(DEBUGMKDIR)
 	${INSTALL} -T debug -d ${DESTDIR}${DEBUGFILEDIR}
 .endif
 	${INSTALL} -T debug -o ${LIBOWN} -g ${LIBGRP} -m ${DEBUGMODE} \
-	    ${_INSTALLFLAGS} \
+	    ${_INSTALLFLAGS} ${_DEV_PKG_FLAGS} \
 	    ${SHLIB_NAME}.debug ${DESTDIR}${DEBUGFILEDIR}
 .endif
 .if defined(SHLIB_LINK)
@@ -332,12 +340,12 @@ _libinstall:
 	    -e 's,@@LIBDIR@@,${_LDSCRIPTROOT}${LIBDIR},g' \
 	    ${.CURDIR}/${SHLIB_LDSCRIPT} > lib${LIB}.ld
 	${INSTALL} -S -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} lib${LIB}.ld =
${DESTDIR}${LIBDIR}/${SHLIB_LINK}
+	    ${_INSTALLFLAGS} ${_PKG_FLAGS} lib${LIB}.ld =
${DESTDIR}${LIBDIR}/${SHLIB_LINK}
 .else
 .if ${SHLIBDIR} =3D=3D ${LIBDIR}
-	${INSTALL_SYMLINK} ${SHLIB_NAME} =
${DESTDIR}${LIBDIR}/${SHLIB_LINK}
+	${INSTALL_SYMLINK} ${_PKG_FLAGS} ${SHLIB_NAME} =
${DESTDIR}${LIBDIR}/${SHLIB_LINK}
 .else
-	${INSTALL_SYMLINK} ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
+	${INSTALL_SYMLINK} ${_PKG_FLAGS} =
${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
 	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
 .if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
 	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
@@ -349,11 +357,11 @@ _libinstall:
 .endif # SHIB_NAME
 .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && =
${MK_TOOLCHAIN} !=3D "no"
 	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
+	    ${_INSTALLFLAGS} ${_DEV_PKG_FLAGS} lib${LIB}_pic.a =
${DESTDIR}${LIBDIR}
 .endif
 .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && =
!empty(LIB)
 	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
+	    ${_INSTALLFLAGS} ${_DEV_PKG_FLAGS} ${LINTLIB} =
${DESTDIR}${LINTLIBDIR}
 .endif
 .endif # !defined(INTERNALLIB)
=20
diff --git a/share/mk/bsd.links.mk b/share/mk/bsd.links.mk
index 1e4d57e..c9f83f0 100644
--- a/share/mk/bsd.links.mk
+++ b/share/mk/bsd.links.mk
@@ -8,7 +8,8 @@ afterinstall: _installlinks
 .ORDER: realinstall _installlinks
 _installlinks:
 .if defined(LINKS) && !empty(LINKS)
-	@set ${LINKS}; \
+	@echo LINKFOO
+	set ${LINKS}; \
 	while test $$# -ge 2; do \
 		l=3D${DESTDIR}$$1; \
 		shift; \
@@ -19,7 +20,8 @@ _installlinks:
 	done; true
 .endif
 .if defined(SYMLINKS) && !empty(SYMLINKS)
-	@set ${SYMLINKS}; \
+	@echo SYMFOO
+	set ${SYMLINKS}; \
 	while test $$# -ge 2; do \
 		l=3D$$1; \
 		shift; \
diff --git a/share/mk/bsd.man.mk b/share/mk/bsd.man.mk
index 6445ba3..6cbead4 100644
--- a/share/mk/bsd.man.mk
+++ b/share/mk/bsd.man.mk
@@ -54,6 +54,11 @@
 .endif
=20
 MINSTALL?=3D	${INSTALL} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE}
+.if (defined(NO_ROOT) || defined(LOG_META_INFO)) && =
defined(META_CATEGORY)
+# Man pages go into the doc package, and the package specified.
+MINSTALL+=3D	-P ${META_CATEGORY}:doc
+_META_INFO=3D	-P ${META_CATEGORY}:doc
+.endif
=20
 CATDIR=3D		${MANDIR:H:S/$/\/cat/}
 CATEXT=3D		.cat
@@ -216,7 +221,7 @@ _maninstall: ${MAN}
 		t=3D${DESTDIR}${MANDIR}$${sect}${MANSUBDIR}/$$name; \
 		${ECHO} $${t}${ZEXT} -\> $${l}${ZEXT}; \
 		rm -f $${t} $${t}${MCOMPRESS_EXT}; \
-		${INSTALL_LINK} $${l}${ZEXT} $${t}${ZEXT}; \
+		${INSTALL_LINK} ${_META_INFO} $${l}${ZEXT} $${t}${ZEXT}; =
\
 	done
 .if defined(MANBUILDCAT) && !empty(MANBUILDCAT)
 	@set ${MLINKS:C/\.([^.]*)$/.\1 \1/}; \
@@ -231,7 +236,7 @@ _maninstall: ${MAN}
 		t=3D${DESTDIR}${CATDIR}$${sect}${MANSUBDIR}/$$name; \
 		${ECHO} $${t}${ZEXT} -\> $${l}${ZEXT}; \
 		rm -f $${t} $${t}${MCOMPRESS_EXT}; \
-		${INSTALL_LINK} $${l}${ZEXT} $${t}${ZEXT}; \
+		${INSTALL_LINK} ${_META_INFO} $${l}${ZEXT} $${t}${ZEXT}; =
\
 	done
 .endif
 .endif
diff --git a/sys/Makefile b/sys/Makefile
index 74068d1..d5d84b3 100644
--- a/sys/Makefile
+++ b/sys/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3D	kernel
+.EXPORTVAR:	META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # The boot loader
diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk
index 1de2e1e..46884de 100644
--- a/sys/conf/kern.post.mk
+++ b/sys/conf/kern.post.mk
@@ -245,6 +245,10 @@ links:
 	    sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > =
makelinks
 	sh makelinks; rm -f dontlink
=20
+.if defined(META_CATEGORY)
+META_LOG_SYMBOLS=3D -P ${META_CATEGORY}:dev
+.endif
+
 kernel-tags:
 	@[ -f .depend ] || { echo "you must make depend first"; exit 1; =
}
 	sh $S/conf/systags.sh
@@ -272,7 +276,7 @@ kernel-install:
 	${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} ${KERNEL_KO} =
${DESTDIR}${KODIR}
 .if defined(DEBUG) && !defined(INSTALL_NODEBUG) && \
     (defined(MK_KERNEL_SYMBOLS) && ${MK_KERNEL_SYMBOLS} !=3D "no")
-	${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} =
${KERNEL_KO}.symbols ${DESTDIR}${KODIR}
+	${INSTALL} ${META_LOG_SYMBOLS} -p -m 555 -o ${KMODOWN} -g =
${KMODGRP} ${KERNEL_KO}.symbols ${DESTDIR}${KODIR}
 .endif
 .if defined(KERNEL_EXTRA_INSTALL)
 	${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} =
${KERNEL_EXTRA_INSTALL} ${DESTDIR}${KODIR}
diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk
index cd11e3a..ea50d33 100644
--- a/sys/conf/kmod.mk
+++ b/sys/conf/kmod.mk
@@ -68,6 +68,10 @@ KMODLOAD?=3D	/sbin/kldload
 KMODUNLOAD?=3D	/sbin/kldunload
 OBJCOPY?=3D	objcopy
=20
+.if defined(META_CATEGORY)
+META_LOG_SYMBOLS=3D	-P ${META_CATEGORY}:dev
+.endif
+
 .if defined(KMODDEPS)
 .error "Do not use KMODDEPS on 5.0+; use MODULE_VERSION/MODULE_DEPEND"
 .endif
@@ -287,7 +291,7 @@ _kmodinstall:
 .if defined(DEBUG_FLAGS) && !defined(INSTALL_NODEBUG) && \
     (defined(MK_KERNEL_SYMBOLS) && ${MK_KERNEL_SYMBOLS} !=3D "no")
 	${INSTALL} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \
-	    ${_INSTALLFLAGS} ${PROG}.symbols ${DESTDIR}${KMODDIR}
+	    ${_INSTALLFLAGS} ${META_LOG_SYMBOLS} ${PROG}.symbols =
${DESTDIR}${KMODDIR}
 .endif
=20
 .include <bsd.links.mk>
diff --git a/tools/install.sh b/tools/install.sh
index c28bd89..a88387b 100644
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -35,7 +35,7 @@ while [ $# -gt 0 ]; do
     case $1 in
     -d) dirmode=3D"YES"; shift;;
     -[bCcpSsv]) shift;;
-    -[BDfghMmNoTU]) shift; shift;;
+    -[PBDfghMmNoTU]) shift; shift;;
     -[BDfghMmNoTU]*) shift;;
     -l)
 	shift
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index 5e3f152..eecd5ec 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -1,6 +1,9 @@
 #	From: @(#)Makefile	8.3 (Berkeley) 1/7/94
 # $FreeBSD$
=20
+META_CATEGORY=3Dbase
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 # XXX MISSING:		deroff diction graph learn plot
diff --git a/usr.bin/clang/Makefile b/usr.bin/clang/Makefile
index db5fae7..b4a52f3 100644
--- a/usr.bin/clang/Makefile
+++ b/usr.bin/clang/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
=20
+META_CATEGORY=3Ddev
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D	clang clang-tblgen tblgen
diff --git a/usr.bin/lex/Makefile b/usr.bin/lex/Makefile
index 947eba1..1ba000e 100644
--- a/usr.bin/lex/Makefile
+++ b/usr.bin/lex/Makefile
@@ -9,6 +9,9 @@
 # Also note that flex.skel no longer gets installed.
 #
=20
+META_CATEGORY=3D	dev
+.EXPORTVAR: META_CATEGORY
+
 PROG=3D		lex
 LINKS+=3D	${BINDIR}/lex ${BINDIR}/lex++
 LINKS+=3D	${BINDIR}/lex ${BINDIR}/flex
diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c
index 15b115a..a05a87c 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -116,7 +116,7 @@ static mode_t mode =3D S_IRWXU | S_IRGRP | S_IXGRP | =
S_IROTH | S_IXOTH;
 static FILE *metafp;
 static const char *group, *owner;
 static const char *suffix =3D BACKUP_SUFFIX;
-static char *destdir, *digest, *fflags, *metafile, *tags;
+static char *destdir, *digest, *fflags, *metafile, *category, *tags;
=20
 static int	compare(int, const char *, size_t, int, const char *, =
size_t,
 		    char **);
@@ -151,9 +151,11 @@ main(int argc, char *argv[])
 	char *p;
 	const char *to_name;
=20
+	category =3D getenv("META_CATEGORY");
+
 	iflags =3D 0;
 	group =3D owner =3D NULL;
-	while ((ch =3D getopt(argc, argv, =
"B:bCcD:df:g:h:l:M:m:N:o:pSsT:Uv")) !=3D
+	while ((ch =3D getopt(argc, argv, =
"B:bCcD:df:g:h:l:M:m:N:o:pSsT:UvP:")) !=3D
 	     -1)
 		switch((char)ch) {
 		case 'B':
@@ -216,6 +218,10 @@ main(int argc, char *argv[])
 		case 'M':
 			metafile =3D optarg;
 			break;
+		case 'P':
+			if (strlen(optarg) > 0)
+				category =3D optarg;
+			break;
 		case 'm':
 			haveopt_m =3D 1;
 			if (!(set =3D setmode(optarg)))
@@ -634,7 +640,7 @@ makelink(const char *from_name, const char *to_name,
 				if (!haveopt_f)
 					fflags =3D NULL;
 				dres =3D digest_file(from_name);
-				metadata_log(to_name, "file", NULL, =
NULL,
+				metadata_log(to_name, "hlink", NULL, =
destdir ? from_name + strlen(destdir) : from_name,
 				    dres, to_sb.st_size);
 				free(dres);
 				mode =3D omode;
@@ -1337,9 +1343,15 @@ metadata_log(const char *path, const char *type, =
struct timeval *tv,
 	if (group)
 		fprintf(metafp, " gname=3D%s", group);
 	fprintf(metafp, " mode=3D%#o", mode);
-	if (slink) {
+	if (slink &&
+		(strcmp(type, "link") =3D=3D 0 ||
+		strcmp(type, "hlink") =3D=3D 0)) {
+		const char *prefix =3D "";
 		strsvis(buf, slink, VIS_CSTYLE, extra);	/* encode link =
*/
-		fprintf(metafp, " link=3D%s", buf);
+		if (strcmp(type, "hlink") =3D=3D 0) {
+			prefix =3D ".";
+		}
+		fprintf(metafp, " %s=3D%s%s", type, prefix, buf);
 	}
 	if (*type =3D=3D 'f') /* type=3Dfile */
 		fprintf(metafp, " size=3D%lld", (long long)size);
@@ -1352,6 +1364,8 @@ metadata_log(const char *path, const char *type, =
struct timeval *tv,
 		fprintf(metafp, " flags=3D%s", fflags);
 	if (tags)
 		fprintf(metafp, " tags=3D%s", tags);
+	if (category)
+		fprintf(metafp, " category=3D%s", category);
 	fputc('\n', metafp);
 	/* Flush line. */
 	fflush(metafp);
@@ -1372,15 +1386,15 @@ usage(void)
 {
 	(void)fprintf(stderr,
 "usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o =
owner]\n"
-"               [-M log] [-D dest] [-h hash] [-T tags]\n"
+"               [-M log] [-P category] [-D dest] [-h hash] [-T tags]\n"
 "               [-B suffix] [-l linkflags] [-N dbdir]\n"
 "               file1 file2\n"
 "       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o =
owner]\n"
-"               [-M log] [-D dest] [-h hash] [-T tags]\n"
+"               [-M log] [-P category] [-D dest] [-h hash] [-T tags]\n"
 "               [-B suffix] [-l linkflags] [-N dbdir]\n"
 "               file1 ... fileN directory\n"
 "       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]\n"
-"               [-M log] [-D dest] [-h hash] [-T tags]\n"
+"               [-M log] [-P category] [-D dest] [-h hash] [-T tags]\n"
 "               directory ...\n");
 	exit(EX_USAGE);
 	/* NOTREACHED */
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index 7a6fefd..4c3b89f 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -1,6 +1,9 @@
 #	From: @(#)Makefile	5.20 (Berkeley) 6/12/93
 # $FreeBSD$
=20
+META_CATEGORY=3Dbase
+.EXPORTVAR: META_CATEGORY
+
 .include <bsd.own.mk>
=20
 SUBDIR=3D	adduser \

--Apple-Mail=_15A94C1A-F8ED-40F8-8003-9FB67C14B62F--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?048B595B-6B91-40B6-84A4-E23948423354>