diff options
Diffstat (limited to 'meta/classes/package.bbclass')
| -rw-r--r-- | meta/classes/package.bbclass | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 7dd1b09a87..749c7d9ea1 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
| @@ -344,7 +344,7 @@ def parse_debugsources_from_dwarfsrcfiles_output(dwarfsrcfiles_output): | |||
| 344 | 344 | ||
| 345 | return debugfiles.keys() | 345 | return debugfiles.keys() |
| 346 | 346 | ||
| 347 | def append_source_info(file, sourcefile, d, fatal=True): | 347 | def source_info(file, d, fatal=True): |
| 348 | import subprocess | 348 | import subprocess |
| 349 | 349 | ||
| 350 | cmd = ["dwarfsrcfiles", file] | 350 | cmd = ["dwarfsrcfiles", file] |
| @@ -363,22 +363,15 @@ def append_source_info(file, sourcefile, d, fatal=True): | |||
| 363 | bb.note(msg) | 363 | bb.note(msg) |
| 364 | 364 | ||
| 365 | debugsources = parse_debugsources_from_dwarfsrcfiles_output(output) | 365 | debugsources = parse_debugsources_from_dwarfsrcfiles_output(output) |
| 366 | # filenames are null-separated - this is an artefact of the previous use | ||
| 367 | # of rpm's debugedit, which was writing them out that way, and the code elsewhere | ||
| 368 | # is still assuming that. | ||
| 369 | debuglistoutput = '\0'.join(debugsources) + '\0' | ||
| 370 | lf = bb.utils.lockfile(sourcefile + ".lock") | ||
| 371 | with open(sourcefile, 'a') as sf: | ||
| 372 | sf.write(debuglistoutput) | ||
| 373 | bb.utils.unlockfile(lf) | ||
| 374 | 366 | ||
| 367 | return list(debugsources) | ||
| 375 | 368 | ||
| 376 | def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, sourcefile, d): | 369 | def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d): |
| 377 | # Function to split a single file into two components, one is the stripped | 370 | # Function to split a single file into two components, one is the stripped |
| 378 | # target system binary, the other contains any debugging information. The | 371 | # target system binary, the other contains any debugging information. The |
| 379 | # two files are linked to reference each other. | 372 | # two files are linked to reference each other. |
| 380 | # | 373 | # |
| 381 | # sourcefile is also generated containing a list of debugsources | 374 | # return a mapping of files:debugsources |
| 382 | 375 | ||
| 383 | import stat | 376 | import stat |
| 384 | import subprocess | 377 | import subprocess |
| @@ -386,6 +379,7 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, | |||
| 386 | src = file[len(dvar):] | 379 | src = file[len(dvar):] |
| 387 | dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend | 380 | dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend |
| 388 | debugfile = dvar + dest | 381 | debugfile = dvar + dest |
| 382 | sources = [] | ||
| 389 | 383 | ||
| 390 | # Split the file... | 384 | # Split the file... |
| 391 | bb.utils.mkdirhier(os.path.dirname(debugfile)) | 385 | bb.utils.mkdirhier(os.path.dirname(debugfile)) |
| @@ -397,7 +391,7 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, | |||
| 397 | 391 | ||
| 398 | # We ignore kernel modules, we don't generate debug info files. | 392 | # We ignore kernel modules, we don't generate debug info files. |
| 399 | if file.find("/lib/modules/") != -1 and file.endswith(".ko"): | 393 | if file.find("/lib/modules/") != -1 and file.endswith(".ko"): |
| 400 | return 1 | 394 | return (file, sources) |
| 401 | 395 | ||
| 402 | newmode = None | 396 | newmode = None |
| 403 | if not os.access(file, os.W_OK) or os.access(file, os.R_OK): | 397 | if not os.access(file, os.W_OK) or os.access(file, os.R_OK): |
| @@ -407,7 +401,7 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, | |||
| 407 | 401 | ||
| 408 | # We need to extract the debug src information here... | 402 | # We need to extract the debug src information here... |
| 409 | if debugsrcdir: | 403 | if debugsrcdir: |
| 410 | append_source_info(file, sourcefile, d) | 404 | sources = source_info(file, d) |
| 411 | 405 | ||
| 412 | bb.utils.mkdirhier(os.path.dirname(debugfile)) | 406 | bb.utils.mkdirhier(os.path.dirname(debugfile)) |
| 413 | 407 | ||
| @@ -419,17 +413,26 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, | |||
| 419 | if newmode: | 413 | if newmode: |
| 420 | os.chmod(file, origmode) | 414 | os.chmod(file, origmode) |
| 421 | 415 | ||
| 422 | return 0 | 416 | return (file, sources) |
| 423 | 417 | ||
| 424 | def copydebugsources(debugsrcdir, d): | 418 | def copydebugsources(debugsrcdir, sources, d): |
| 425 | # The debug src information written out to sourcefile is further processed | 419 | # The debug src information written out to sourcefile is further processed |
| 426 | # and copied to the destination here. | 420 | # and copied to the destination here. |
| 427 | 421 | ||
| 428 | import stat | 422 | import stat |
| 429 | import subprocess | 423 | import subprocess |
| 430 | 424 | ||
| 431 | sourcefile = d.expand("${WORKDIR}/debugsources.list") | 425 | if debugsrcdir and sources: |
| 432 | if debugsrcdir and os.path.isfile(sourcefile): | 426 | sourcefile = d.expand("${WORKDIR}/debugsources.list") |
| 427 | bb.utils.remove(sourcefile) | ||
| 428 | |||
| 429 | # filenames are null-separated - this is an artefact of the previous use | ||
| 430 | # of rpm's debugedit, which was writing them out that way, and the code elsewhere | ||
| 431 | # is still assuming that. | ||
| 432 | debuglistoutput = '\0'.join(sources) + '\0' | ||
| 433 | with open(sourcefile, 'a') as sf: | ||
| 434 | sf.write(debuglistoutput) | ||
| 435 | |||
| 433 | dvar = d.getVar('PKGD') | 436 | dvar = d.getVar('PKGD') |
| 434 | strip = d.getVar("STRIP") | 437 | strip = d.getVar("STRIP") |
| 435 | objcopy = d.getVar("OBJCOPY") | 438 | objcopy = d.getVar("OBJCOPY") |
| @@ -933,9 +936,6 @@ python split_and_strip_files () { | |||
| 933 | debuglibdir = "" | 936 | debuglibdir = "" |
| 934 | debugsrcdir = "/usr/src/debug" | 937 | debugsrcdir = "/usr/src/debug" |
| 935 | 938 | ||
| 936 | sourcefile = d.expand("${WORKDIR}/debugsources.list") | ||
| 937 | bb.utils.remove(sourcefile) | ||
| 938 | |||
| 939 | # | 939 | # |
| 940 | # First lets figure out all of the files we may have to process ... do this only once! | 940 | # First lets figure out all of the files we may have to process ... do this only once! |
| 941 | # | 941 | # |
| @@ -1040,11 +1040,15 @@ python split_and_strip_files () { | |||
| 1040 | # First lets process debug splitting | 1040 | # First lets process debug splitting |
| 1041 | # | 1041 | # |
| 1042 | if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'): | 1042 | if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'): |
| 1043 | oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, sourcefile, d)) | 1043 | results = oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d)) |
| 1044 | 1044 | ||
| 1045 | if debugsrcdir and not targetos.startswith("mingw"): | 1045 | if debugsrcdir and not targetos.startswith("mingw"): |
| 1046 | for file in staticlibs: | 1046 | for file in staticlibs: |
| 1047 | append_source_info(file, sourcefile, d, fatal=False) | 1047 | results.extend(source_info(file, d, fatal=False)) |
| 1048 | |||
| 1049 | sources = set() | ||
| 1050 | for r in results: | ||
| 1051 | sources.update(r[1]) | ||
| 1048 | 1052 | ||
| 1049 | # Hardlink our debug symbols to the other hardlink copies | 1053 | # Hardlink our debug symbols to the other hardlink copies |
| 1050 | for ref in inodes: | 1054 | for ref in inodes: |
| @@ -1092,7 +1096,7 @@ python split_and_strip_files () { | |||
| 1092 | 1096 | ||
| 1093 | # Process the debugsrcdir if requested... | 1097 | # Process the debugsrcdir if requested... |
| 1094 | # This copies and places the referenced sources for later debugging... | 1098 | # This copies and places the referenced sources for later debugging... |
| 1095 | copydebugsources(debugsrcdir, d) | 1099 | copydebugsources(debugsrcdir, sources, d) |
| 1096 | # | 1100 | # |
| 1097 | # End of debug splitting | 1101 | # End of debug splitting |
| 1098 | # | 1102 | # |
