summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/insane.bbclass192
1 files changed, 96 insertions, 96 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 55ed91f8dc..cf00e12fce 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -95,7 +95,7 @@ def package_qa_get_machine_dict():
95 "mips64": ( 8, 0, 0, False, 64), 95 "mips64": ( 8, 0, 0, False, 64),
96 "mips64el": ( 8, 0, 0, True, 64), 96 "mips64el": ( 8, 0, 0, True, 64),
97 "avr32": (6317, 0, 0, False, 32), 97 "avr32": (6317, 0, 0, False, 32),
98 "sh4": (42, 0, 0, True, 32), 98 "sh4": (42, 0, 0, True, 32),
99 99
100 }, 100 },
101 "uclinux-uclibc" : { 101 "uclinux-uclibc" : {
@@ -309,110 +309,110 @@ def package_qa_check_perm(path,name,d, elf, messages):
309 309
310QAPATHTEST[unsafe-references-in-binaries] = "package_qa_check_unsafe_references_in_binaries" 310QAPATHTEST[unsafe-references-in-binaries] = "package_qa_check_unsafe_references_in_binaries"
311def package_qa_check_unsafe_references_in_binaries(path, name, d, elf, messages): 311def package_qa_check_unsafe_references_in_binaries(path, name, d, elf, messages):
312 """ 312 """
313 Ensure binaries in base_[bindir|sbindir|libdir] do not link to files under exec_prefix 313 Ensure binaries in base_[bindir|sbindir|libdir] do not link to files under exec_prefix
314 """ 314 """
315 if unsafe_references_skippable(path, name, d): 315 if unsafe_references_skippable(path, name, d):
316 return 316 return
317 317
318 if elf: 318 if elf:
319 import subprocess as sub 319 import subprocess as sub
320 pn = d.getVar('PN', True) 320 pn = d.getVar('PN', True)
321 321
322 exec_prefix = d.getVar('exec_prefix', True) 322 exec_prefix = d.getVar('exec_prefix', True)
323 sysroot_path = d.getVar('STAGING_DIR_TARGET', True) 323 sysroot_path = d.getVar('STAGING_DIR_TARGET', True)
324 sysroot_path_usr = sysroot_path + exec_prefix 324 sysroot_path_usr = sysroot_path + exec_prefix
325 325
326 try: 326 try:
327 ldd_output = bb.process.Popen(["prelink-rtld", "--root", sysroot_path, path], stdout=sub.PIPE).stdout.read() 327 ldd_output = bb.process.Popen(["prelink-rtld", "--root", sysroot_path, path], stdout=sub.PIPE).stdout.read()
328 except bb.process.CmdError: 328 except bb.process.CmdError:
329 error_msg = pn + ": prelink-rtld aborted when processing %s" % path 329 error_msg = pn + ": prelink-rtld aborted when processing %s" % path
330 package_qa_handle_error("unsafe-references-in-binaries", error_msg, d) 330 package_qa_handle_error("unsafe-references-in-binaries", error_msg, d)
331 return False 331 return False
332 332
333 if sysroot_path_usr in ldd_output: 333 if sysroot_path_usr in ldd_output:
334 ldd_output = ldd_output.replace(sysroot_path, "") 334 ldd_output = ldd_output.replace(sysroot_path, "")
335 335
336 pkgdest = d.getVar('PKGDEST', True) 336 pkgdest = d.getVar('PKGDEST', True)
337 packages = d.getVar('PACKAGES', True) 337 packages = d.getVar('PACKAGES', True)
338 338
339 for package in packages.split(): 339 for package in packages.split():
340 short_path = path.replace('%s/%s' % (pkgdest, package), "", 1) 340 short_path = path.replace('%s/%s' % (pkgdest, package), "", 1)
341 if (short_path != path): 341 if (short_path != path):
342 break 342 break
343 343
344 base_err = pn + ": %s, installed in the base_prefix, requires a shared library under exec_prefix (%s)" % (short_path, exec_prefix) 344 base_err = pn + ": %s, installed in the base_prefix, requires a shared library under exec_prefix (%s)" % (short_path, exec_prefix)
345 for line in ldd_output.split('\n'): 345 for line in ldd_output.split('\n'):
346 if exec_prefix in line: 346 if exec_prefix in line:
347 error_msg = "%s: %s" % (base_err, line.strip()) 347 error_msg = "%s: %s" % (base_err, line.strip())
348 package_qa_handle_error("unsafe-references-in-binaries", error_msg, d) 348 package_qa_handle_error("unsafe-references-in-binaries", error_msg, d)
349 349
350 return False 350 return False
351 351
352QAPATHTEST[unsafe-references-in-scripts] = "package_qa_check_unsafe_references_in_scripts" 352QAPATHTEST[unsafe-references-in-scripts] = "package_qa_check_unsafe_references_in_scripts"
353def package_qa_check_unsafe_references_in_scripts(path, name, d, elf, messages): 353def package_qa_check_unsafe_references_in_scripts(path, name, d, elf, messages):
354 """ 354 """
355 Warn if scripts in base_[bindir|sbindir|libdir] reference files under exec_prefix 355 Warn if scripts in base_[bindir|sbindir|libdir] reference files under exec_prefix
356 """ 356 """
357 if unsafe_references_skippable(path, name, d): 357 if unsafe_references_skippable(path, name, d):
358 return 358 return
359
360 if not elf:
361 import stat
362 import subprocess
363 pn = d.getVar('PN', True)
364
365 # Ensure we're checking an executable script
366 statinfo = os.stat(path)
367 if bool(statinfo.st_mode & stat.S_IXUSR):
368 # grep shell scripts for possible references to /exec_prefix/
369 exec_prefix = d.getVar('exec_prefix', True)
370 statement = "grep -e '%s/' %s > /dev/null" % (exec_prefix, path)
371 if subprocess.call(statement, shell=True) == 0:
372 error_msg = pn + ": Found a reference to %s/ in %s" % (exec_prefix, path)
373 package_qa_handle_error("unsafe-references-in-scripts", error_msg, d)
374 error_msg = "Shell scripts in base_bindir and base_sbindir should not reference anything in exec_prefix"
375 package_qa_handle_error("unsafe-references-in-scripts", error_msg, d)
376 359
377def unsafe_references_skippable(path, name, d): 360 if not elf:
378 if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d): 361 import stat
379 return True 362 import subprocess
363 pn = d.getVar('PN', True)
364
365 # Ensure we're checking an executable script
366 statinfo = os.stat(path)
367 if bool(statinfo.st_mode & stat.S_IXUSR):
368 # grep shell scripts for possible references to /exec_prefix/
369 exec_prefix = d.getVar('exec_prefix', True)
370 statement = "grep -e '%s/' %s > /dev/null" % (exec_prefix, path)
371 if subprocess.call(statement, shell=True) == 0:
372 error_msg = pn + ": Found a reference to %s/ in %s" % (exec_prefix, path)
373 package_qa_handle_error("unsafe-references-in-scripts", error_msg, d)
374 error_msg = "Shell scripts in base_bindir and base_sbindir should not reference anything in exec_prefix"
375 package_qa_handle_error("unsafe-references-in-scripts", error_msg, d)
380 376
381 if "-dbg" in name or "-dev" in name: 377def unsafe_references_skippable(path, name, d):
382 return True 378 if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d):
379 return True
383 380
384 # Other package names to skip: 381 if "-dbg" in name or "-dev" in name:
385 if name.startswith("kernel-module-"): 382 return True
386 return True
387 383
388 # Skip symlinks 384 # Other package names to skip:
389 if os.path.islink(path): 385 if name.startswith("kernel-module-"):
390 return True 386 return True
391 387
392 # Skip unusual rootfs layouts which make these tests irrelevant 388 # Skip symlinks
393 exec_prefix = d.getVar('exec_prefix', True) 389 if os.path.islink(path):
394 if exec_prefix == "": 390 return True
395 return True
396 391
397 pkgdest = d.getVar('PKGDEST', True) 392 # Skip unusual rootfs layouts which make these tests irrelevant
398 pkgdest = pkgdest + "/" + name 393 exec_prefix = d.getVar('exec_prefix', True)
399 pkgdest = os.path.abspath(pkgdest) 394 if exec_prefix == "":
400 base_bindir = pkgdest + d.getVar('base_bindir', True) 395 return True
401 base_sbindir = pkgdest + d.getVar('base_sbindir', True)
402 base_libdir = pkgdest + d.getVar('base_libdir', True)
403 bindir = pkgdest + d.getVar('bindir', True)
404 sbindir = pkgdest + d.getVar('sbindir', True)
405 libdir = pkgdest + d.getVar('libdir', True)
406 396
407 if base_bindir == bindir and base_sbindir == sbindir and base_libdir == libdir: 397 pkgdest = d.getVar('PKGDEST', True)
408 return True 398 pkgdest = pkgdest + "/" + name
399 pkgdest = os.path.abspath(pkgdest)
400 base_bindir = pkgdest + d.getVar('base_bindir', True)
401 base_sbindir = pkgdest + d.getVar('base_sbindir', True)
402 base_libdir = pkgdest + d.getVar('base_libdir', True)
403 bindir = pkgdest + d.getVar('bindir', True)
404 sbindir = pkgdest + d.getVar('sbindir', True)
405 libdir = pkgdest + d.getVar('libdir', True)
406
407 if base_bindir == bindir and base_sbindir == sbindir and base_libdir == libdir:
408 return True
409 409
410 # Skip files not in base_[bindir|sbindir|libdir] 410 # Skip files not in base_[bindir|sbindir|libdir]
411 path = os.path.abspath(path) 411 path = os.path.abspath(path)
412 if not (base_bindir in path or base_sbindir in path or base_libdir in path): 412 if not (base_bindir in path or base_sbindir in path or base_libdir in path):
413 return True 413 return True
414 414
415 return False 415 return False
416 416
417QAPATHTEST[arch] = "package_qa_check_arch" 417QAPATHTEST[arch] = "package_qa_check_arch"
418def package_qa_check_arch(path,name,d, elf, messages): 418def package_qa_check_arch(path,name,d, elf, messages):
@@ -443,11 +443,11 @@ def package_qa_check_arch(path,name,d, elf, messages):
443 443
444 # Check the architecture and endiannes of the binary 444 # Check the architecture and endiannes of the binary
445 if not ((machine == elf.machine()) or \ 445 if not ((machine == elf.machine()) or \
446 ("virtual/kernel" in provides) and (target_os == "linux-gnux32")): 446 ("virtual/kernel" in provides) and (target_os == "linux-gnux32")):
447 messages.append("Architecture did not match (%d to %d) on %s" % \ 447 messages.append("Architecture did not match (%d to %d) on %s" % \
448 (machine, elf.machine(), package_qa_clean_path(path,d))) 448 (machine, elf.machine(), package_qa_clean_path(path,d)))
449 elif not ((bits == elf.abiSize()) or \ 449 elif not ((bits == elf.abiSize()) or \
450 ("virtual/kernel" in provides) and (target_os == "linux-gnux32")): 450 ("virtual/kernel" in provides) and (target_os == "linux-gnux32")):
451 messages.append("Bit size did not match (%d to %d) %s on %s" % \ 451 messages.append("Bit size did not match (%d to %d) %s on %s" % \
452 (bits, elf.abiSize(), bpn, package_qa_clean_path(path,d))) 452 (bits, elf.abiSize(), bpn, package_qa_clean_path(path,d)))
453 elif not littleendian == elf.isLittleEndian(): 453 elif not littleendian == elf.isLittleEndian():
@@ -949,7 +949,7 @@ Missing inherit gettext?""" % (gt, config))
949 whitelist = set(d.getVar("UNKNOWN_CONFIGURE_WHITELIST", True).split()) 949 whitelist = set(d.getVar("UNKNOWN_CONFIGURE_WHITELIST", True).split())
950 options -= whitelist 950 options -= whitelist
951 if options: 951 if options:
952 pn = d.getVar('PN', True) 952 pn = d.getVar('PN', True)
953 error_msg = pn + ": configure was passed unrecognised options: " + " ".join(options) 953 error_msg = pn + ": configure was passed unrecognised options: " + " ".join(options)
954 package_qa_handle_error("unknown-configure-option", error_msg, d) 954 package_qa_handle_error("unknown-configure-option", error_msg, d)
955 except subprocess.CalledProcessError: 955 except subprocess.CalledProcessError: