summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/package.bbclass50
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
347def append_source_info(file, sourcefile, d, fatal=True): 347def 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
376def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, sourcefile, d): 369def 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
424def copydebugsources(debugsrcdir, d): 418def 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 #