diff options
Diffstat (limited to 'meta/classes/populate_sdk_ext.bbclass')
| -rw-r--r-- | meta/classes/populate_sdk_ext.bbclass | 60 |
1 files changed, 58 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) |
