poky/scripts/bitbake
Roy.Li b74d54b67a bitbake: compile tar-replacement firstly
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>
2012-08-29 16:01:39 -07:00

5.8 KiB
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