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 <i...@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 <yaneurab...@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})
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to