svn commit: r255775 - head/include

Tim Kientzle tim at kientzle.com
Fri Sep 27 02:35:16 UTC 2013


Ian,

Sorry for being a little slow to respond.

It took me a while, but I have verified that a recent checkout, in my environment:

 * Does build with this patch.
 * Does not build without it.

Please commit.

Thanks,

Tim


On Sep 23, 2013, at 7:38 AM, Ian Lepore <ian at freebsd.org> wrote:

> Yeah, I think the moral of this neverending story is that relying on $0
> for pathnames is a Bad Idea.  Apparently in addition to the patch from
> PR 160646, we still need something like the patch I proposed in PR
> 174422.  I'll attach an updated version of that.  I've got a test build
> running now, I'll see about getting it commited if it fixes the problem
> you're seeing.
> 
> -- Ian
> 
> On Mon, 2013-09-23 at 06:49 -0700, Tim Kientzle wrote:
>> This breaks the build in the peculiar case where you have
>> a git checkout of some other project, then a FreeBSD SVN
>> checkout inside of that:
>> 
>>  Project/.git
>>  Project/src/  -- FreeBSD source tree.
>> 
>> For some reason newvers.sh is now looking one level too far
>> up, so it's seeing the dir containing the source tree instead of the
>> root of the source tree.
>> 
>> This may be related to the use of '.' to run newvers.sh
>> combined with newvers.sh using $(basename $0) to determine
>> the script dir, but I haven't dug through in detail yet.
>> 
>> Tim
>> 
>> 
>> 
>> On Sep 21, 2013, at 3:36 PM, Ian Lepore <ian at freebsd.org> wrote:
>> 
>>> Author: ian
>>> Date: Sat Sep 21 22:36:07 2013
>>> New Revision: 255775
>>> URL: http://svnweb.freebsd.org/changeset/base/255775
>>> 
>>> Log:
>>> Create a separate script to generate osreldate.h rather than sourcing
>>> newvers.sh into a temporary subshell with inline make rules.
>>> 
>>> Using a separate script fixes a variety of problems, including establishing
>>> the correct dependencies in the makefiles.  It also eliminates a problem
>>> with the way newvers.sh uses `realpath $0`, because $0 expands differently
>>> within a script sourced into a rule in a makefile depending on the version
>>> of make and of /bin/sh being used.  The latter can cause build breakage in a
>>> cross-build environment, and can also make it difficult to compile 10.0 on
>>> older pre-10.0 systems.
>>> 
>>> PR:		160646 174422
>>> Submitted by:	Garrett Cooper <yaneurabeya at gmail.com>
>>> Approved by:	re (gjb)
>>> MFC after:	2 weeks
>>> 
>>> Added:
>>> head/include/mk-osreldate.sh   (contents, props changed)
>>> Modified:
>>> head/include/Makefile
>>> 
>>> Modified: head/include/Makefile
>>> ==============================================================================
>>> --- head/include/Makefile	Sat Sep 21 22:24:10 2013	(r255774)
>>> +++ head/include/Makefile	Sat Sep 21 22:36:07 2013	(r255775)
>>> @@ -104,19 +104,16 @@ SHARED?=	copies
>>> 
>>> INCS+=	osreldate.h
>>> 
>>> -osreldate.h: ${.CURDIR}/../sys/conf/newvers.sh ${.CURDIR}/../sys/sys/param.h \
>>> -    ${.CURDIR}/Makefile
>>> -	@${ECHO} creating osreldate.h from newvers.sh
>>> -	@MAKE=${MAKE}; \
>>> -	PARAMFILE=${.CURDIR}/../sys/sys/param.h; \
>>> -	. ${.CURDIR}/../sys/conf/newvers.sh; \
>>> -	echo "$$COPYRIGHT" > osreldate.h; \
>>> -	echo "#ifdef _KERNEL" >> osreldate.h; \
>>> -	echo "#error \"<osreldate.h> cannot be used in the kernel, use <sys/param.h>\"" >> osreldate.h; \
>>> -	echo "#else" >> osreldate.h; \
>>> -	echo "#undef __FreeBSD_version" >> osreldate.h; \
>>> -	echo "#define __FreeBSD_version $$RELDATE" >> osreldate.h; \
>>> -	echo "#endif" >> osreldate.h
>>> +NEWVERS_SH=		${.CURDIR}/../sys/conf/newvers.sh
>>> +PARAM_H=		${.CURDIR}/../sys/sys/param.h
>>> +MK_OSRELDATE_SH=	${.CURDIR}/mk-osreldate.sh
>>> +
>>> +osreldate.h vers.c: ${NEWVERS_SH} ${PARAM_H} ${MK_OSRELDATE_SH}
>>> +	env ECHO="${ECHO}" \
>>> +	    MAKE="${MAKE}" \
>>> +	    NEWVERS_SH=${NEWVERS_SH} \
>>> +	    PARAM_H=${PARAM_H} \
>>> +	    ${MK_OSRELDATE_SH}
>>> 
>>> .for i in ${LHDRS}
>>> INCSLINKS+=	sys/$i ${INCLUDEDIR}/$i
>>> 
>>> Added: head/include/mk-osreldate.sh
>>> ==============================================================================
>>> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
>>> +++ head/include/mk-osreldate.sh	Sat Sep 21 22:36:07 2013	(r255775)
>>> @@ -0,0 +1,49 @@
>>> +#!/bin/sh -
>>> +# Copyright (c) 2013 Garrett Cooper
>>> +# All rights reserved.
>>> +#
>>> +# Redistribution and use in source and binary forms, with or without
>>> +# modification, are permitted provided that the following conditions
>>> +# are met:
>>> +# 1. Redistributions of source code must retain the above copyright
>>> +#    notice, this list of conditions and the following disclaimer.
>>> +# 2. Redistributions in binary form must reproduce the above copyright
>>> +#    notice, this list of conditions and the following disclaimer in the
>>> +#    documentation and/or other materials provided with the distribution.
>>> +#
>>> +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
>>> +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>>> +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>>> +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
>>> +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
>>> +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
>>> +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
>>> +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
>>> +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
>>> +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>>> +# SUCH DAMAGE.
>>> +#
>>> +# $FreeBSD$
>>> +
>>> +set -e
>>> +
>>> +CURDIR=$(pwd)
>>> +ECHO=${ECHO:=echo}
>>> +
>>> +tmpfile=$(mktemp osreldate.XXXXXXXX)
>>> +trap "rm -f $tmpfile" EXIT
>>> +
>>> +${ECHO} creating osreldate.h from newvers.sh
>>> +
>>> +export PARAMFILE="${PARAM_H:=$CURDIR/../sys/sys/param.h}"
>>> +. "${NEWVERS_SH:=$CURDIR/../sys/conf/newvers.sh}"
>>> +cat > $tmpfile <<EOF
>>> +$COPYRIGHT
>>> +#ifdef _KERNEL
>>> +#error "<osreldate.h> cannot be used in the kernel, use <sys/param.h>"
>>> +#else
>>> +#undef __FreeBSD_version
>>> +#define __FreeBSD_version $RELDATE
>>> +#endif
>>> +EOF
>>> +mv $tmpfile osreldate.h
>> 
> 
> Index: include/Makefile
> ===================================================================
> --- include/Makefile	(revision 255808)
> +++ include/Makefile	(working copy)
> @@ -104,8 +104,9 @@ SHARED?=	copies
> 
> INCS+=	osreldate.h
> 
> -NEWVERS_SH=		${.CURDIR}/../sys/conf/newvers.sh
> -PARAM_H=		${.CURDIR}/../sys/sys/param.h
> +SYSDIR=			${.CURDIR}/../sys
> +NEWVERS_SH=		${SYSDIR}/conf/newvers.sh
> +PARAM_H=		${SYSDIR}/sys/param.h
> MK_OSRELDATE_SH=	${.CURDIR}/mk-osreldate.sh
> 
> osreldate.h vers.c: ${NEWVERS_SH} ${PARAM_H} ${MK_OSRELDATE_SH}
> @@ -113,6 +114,7 @@ osreldate.h vers.c: ${NEWVERS_SH} ${PARAM_H} ${MK_
> 	    MAKE="${MAKE}" \
> 	    NEWVERS_SH=${NEWVERS_SH} \
> 	    PARAM_H=${PARAM_H} \
> +	    SYSDIR=${SYSDIR} \
> 	    sh ${MK_OSRELDATE_SH}
> 
> .for i in ${LHDRS}
> Index: sys/conf/newvers.sh
> ===================================================================
> --- sys/conf/newvers.sh	(revision 255808)
> +++ sys/conf/newvers.sh	(working copy)
> @@ -38,8 +38,11 @@ if [ "X${BRANCH_OVERRIDE}" != "X" ]; then
> fi
> RELEASE="${REVISION}-${BRANCH}"
> VERSION="${TYPE} ${RELEASE}"
> -SYSDIR=$(dirname $0)/..
> 
> +if [ "X${SYSDIR}" = "X" ]; then
> +    SYSDIR=$(dirname $0)/..
> +fi
> +
> if [ "X${PARAMFILE}" != "X" ]; then
> 	RELDATE=$(awk '/__FreeBSD_version.*propagated to newvers/ {print $3}' \
> 		${PARAMFILE})



More information about the svn-src-head mailing list