ptest.bbclass 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #
  2. # Copyright OpenEmbedded Contributors
  3. #
  4. # SPDX-License-Identifier: MIT
  5. #
  6. SUMMARY:${PN}-ptest ?= "${SUMMARY} - Package test files"
  7. DESCRIPTION:${PN}-ptest ?= "${DESCRIPTION} \
  8. This package contains a test directory ${PTEST_PATH} for package test purposes."
  9. PTEST_PATH ?= "${libdir}/${BPN}/ptest"
  10. PTEST_BUILD_HOST_FILES ?= "Makefile"
  11. PTEST_BUILD_HOST_PATTERN ?= ""
  12. PTEST_PARALLEL_MAKE ?= "${PARALLEL_MAKE}"
  13. PTEST_PARALLEL_MAKEINST ?= "${PARALLEL_MAKEINST}"
  14. EXTRA_OEMAKE:prepend:task-compile-ptest-base = "${PTEST_PARALLEL_MAKE} "
  15. EXTRA_OEMAKE:prepend:task-install-ptest-base = "${PTEST_PARALLEL_MAKEINST} "
  16. FILES:${PN}-ptest += "${PTEST_PATH}"
  17. SECTION:${PN}-ptest = "devel"
  18. ALLOW_EMPTY:${PN}-ptest = "1"
  19. PTEST_ENABLED = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '1', '0', d)}"
  20. PTEST_ENABLED:class-native = ""
  21. PTEST_ENABLED:class-nativesdk = ""
  22. PTEST_ENABLED:class-cross-canadian = ""
  23. RDEPENDS:${PN}-ptest += "${PN}"
  24. RDEPENDS:${PN}-ptest:class-native = ""
  25. RDEPENDS:${PN}-ptest:class-nativesdk = ""
  26. RRECOMMENDS:${PN}-ptest += "ptest-runner"
  27. PACKAGES =+ "${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)}"
  28. require conf/distro/include/ptest-packagelists.inc
  29. do_configure_ptest() {
  30. :
  31. }
  32. do_configure_ptest_base() {
  33. do_configure_ptest
  34. }
  35. do_compile_ptest() {
  36. :
  37. }
  38. do_compile_ptest_base() {
  39. do_compile_ptest
  40. }
  41. do_install_ptest() {
  42. :
  43. }
  44. do_install_ptest_base() {
  45. if [ -f ${UNPACKDIR}/run-ptest ]; then
  46. install -D ${UNPACKDIR}/run-ptest ${D}${PTEST_PATH}/run-ptest
  47. fi
  48. grep -q install-ptest: Makefile 2>/dev/null && oe_runmake DESTDIR=${D}${PTEST_PATH} install-ptest
  49. do_install_ptest
  50. chown -R root:root ${D}${PTEST_PATH}
  51. # Strip build host paths from any installed Makefile
  52. for filename in ${PTEST_BUILD_HOST_FILES}; do
  53. for installed_ptest_file in $(find ${D}${PTEST_PATH} -type f -name $filename); do
  54. bbnote "Stripping host paths from: $installed_ptest_file"
  55. sed -e 's#${HOSTTOOLS_DIR}/*##g' \
  56. -e 's#${WORKDIR}/*=#.=#g' \
  57. -e 's#${WORKDIR}/*##g' \
  58. -i $installed_ptest_file
  59. if [ -n "${PTEST_BUILD_HOST_PATTERN}" ]; then
  60. sed -E '/${PTEST_BUILD_HOST_PATTERN}/d' \
  61. -i $installed_ptest_file
  62. fi
  63. done
  64. done
  65. }
  66. PTEST_BINDIR_PKGD_PATH = "${PKGD}${PTEST_PATH}/bin"
  67. # This function needs to run after apply_update_alternative_renames because the
  68. # aforementioned function will update the ALTERNATIVE_LINK_NAME flag. Append is
  69. # used here to make this function to run as late as possible.
  70. PACKAGE_PREPROCESS_FUNCS:append = "${@bb.utils.contains('PTEST_BINDIR', '1', \
  71. bb.utils.contains('PTEST_ENABLED', '1', ' ptest_update_alternatives', '', d), '', d)}"
  72. python ptest_update_alternatives() {
  73. """
  74. This function will generate the symlinks in the PTEST_BINDIR_PKGD_PATH
  75. to match the renamed binaries by update-alternatives.
  76. """
  77. if not bb.data.inherits_class('update-alternatives', d) \
  78. or not update_alternatives_enabled(d):
  79. return
  80. bb.note("Generating symlinks for ptest")
  81. bin_paths = { d.getVar("bindir"), d.getVar("base_bindir"),
  82. d.getVar("sbindir"), d.getVar("base_sbindir") }
  83. ptest_bindir = d.getVar("PTEST_BINDIR_PKGD_PATH")
  84. os.mkdir(ptest_bindir)
  85. for pkg in (d.getVar('PACKAGES') or "").split():
  86. alternatives = update_alternatives_alt_targets(d, pkg)
  87. for alt_name, alt_link, alt_target, _ in alternatives:
  88. # Some alternatives are for man pages,
  89. # check if the alternative is in PATH
  90. if os.path.dirname(alt_link) in bin_paths:
  91. os.symlink(alt_target, os.path.join(ptest_bindir, alt_name))
  92. }
  93. do_configure_ptest_base[dirs] = "${B}"
  94. do_compile_ptest_base[dirs] = "${B}"
  95. do_install_ptest_base[dirs] = "${B}"
  96. do_install_ptest_base[cleandirs] = "${D}${PTEST_PATH}"
  97. addtask configure_ptest_base after do_configure before do_compile
  98. addtask compile_ptest_base after do_compile before do_install
  99. addtask install_ptest_base after do_install before do_package do_populate_sysroot
  100. python () {
  101. if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
  102. d.setVarFlag('do_install_ptest_base', 'fakeroot', '1')
  103. d.setVarFlag('do_install_ptest_base', 'umask', '022')
  104. # Remove all '*ptest_base' tasks when ptest is not enabled
  105. if not(d.getVar('PTEST_ENABLED') == "1"):
  106. for i in ['do_configure_ptest_base', 'do_compile_ptest_base', 'do_install_ptest_base']:
  107. bb.build.deltask(i, d)
  108. }
  109. QARECIPETEST[missing-ptest] = "package_qa_check_missing_ptest"
  110. def package_qa_check_missing_ptest(pn, d):
  111. # This checks that ptest package is actually included
  112. # in standard oe-core ptest images - only for oe-core recipes
  113. if not 'meta/recipes' in d.getVar('FILE') or not(d.getVar('PTEST_ENABLED') == "1"):
  114. return
  115. enabled_ptests = " ".join([d.getVar('PTESTS_FAST'), d.getVar('PTESTS_SLOW'), d.getVar('PTESTS_PROBLEMS')]).split()
  116. if pn.replace(d.getVar('MLPREFIX'), '') not in enabled_ptests:
  117. oe.qa.handle_error("missing-ptest", "supports ptests but is not included in oe-core's ptest-packagelists.inc", d)