svn commit: r369644 - in head: . Mk

Bryan Drewery bdrewery at FreeBSD.org
Tue Sep 30 16:22:06 UTC 2014


Author: bdrewery
Date: Tue Sep 30 16:22:05 2014
New Revision: 369644
URL: http://svnweb.freebsd.org/changeset/ports/369644
QAT: https://qat.redports.org/buildarchive/r369644/

Log:
  If either of OSVERSION or UNAME_r is improperly set when building in a
  jail/chroot, a number of unexpected errors can occur.
  
    1. autotools fixup may not run when needed. This could be avoided by always
       running it [PR 177980, 177403].
    2. Not having UNAME_r set will cause many unknown
       errors. Many ports use OSREL (derived from UNAME_r) to determine the name
       of files. This is usually also due to the port build itself using uname -r
       to derive filenames or 'built for' messages. [PR 192449, 191943] Without
       having these sanity checks it is very easy for users to get into
       situations where "everything worked" until they touch a certain port that
       reads uname(1) output or OSVERSION. It has always been necessary to define
       all of the UNAME_ vars and OSVERSION (or have a proper sys/param.h
       present), but many users do not know this.
  
  Remove the fallback on the kernel for kern.osreldate as it easily gets the
  answer wrong.
  
  I have added sanity checks to ensure OSVERSION==OSREL==UNAME_r as these are the
  most critical vars to have set properly.
  
  Differential Revision:	https://reviews.freebsd.org/D869
  PR:			177980, 177403, 192449, 191943
  Reviewed by:		antoine, bapt, gjb
  With hat:		portmgr

Modified:
  head/CHANGES
  head/Mk/bsd.port.mk

Modified: head/CHANGES
==============================================================================
--- head/CHANGES	Tue Sep 30 16:19:41 2014	(r369643)
+++ head/CHANGES	Tue Sep 30 16:22:05 2014	(r369644)
@@ -10,6 +10,36 @@ in the release notes and/or placed into 
 
 All ports committers are allowed to commit to this file.
 
+20140930:
+AUTHOR: bdrewery at FreeBSD.org
+
+  Building ports in a chroot or jail have always required a particular
+  environment be setup. This was not clear though and the ports framework
+  did not enforce it. These requirements are:
+    1. Either a SRC_BASE/sys/sys/param.h, or /usr/include/sys/param.h be
+       present with the __FreeBSD_version_ number of the target system,
+       or OSVERSION be set in the environment. Lack of these would fallback
+       on kern.osreldate before, which is no longer the case.
+    2. UNAME_r,UNAME_v,UNAME_s all must be set for the target system.
+
+  Not having these values in sync will now cause the build to error until it is
+  resolved.
+
+  Setting these in the environment can be done via your own wrapper scripts,
+  or /etc/login.conf (along with cap_mkdb /etc/login.conf) or
+  via /etc/make.conf using appropriate values. Note that OSVERSION is redundant
+  if a proper param.h is in the environment:
+
+    OSVERSION+=     1100036
+    UNAME_ENV+=     OSVERSION=${OSVERSION}
+    UNAME_ENV+=     UNAME_s=FreeBSD
+    UNAME_ENV+=     UNAME_r=11.0-CURRENT
+    UNAME_ENV+=     UNAME_v="${UNAME_s} ${UNAME_r}"
+    .MAKEFLAGS:     ${UNAME_ENV}
+    MAKE_ENV+=      ${UNAME_ENV}
+    CONFIGURE_ENV+= ${UNAME_ENV}
+    SCRIPTS_ENV+=   ${UNAME_ENV}
+
 20140922:
 AUTHOR: bapt at FreeBSD.org
 

Modified: head/Mk/bsd.port.mk
==============================================================================
--- head/Mk/bsd.port.mk	Tue Sep 30 16:19:41 2014	(r369643)
+++ head/Mk/bsd.port.mk	Tue Sep 30 16:22:05 2014	(r369644)
@@ -1186,10 +1186,10 @@ ARCH!=	${UNAME} -p
 OPSYS!=	${UNAME} -s
 .endif
 
+UNAMER!=${UNAME} -r
+
 # Get the operating system revision
-.if !defined(OSREL)
-OSREL!=	${UNAME} -r | ${SED} -e 's/[-(].*//'
-.endif
+OSREL?=	${UNAMER:C/-.*//}
 
 # Get __FreeBSD_version
 .if !defined(OSVERSION)
@@ -1198,10 +1198,19 @@ OSVERSION!=	${AWK} '/^\#define[[:blank:]
 .elif exists(${SRC_BASE}/sys/sys/param.h)
 OSVERSION!=	${AWK} '/^\#define[[:blank:]]__FreeBSD_version/ {print $$3}' < ${SRC_BASE}/sys/sys/param.h
 .else
-OSVERSION!=	${SYSCTL} -n kern.osreldate
+.error Unable to determine OS version.  Either define OSVERSION, install /usr/include/sys/param.h or define SRC_BASE.
 .endif
 .endif
 
+# Convert OSVERSION to major release number
+_OSVERSION_MAJOR=	${OSVERSION:C/([0-9]?[0-9])([0-9][0-9])[0-9]{3}/\1/}
+# Sanity checks for chroot/jail building.
+.if ${_OSVERSION_MAJOR} != ${UNAMER:R}
+.error UNAME_r (${UNAMER}) and OSVERSION (${OSVERSION}) do not agree on major version number.
+.elif ${_OSVERSION_MAJOR} != ${OSREL:R}
+.error OSREL (${OSREL}) and OSVERSION (${OSVERSION}) do not agree on major version number.
+.endif
+
 # Enable new xorg for FreeBSD versions after Radeon KMS was imported unless
 # WITHOUT_NEW_XORG is set.
 .if (${OSVERSION} >= 902510 && ${OSVERSION} < 1000000) || ${OSVERSION} >= 1000704


More information about the svn-ports-head mailing list