WITH_META_MODE: Lessen the filemon(4) requirement scope.

- Move the sys.mk filemon requirement to bsd.init.mk as a warning.
  This is intended only to show when building directly in a subdirectory
  without filemon loaded.
- Move the error into Makefile and only apply it when building
  from the META_TGT_WHITELIST target list.

-DNO_FILEMON can be used to suppress both the warning and the error but
makes WITH_META_MODE less useful.  It will only compare build commands
in this mode rather than track all dependencies.

This fixes installing from a jail which doesn't need filemon in this
phase [1].

Reported by:	Nikolai Lifanov <lifanov@mail.lifanov.com> [1]
Approved by:	re (implicit)
Sponsored by:	EMC / Isilon Storage Division
This commit is contained in:
Bryan Drewery 2016-06-14 16:20:19 +00:00
parent 2c6fc926b3
commit b8ef21b88a
4 changed files with 23 additions and 6 deletions

View File

@ -219,6 +219,13 @@ _CAN_USE_META_MODE?= yes
.if !defined(_CAN_USE_META_MODE) .if !defined(_CAN_USE_META_MODE)
_MAKE+= MK_META_MODE=no _MAKE+= MK_META_MODE=no
.unexport META_MODE .unexport META_MODE
.elif ${MK_META_MODE} == "yes"
.if !exists(/dev/filemon) && !defined(NO_FILEMON) && !make(showconfig)
# Require filemon be loaded to provide a working incremental build
.error ${.newline}ERROR: The filemon module (/dev/filemon) is not loaded. \
${.newline}ERROR: WITH_META_MODE is enabled but requires filemon for an incremental build. \
${.newline}ERROR: 'kldload filemon' or pass -DNO_FILEMON to suppress this error.
.endif # !exists(/dev/filemon) && !defined(NO_FILEMON)
.endif # !defined(_CAN_USE_META_MODE) .endif # !defined(_CAN_USE_META_MODE)
# Guess machine architecture from machine type, and vice versa. # Guess machine architecture from machine type, and vice versa.

View File

@ -28,4 +28,14 @@ _SKIP_BUILD = not building at level 0
.warning ${_SKIP_BUILD} .warning ${_SKIP_BUILD}
.endif .endif
.if ${MK_META_MODE} == "yes"
.if !exists(/dev/filemon) && \
${UPDATE_DEPENDFILE:Uyes:tl} != "no" && !defined(NO_FILEMON) && \
!make(showconfig)
.warning The filemon module (/dev/filemon) is not loaded.
.warning META_MODE is less useful for incremental builds without filemon.
.warning 'kldload filemon' or pass -DNO_FILEMON to suppress this warning.
.endif
.endif # ${MK_META_MODE} == "yes"
.endif # !target(__<bsd.init.mk>__) .endif # !target(__<bsd.init.mk>__)

View File

@ -60,10 +60,6 @@ META_MODE+= missing-meta=yes
META_MODE+= silent=yes META_MODE+= silent=yes
.endif .endif
.if !exists(/dev/filemon) .if !exists(/dev/filemon)
.if ${UPDATE_DEPENDFILE:Uyes:tl} != "no" && !defined(NO_FILEMON) && \
!make(showconfig)
.error ${.newline}ERROR: The filemon module (/dev/filemon) is not loaded.
.endif
META_MODE+= nofilemon META_MODE+= nofilemon
.endif .endif
# Require filemon data with bmake # Require filemon data with bmake

View File

@ -7,9 +7,13 @@ using
The meta file is created in the OBJDIR as The meta file is created in the OBJDIR as
.Pa target.meta . .Pa target.meta .
These meta files track the command ran, its output, and the current directory. These meta files track the command ran, its output, and the current directory.
When the The
.Xr filemon 4 .Xr filemon 4
module is loaded, any files used by the commands executed will be tracked as module is required unless
.Va NO_FILEMON
is defined.
When the module is loaded, any files used by the commands executed will be
tracked as
dependencies for the target in its meta file. dependencies for the target in its meta file.
The target will be considered out-of-date and rebuilt if any of the following The target will be considered out-of-date and rebuilt if any of the following
are true compared to the last build: are true compared to the last build: