summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/populate_sdk_ext.bbclass60
-rw-r--r--meta/files/toolchain-shar-extract.sh10
2 files changed, 68 insertions, 2 deletions
diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass
index 2464acb68d..f1ae7c1236 100644
--- a/meta/classes/populate_sdk_ext.bbclass
+++ b/meta/classes/populate_sdk_ext.bbclass
@@ -459,6 +459,36 @@ def get_current_buildtools(d):
459 btfiles.sort(key=os.path.getctime) 459 btfiles.sort(key=os.path.getctime)
460 return os.path.basename(btfiles[-1]) 460 return os.path.basename(btfiles[-1])
461 461
462def get_sdk_required_utilities(buildtools_fn, d):
463 """Find required utilities that aren't provided by the buildtools"""
464 sanity_required_utilities = (d.getVar('SANITY_REQUIRED_UTILITIES', True) or '').split()
465 sanity_required_utilities.append(d.expand('${BUILD_PREFIX}gcc'))
466 sanity_required_utilities.append(d.expand('${BUILD_PREFIX}g++'))
467 buildtools_installer = os.path.join(d.getVar('SDK_DEPLOY', True), buildtools_fn)
468 filelist, _ = bb.process.run('%s -l' % buildtools_installer)
469 localdata = bb.data.createCopy(d)
470 localdata.setVar('SDKPATH', '.')
471 sdkpathnative = localdata.getVar('SDKPATHNATIVE', True)
472 sdkbindirs = [localdata.getVar('bindir_nativesdk', True),
473 localdata.getVar('sbindir_nativesdk', True),
474 localdata.getVar('base_bindir_nativesdk', True),
475 localdata.getVar('base_sbindir_nativesdk', True)]
476 for line in filelist.splitlines():
477 splitline = line.split()
478 if len(splitline) > 5:
479 fn = splitline[5]
480 if not fn.startswith('./'):
481 fn = './%s' % fn
482 if fn.startswith(sdkpathnative):
483 relpth = '/' + os.path.relpath(fn, sdkpathnative)
484 for bindir in sdkbindirs:
485 if relpth.startswith(bindir):
486 relpth = os.path.relpath(relpth, bindir)
487 if relpth in sanity_required_utilities:
488 sanity_required_utilities.remove(relpth)
489 break
490 return ' '.join(sanity_required_utilities)
491
462install_tools() { 492install_tools() {
463 install -d ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk} 493 install -d ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}
464 lnr ${SDK_OUTPUT}/${SDKPATH}/${scriptrelpath}/devtool ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/devtool 494 lnr ${SDK_OUTPUT}/${SDKPATH}/${scriptrelpath}/devtool ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/devtool
@@ -472,13 +502,38 @@ install_tools() {
472} 502}
473do_populate_sdk_ext[file-checksums] += "${COREBASE}/meta/files/ext-sdk-prepare.py:True" 503do_populate_sdk_ext[file-checksums] += "${COREBASE}/meta/files/ext-sdk-prepare.py:True"
474 504
475# Since bitbake won't run as root it doesn't make sense to try and install
476# the extensible sdk as root.
477sdk_ext_preinst() { 505sdk_ext_preinst() {
506 # Since bitbake won't run as root it doesn't make sense to try and install
507 # the extensible sdk as root.
478 if [ "`id -u`" = "0" ]; then 508 if [ "`id -u`" = "0" ]; then
479 echo "ERROR: The extensible sdk cannot be installed as root." 509 echo "ERROR: The extensible sdk cannot be installed as root."
480 exit 1 510 exit 1
481 fi 511 fi
512 if ! command -v locale > /dev/null; then
513 echo "ERROR: The installer requires the locale command, please install it first"
514 exit 1
515 fi
516 # Check setting of LC_ALL set above
517 canonicalised_locale=`echo $LC_ALL | sed 's/UTF-8/utf8/'`
518 if ! locale -a | grep -q $canonicalised_locale ; then
519 echo "ERROR: the installer requires the $LC_ALL locale to be installed (but not selected), please install it first"
520 exit 1
521 fi
522 # The relocation script used by buildtools installer requires python
523 if ! command -v python > /dev/null; then
524 echo "ERROR: The installer requires python, please install it first"
525 exit 1
526 fi
527 missing_utils=""
528 for util in ${SDK_REQUIRED_UTILITIES}; do
529 if ! command -v $util > /dev/null; then
530 missing_utils="$missing_utils $util"
531 fi
532 done
533 if [ -n "$missing_utils" ] ; then
534 echo "ERROR: the SDK requires the following missing utilities, please install them: $missing_utils"
535 exit 1
536 fi
482 SDK_EXTENSIBLE="1" 537 SDK_EXTENSIBLE="1"
483 if [ "$publish" = "1" ] ; then 538 if [ "$publish" = "1" ] ; then
484 EXTRA_TAR_OPTIONS="$EXTRA_TAR_OPTIONS --exclude=ext-sdk-prepare.py" 539 EXTRA_TAR_OPTIONS="$EXTRA_TAR_OPTIONS --exclude=ext-sdk-prepare.py"
@@ -542,6 +597,7 @@ fakeroot python do_populate_sdk_ext() {
542 597
543 d.setVar('SDK_INSTALL_TARGETS', get_sdk_install_targets(d)) 598 d.setVar('SDK_INSTALL_TARGETS', get_sdk_install_targets(d))
544 buildtools_fn = get_current_buildtools(d) 599 buildtools_fn = get_current_buildtools(d)
600 d.setVar('SDK_REQUIRED_UTILITIES', get_sdk_required_utilities(buildtools_fn, d))
545 d.setVar('SDK_BUILDTOOLS_INSTALLER', buildtools_fn) 601 d.setVar('SDK_BUILDTOOLS_INSTALLER', buildtools_fn)
546 602
547 bb.build.exec_func("do_populate_sdk", d) 603 bb.build.exec_func("do_populate_sdk", d)
diff --git a/meta/files/toolchain-shar-extract.sh b/meta/files/toolchain-shar-extract.sh
index 434510470b..66c017f50d 100644
--- a/meta/files/toolchain-shar-extract.sh
+++ b/meta/files/toolchain-shar-extract.sh
@@ -143,6 +143,16 @@ if [ "$SDK_EXTENSIBLE" = "1" ]; then
143 "characters such as spaces, @, \$ or +. Abort!" 143 "characters such as spaces, @, \$ or +. Abort!"
144 exit 1 144 exit 1
145 fi 145 fi
146 # The build system doesn't work well with /tmp on NFS
147 fs_dev_path="$target_sdk_dir"
148 while [ ! -d "$fs_dev_path" ] ; do
149 fs_dev_path=`dirname $fs_dev_path`
150 done
151 fs_dev_type=`stat -f -c '%t' "$fs_dev_path"`
152 if [ "$fsdevtype" = "6969" ] ; then
153 echo "The target directory path $target_sdk_dir is on NFS, this is not possible. Abort!"
154 exit 1
155 fi
146else 156else
147 if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then 157 if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
148 echo "The target directory path ($target_sdk_dir) contains spaces. Abort!" 158 echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"