diff options
-rw-r--r-- | meta/classes/populate_sdk_ext.bbclass | 60 | ||||
-rw-r--r-- | meta/files/toolchain-shar-extract.sh | 10 |
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 | ||
462 | def 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 | |||
462 | install_tools() { | 492 | install_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 | } |
473 | do_populate_sdk_ext[file-checksums] += "${COREBASE}/meta/files/ext-sdk-prepare.py:True" | 503 | do_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. | ||
477 | sdk_ext_preinst() { | 505 | sdk_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 | ||
146 | else | 156 | else |
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!" |