#!/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