Date: Tue, 30 Sep 2014 16:22:05 +0000 (UTC) From: Bryan Drewery <bdrewery@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r369644 - in head: . Mk Message-ID: <201409301622.s8UGM5lB082567@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@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@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409301622.s8UGM5lB082567>