mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-01 13:58:04 +00:00
Compiling tar-replacement or not is decided by version of host tar, if the host tar version is lower than 1.23, Compiling tar-replacement is needed. When doing popoluate tar-replacement sysroot to write the tar to sysroot, but writing is not finished. other packages probably use the being written tar to unzip file, which will lead to failure and report the below error: "bitbake_build/tmp/sysroots/x86_64-linux/usr/bin/tar: Text file busy" Now we compile tar-replacement firstly to ensure that a being written tar command will not be used. (From OE-Core rev: 3c1c4719fc96f6f1fbb257413d6baf3d91fdf4e8) Signed-off-by: Roy.Li <rongqing.li@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
185 lines
5.8 KiB
Bash
Executable File
185 lines
5.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# This is the bitbake wrapper script that ensures everything is set up
|
|
# correctly in the environment, builds pseudo separately if it hasn't
|
|
# already been built, and then runs bitbake within pseudo.
|
|
|
|
export BBFETCH2=True
|
|
export BB_ENV_EXTRAWHITE="PSEUDO_BUILD PSEUDO_DISABLED $BB_ENV_EXTRAWHITE"
|
|
|
|
# For certain operations (i.e. that won't be actually running any tasks)
|
|
# we don't need pseudo
|
|
NO_BUILD_OPTS="--version -h --help -p --parse-only -s --show-versions -e --environment -g --graphviz"
|
|
|
|
# Some options are useful to pass through to the initial pseudo build if
|
|
# that needs to be run (for debugging)
|
|
PASSTHROUGH_OPTS="-D -DD -DDD -DDDD -v"
|
|
|
|
needpseudo="1"
|
|
for opt in $@; do
|
|
for key in $NO_BUILD_OPTS; do
|
|
if [ $opt = $key ]
|
|
then
|
|
needpseudo="0"
|
|
break
|
|
fi
|
|
done
|
|
[ $needpseudo = "0" ] && break
|
|
done
|
|
|
|
# Make sure we're not using python v3.x. This check can't go into
|
|
# sanity.bbclass because bitbake's source code doesn't even pass
|
|
# parsing stage when used with python v3, so we catch it here so we
|
|
# can offer a meaningful error message.
|
|
py_v3_check=`/usr/bin/env python --version 2>&1 | grep "Python 3"`
|
|
if [ "$py_v3_check" != "" ]; then
|
|
echo "Bitbake is not compatible with python v3"
|
|
echo "Please set up python v2 as your default python interpreter"
|
|
exit 1
|
|
fi
|
|
|
|
# Similarly, we now have code that doesn't parse correctly with older
|
|
# versions of Python, and rather than fixing that and being eternally
|
|
# vigilant for any other new feature use, just check the version here.
|
|
py_v26_check=`python -c 'import sys; print sys.version_info >= (2,6,0)'`
|
|
if [ "$py_v26_check" != "True" ]; then
|
|
echo "BitBake requires Python 2.6 or later"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e conf/bblayers.conf ] ; then
|
|
BDPRINT=""
|
|
[ -n "$BUILDDIR" ] && BDPRINT=": $BUILDDIR"
|
|
echo "Unable to find conf/bblayers.conf"
|
|
echo "BitBake must be run from within your build directory$BDPRINT"
|
|
exit 1
|
|
elif [ -z "$BUILDDIR" ] ; then
|
|
BUILDDIR="`pwd`"
|
|
fi
|
|
|
|
needtar="1"
|
|
needgit="1"
|
|
TARVERSION=`tar --version | head -n 1 | cut -d ' ' -f 4`
|
|
GITVERSION=`git --version | cut -d ' ' -f 3`
|
|
float_test() {
|
|
echo | awk 'END { exit ( !( '"$1"')); }'
|
|
}
|
|
version_compare() {
|
|
python -c "from distutils.version import LooseVersion; import sys; sys.exit(not (LooseVersion('$1') $2 LooseVersion('$3')))"
|
|
}
|
|
|
|
# Tar version 1.24 and onwards handle overwriting symlinks correctly
|
|
# but earlier versions do not; this needs to work properly for sstate
|
|
float_test "$TARVERSION > 1.23" && needtar="0"
|
|
|
|
# Need git >= 1.7.5 for git-remote --mirror=xxx syntax
|
|
version_compare $GITVERSION ">=" 1.7.5 && needgit="0"
|
|
|
|
|
|
buildpseudo="1"
|
|
if [ $needpseudo = "1" ]; then
|
|
if [ -e "$BUILDDIR/pseudodone" ]; then
|
|
PSEUDOBINDIR=`cat $BUILDDIR/pseudodone`
|
|
else
|
|
PSEUDOBINDIR=`bitbake -e | grep STAGING_BINDIR_NATIVE=\" | cut -d '=' -f2 | cut -d '"' -f2`
|
|
fi
|
|
if [ -e "$PSEUDOBINDIR/pseudo" ]; then
|
|
buildpseudo="0"
|
|
fi
|
|
|
|
# Verify that the pseudo recipes are older then the pseudodone file
|
|
PSEUDO_RECIPE="`dirname $0`/../meta/recipes-devtools/pseudo"
|
|
if [ $buildpseudo -eq 0 ] && [ ! -d "$PSEUDO_RECIPE" ]; then
|
|
echo "Unable to verify if pseudo-native is up to date..." >&2
|
|
elif [ $buildpseudo -eq 0 ]; then
|
|
PSEUDO_NEWER=`find $PSEUDO_RECIPE -type f -newer $BUILDDIR/pseudodone`
|
|
if [ -n "$PSEUDO_NEWER" ]; then
|
|
buildpseudo="2"
|
|
fi
|
|
fi
|
|
if [ $buildpseudo = "0" -a ! -e "$BUILDDIR/pseudodone" ] ; then
|
|
echo $PSEUDOBINDIR > $BUILDDIR/pseudodone
|
|
fi
|
|
fi
|
|
|
|
# If tar is already built, we don't want to do it again...
|
|
if [ -e "$PSEUDOBINDIR/tar" -a "$needtar" = "1" ]; then
|
|
needtar="0"
|
|
fi
|
|
# If git is already built, we don't want to do it again...
|
|
if [ -e "$PSEUDOBINDIR/git" -a "$needgit" = "1" ]; then
|
|
needgit="0"
|
|
fi
|
|
|
|
if [ $needpseudo = "0" ]; then
|
|
buildpseudo="0"
|
|
fi
|
|
|
|
# If pseudo-native is an argument, assume the user wants to build pseudo-native!
|
|
if [ $needpseudo != "0" -a $buildpseudo -eq 0 ]; then
|
|
for opt in $@; do
|
|
if [ "$opt" = "pseudo-native" ]; then
|
|
buildpseudo="3"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
OLDPATH=$PATH
|
|
export PATH=`echo $PATH | sed s#[^:]*/scripts:##`
|
|
if [ $buildpseudo -gt 0 ]; then
|
|
[ $buildpseudo -eq 1 ] && echo "Pseudo is not present but is required, building this first before the main build"
|
|
[ $buildpseudo -eq 2 ] && echo "Pseudo may be out of date, rebuilding pseudo before the main build"
|
|
[ $buildpseudo -eq 3 ] && echo "Building pseudo-native before main build"
|
|
export PSEUDO_BUILD=1
|
|
TARTARGET="tar-replacement-native"
|
|
if [ $needtar = "0" ]; then
|
|
TARTARGET=""
|
|
fi
|
|
GITTARGET="git-replacement-native"
|
|
if [ $needgit = "0" ]; then
|
|
GITTARGET=""
|
|
fi
|
|
|
|
# Pass through debug options
|
|
additionalopts=""
|
|
for opt in $@; do
|
|
for key in $PASSTHROUGH_OPTS; do
|
|
if [ $opt = $key ]
|
|
then
|
|
additionalopts="$additionalopts $opt"
|
|
break
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [ $needtar = "1" ]; then
|
|
bitbake $TARTARGET -c populate_sysroot
|
|
fi
|
|
|
|
bitbake pseudo-native $GITTARGET $additionalopts -c populate_sysroot
|
|
ret=$?
|
|
if [ "$ret" != "0" ]; then
|
|
exit 1
|
|
fi
|
|
PSEUDOBINDIR=`bitbake -e | grep STAGING_BINDIR_NATIVE=\" | cut -d '=' -f2 | cut -d '"' -f2`
|
|
ret=$?
|
|
if [ "$ret" != "0" ]; then
|
|
exit 1
|
|
fi
|
|
echo $PSEUDOBINDIR > $BUILDDIR/pseudodone
|
|
# This needs to exist in case pseudo has to log somewhere
|
|
mkdir -p $PSEUDOBINDIR/../../var/pseudo
|
|
fi
|
|
BITBAKE=`which bitbake`
|
|
export PATH=$OLDPATH
|
|
if [ $needpseudo = "1" ]; then
|
|
export PSEUDO_BUILD=2
|
|
PSEUDO_BINDIR=$PSEUDOBINDIR PSEUDO_LIBDIR=$PSEUDOBINDIR/../lib/pseudo/lib PSEUDO_PREFIX=$PSEUDOBINDIR/../../ PSEUDO_DISABLED=1 $PSEUDOBINDIR/pseudo $BITBAKE $@
|
|
else
|
|
export PSEUDO_BUILD=0
|
|
$BITBAKE $@
|
|
fi
|
|
ret=$?
|
|
exit $ret
|