diff options
Diffstat (limited to 'meta/classes/package.bbclass')
| -rw-r--r-- | meta/classes/package.bbclass | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 62050a18b8..4850134022 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
| @@ -553,13 +553,25 @@ def copydebugsources(debugsrcdir, sources, d): | |||
| 553 | strip = d.getVar("STRIP") | 553 | strip = d.getVar("STRIP") |
| 554 | objcopy = d.getVar("OBJCOPY") | 554 | objcopy = d.getVar("OBJCOPY") |
| 555 | workdir = d.getVar("WORKDIR") | 555 | workdir = d.getVar("WORKDIR") |
| 556 | sdir = d.getVar("S") | ||
| 557 | sparentdir = os.path.dirname(os.path.dirname(sdir)) | ||
| 558 | sbasedir = os.path.basename(os.path.dirname(sdir)) + "/" + os.path.basename(sdir) | ||
| 556 | workparentdir = os.path.dirname(os.path.dirname(workdir)) | 559 | workparentdir = os.path.dirname(os.path.dirname(workdir)) |
| 557 | workbasedir = os.path.basename(os.path.dirname(workdir)) + "/" + os.path.basename(workdir) | 560 | workbasedir = os.path.basename(os.path.dirname(workdir)) + "/" + os.path.basename(workdir) |
| 558 | 561 | ||
| 562 | # If S isnt based on WORKDIR we can infer our sources are located elsewhere, | ||
| 563 | # e.g. using externalsrc; use S as base for our dirs | ||
| 564 | if workdir in sdir: | ||
| 565 | basedir = workbasedir | ||
| 566 | parentdir = workparentdir | ||
| 567 | else: | ||
| 568 | basedir = sbasedir | ||
| 569 | parentdir = sparentdir | ||
| 570 | |||
| 559 | # If build path exists in sourcefile, it means toolchain did not use | 571 | # If build path exists in sourcefile, it means toolchain did not use |
| 560 | # -fdebug-prefix-map to compile | 572 | # -fdebug-prefix-map to compile |
| 561 | if checkbuildpath(sourcefile, d): | 573 | if checkbuildpath(sourcefile, d): |
| 562 | localsrc_prefix = workparentdir + "/" | 574 | localsrc_prefix = parentdir + "/" |
| 563 | else: | 575 | else: |
| 564 | localsrc_prefix = "/usr/src/debug/" | 576 | localsrc_prefix = "/usr/src/debug/" |
| 565 | 577 | ||
| @@ -581,7 +593,7 @@ def copydebugsources(debugsrcdir, sources, d): | |||
| 581 | processdebugsrc += "sed 's#%s##g' | " | 593 | processdebugsrc += "sed 's#%s##g' | " |
| 582 | processdebugsrc += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)" | 594 | processdebugsrc += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)" |
| 583 | 595 | ||
| 584 | cmd = processdebugsrc % (sourcefile, workbasedir, localsrc_prefix, workparentdir, dvar, debugsrcdir) | 596 | cmd = processdebugsrc % (sourcefile, basedir, localsrc_prefix, parentdir, dvar, debugsrcdir) |
| 585 | try: | 597 | try: |
| 586 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) | 598 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) |
| 587 | except subprocess.CalledProcessError: | 599 | except subprocess.CalledProcessError: |
| @@ -591,9 +603,22 @@ def copydebugsources(debugsrcdir, sources, d): | |||
| 591 | # cpio seems to have a bug with -lL together and symbolic links are just copied, not dereferenced. | 603 | # cpio seems to have a bug with -lL together and symbolic links are just copied, not dereferenced. |
| 592 | # Work around this by manually finding and copying any symbolic links that made it through. | 604 | # Work around this by manually finding and copying any symbolic links that made it through. |
| 593 | cmd = "find %s%s -type l -print0 -delete | sed s#%s%s/##g | (cd '%s' ; cpio -pd0mL --no-preserve-owner '%s%s')" % \ | 605 | cmd = "find %s%s -type l -print0 -delete | sed s#%s%s/##g | (cd '%s' ; cpio -pd0mL --no-preserve-owner '%s%s')" % \ |
| 594 | (dvar, debugsrcdir, dvar, debugsrcdir, workparentdir, dvar, debugsrcdir) | 606 | (dvar, debugsrcdir, dvar, debugsrcdir, parentdir, dvar, debugsrcdir) |
| 595 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) | 607 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) |
| 596 | 608 | ||
| 609 | |||
| 610 | # debugsources.list may be polluted from the host if we used externalsrc, | ||
| 611 | # cpio uses copy-pass and may have just created a directory structure | ||
| 612 | # matching the one from the host, if thats the case move those files to | ||
| 613 | # debugsrcdir to avoid host contamination. | ||
| 614 | # Empty dir structure will be deleted in the next step. | ||
| 615 | |||
| 616 | # Same check as above for externalsrc | ||
| 617 | if workdir not in sdir: | ||
| 618 | if os.path.exists(dvar + debugsrcdir + sdir): | ||
| 619 | cmd = "mv %s%s%s/* %s%s" % (dvar, debugsrcdir, sdir, dvar,debugsrcdir) | ||
| 620 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) | ||
| 621 | |||
| 597 | # The copy by cpio may have resulted in some empty directories! Remove these | 622 | # The copy by cpio may have resulted in some empty directories! Remove these |
| 598 | cmd = "find %s%s -empty -type d -delete" % (dvar, debugsrcdir) | 623 | cmd = "find %s%s -empty -type d -delete" % (dvar, debugsrcdir) |
| 599 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) | 624 | subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) |
