diff options
| -rw-r--r-- | meta/classes/insane.bbclass | 192 |
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 | ||
| 310 | QAPATHTEST[unsafe-references-in-binaries] = "package_qa_check_unsafe_references_in_binaries" | 310 | QAPATHTEST[unsafe-references-in-binaries] = "package_qa_check_unsafe_references_in_binaries" |
| 311 | def package_qa_check_unsafe_references_in_binaries(path, name, d, elf, messages): | 311 | def 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 | ||
| 352 | QAPATHTEST[unsafe-references-in-scripts] = "package_qa_check_unsafe_references_in_scripts" | 352 | QAPATHTEST[unsafe-references-in-scripts] = "package_qa_check_unsafe_references_in_scripts" |
| 353 | def package_qa_check_unsafe_references_in_scripts(path, name, d, elf, messages): | 353 | def 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 | ||
| 377 | def 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: | 377 | def 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 | ||
| 417 | QAPATHTEST[arch] = "package_qa_check_arch" | 417 | QAPATHTEST[arch] = "package_qa_check_arch" |
| 418 | def package_qa_check_arch(path,name,d, elf, messages): | 418 | def 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: |
