summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py31
-rw-r--r--meta/classes-global/sanity.bbclass7
-rw-r--r--meta/classes-recipe/kernel-fit-image.bbclass2
-rw-r--r--meta/classes-recipe/testexport.bbclass43
-rw-r--r--meta/conf/distro/include/ptest-packagelists.inc1
-rw-r--r--meta/recipes-connectivity/openssl/openssl_3.5.0.bb5
-rw-r--r--meta/recipes-devtools/gcc/gcc-15.1.inc1
-rw-r--r--meta/recipes-graphics/wayland/wayland-protocols_1.45.bb4
-rw-r--r--meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb4
-rw-r--r--meta/recipes-graphics/wayland/wayland_1.23.1.bb4
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_6.12.bb28
-rw-r--r--meta/recipes-support/icu/icu/0001-ICU-23120-Mask-UnicodeStringTest-TestLargeMemory-on-.patch28
-rw-r--r--meta/recipes-support/icu/icu/0001-test-Add-support-ptest.patch84
-rwxr-xr-xmeta/recipes-support/icu/icu/run-ptest13
-rw-r--r--meta/recipes-support/icu/icu_77-1.bb23
-rwxr-xr-xscripts/contrib/improve_kernel_cve_report.py10
-rwxr-xr-xscripts/oe-test12
19 files changed, 240 insertions, 72 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 0761f06e1c..dc131939ed 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -26,6 +26,7 @@ import json
26import pickle 26import pickle
27import codecs 27import codecs
28import hashserv 28import hashserv
29import ctypes
29 30
30logger = logging.getLogger("BitBake") 31logger = logging.getLogger("BitBake")
31collectlog = logging.getLogger("BitBake.Collection") 32collectlog = logging.getLogger("BitBake.Collection")
@@ -1998,9 +1999,9 @@ class ParsingFailure(Exception):
1998 Exception.__init__(self, realexception, recipe) 1999 Exception.__init__(self, realexception, recipe)
1999 2000
2000class Parser(multiprocessing.Process): 2001class Parser(multiprocessing.Process):
2001 def __init__(self, jobs, jobid_queue, results, quit, profile): 2002 def __init__(self, jobs, next_job_id, results, quit, profile):
2002 self.jobs = jobs 2003 self.jobs = jobs
2003 self.jobid_queue = jobid_queue 2004 self.next_job_id = next_job_id
2004 self.results = results 2005 self.results = results
2005 self.quit = quit 2006 self.quit = quit
2006 multiprocessing.Process.__init__(self) 2007 multiprocessing.Process.__init__(self)
@@ -2065,15 +2066,16 @@ class Parser(multiprocessing.Process):
2065 if self.quit.is_set(): 2066 if self.quit.is_set():
2066 break 2067 break
2067 2068
2068 jobid = None 2069 job = None
2069 try: 2070 if havejobs:
2070 # Have to wait for all parsers to have forked 2071 with self.next_job_id.get_lock():
2071 jobid = self.jobid_queue.get(True, 30) 2072 if self.next_job_id.value < len(self.jobs):
2072 except (ValueError, OSError, queue.Empty): 2073 job = self.jobs[self.next_job_id.value]
2073 havejobs = False 2074 self.next_job_id.value += 1
2075 else:
2076 havejobs = False
2074 2077
2075 if jobid is not None: 2078 if job:
2076 job = self.jobs[jobid]
2077 result = self.parse(*job) 2079 result = self.parse(*job)
2078 # Clear the siggen cache after parsing to control memory usage, its huge 2080 # Clear the siggen cache after parsing to control memory usage, its huge
2079 bb.parse.siggen.postparsing_clean_cache() 2081 bb.parse.siggen.postparsing_clean_cache()
@@ -2086,7 +2088,6 @@ class Parser(multiprocessing.Process):
2086 except queue.Full: 2088 except queue.Full:
2087 pending.append(result) 2089 pending.append(result)
2088 finally: 2090 finally:
2089 self.jobs.close()
2090 self.results.close() 2091 self.results.close()
2091 self.results.join_thread() 2092 self.results.join_thread()
2092 2093
@@ -2168,22 +2169,18 @@ class CookerParser(object):
2168 if self.toparse: 2169 if self.toparse:
2169 bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata) 2170 bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata)
2170 2171
2171 self.toparse_queue = multiprocessing.Queue(len(self.willparse)) 2172 next_job_id = multiprocessing.Value(ctypes.c_int, 0)
2172 self.parser_quit = multiprocessing.Event() 2173 self.parser_quit = multiprocessing.Event()
2173 self.result_queue = multiprocessing.Queue() 2174 self.result_queue = multiprocessing.Queue()
2174 2175
2175 # Have to pass in willparse at fork time so all parsing processes have the unpickleable data 2176 # Have to pass in willparse at fork time so all parsing processes have the unpickleable data
2176 # then access it by index from the parse queue. 2177 # then access it by index from the parse queue.
2177 for i in range(0, self.num_processes): 2178 for i in range(0, self.num_processes):
2178 parser = Parser(self.willparse, self.toparse_queue, self.result_queue, self.parser_quit, self.cooker.configuration.profile) 2179 parser = Parser(self.willparse, next_job_id, self.result_queue, self.parser_quit, self.cooker.configuration.profile)
2179 parser.start() 2180 parser.start()
2180 self.process_names.append(parser.name) 2181 self.process_names.append(parser.name)
2181 self.processes.append(parser) 2182 self.processes.append(parser)
2182 2183
2183 for jobid in range(len(self.willparse)):
2184 self.toparse_queue.put(jobid)
2185 self.toparse_queue.close()
2186
2187 self.results = itertools.chain(self.results, self.parse_generator()) 2184 self.results = itertools.chain(self.results, self.parse_generator())
2188 2185
2189 def shutdown(self, clean=True, eventmsg="Parsing halted due to errors"): 2186 def shutdown(self, clean=True, eventmsg="Parsing halted due to errors"):
diff --git a/meta/classes-global/sanity.bbclass b/meta/classes-global/sanity.bbclass
index 1044ed9cc6..d875a022db 100644
--- a/meta/classes-global/sanity.bbclass
+++ b/meta/classes-global/sanity.bbclass
@@ -672,6 +672,8 @@ def check_sanity_sstate_dir_change(sstate_dir, data):
672 return testmsg 672 return testmsg
673 673
674def check_sanity_version_change(status, d): 674def check_sanity_version_change(status, d):
675 import glob
676
675 # Sanity checks to be done when SANITY_VERSION or NATIVELSBSTRING changes 677 # Sanity checks to be done when SANITY_VERSION or NATIVELSBSTRING changes
676 # In other words, these tests run once in a given build directory and then 678 # In other words, these tests run once in a given build directory and then
677 # never again until the sanity version or host distribution id/version changes. 679 # never again until the sanity version or host distribution id/version changes.
@@ -703,6 +705,11 @@ def check_sanity_version_change(status, d):
703 if not check_app_exists('g++', d): 705 if not check_app_exists('g++', d):
704 missing = missing + "C++ Compiler (g++)," 706 missing = missing + "C++ Compiler (g++),"
705 707
708 # installing emacs on Ubuntu 24.04 pulls in emacs-gtk -> libgcc-14-dev despite gcc being 13
709 # this breaks libcxx-native and compiler-rt-native builds so tell the user to fix things
710 if glob.glob("/usr/lib/gcc/*/14/libgcc_s.so") and not glob.glob("/usr/lib/gcc/*/14/libstdc++.so"):
711 status.addresult('libgcc-14-dev is installed and not libstdc++-14-dev which will break clang native compiles. Please remove one or install the other.')
712
706 required_utilities = d.getVar('SANITY_REQUIRED_UTILITIES') 713 required_utilities = d.getVar('SANITY_REQUIRED_UTILITIES')
707 714
708 for util in required_utilities.split(): 715 for util in required_utilities.split():
diff --git a/meta/classes-recipe/kernel-fit-image.bbclass b/meta/classes-recipe/kernel-fit-image.bbclass
index 39845997ed..fd4c6a30fe 100644
--- a/meta/classes-recipe/kernel-fit-image.bbclass
+++ b/meta/classes-recipe/kernel-fit-image.bbclass
@@ -173,7 +173,7 @@ do_deploy() {
173 fi 173 fi
174 174
175 if [ -n "${INITRAMFS_IMAGE}" ]; then 175 if [ -n "${INITRAMFS_IMAGE}" ]; then
176 ln -snf fit-image-its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its" 176 ln -snf fit-image.its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
177 if [ -n "${KERNEL_FIT_LINK_NAME}" ]; then 177 if [ -n "${KERNEL_FIT_LINK_NAME}" ]; then
178 ln -snf fit-image.its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}" 178 ln -snf fit-image.its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
179 fi 179 fi
diff --git a/meta/classes-recipe/testexport.bbclass b/meta/classes-recipe/testexport.bbclass
index 2da5dbcb6b..3005fc0dfa 100644
--- a/meta/classes-recipe/testexport.bbclass
+++ b/meta/classes-recipe/testexport.bbclass
@@ -85,6 +85,7 @@ def copy_needed_files(d, tc):
85 85
86 export_path = d.getVar('TEST_EXPORT_DIR') 86 export_path = d.getVar('TEST_EXPORT_DIR')
87 corebase_path = d.getVar('COREBASE') 87 corebase_path = d.getVar('COREBASE')
88 bblayers = d.getVar('BBLAYERS').split()
88 89
89 # Clean everything before starting 90 # Clean everything before starting
90 oe.path.remove(export_path) 91 oe.path.remove(export_path)
@@ -92,17 +93,11 @@ def copy_needed_files(d, tc):
92 93
93 # The source of files to copy are relative to 'COREBASE' directory 94 # The source of files to copy are relative to 'COREBASE' directory
94 # The destination is relative to 'TEST_EXPORT_DIR' 95 # The destination is relative to 'TEST_EXPORT_DIR'
95 # Because we are squashing the libraries, we need to remove 96 # core files/dirs first
96 # the layer/script directory 97 core_files_to_copy = [ os.path.join('scripts', 'oe-test'),
97 files_to_copy = [ os.path.join('meta', 'lib', 'oeqa', 'core'),
98 os.path.join('meta', 'lib', 'oeqa', 'runtime'),
99 os.path.join('meta', 'lib', 'oeqa', 'files'),
100 os.path.join('meta', 'lib', 'oeqa', 'utils'),
101 os.path.join('scripts', 'oe-test'),
102 os.path.join('scripts', 'lib', 'argparse_oe.py'), 98 os.path.join('scripts', 'lib', 'argparse_oe.py'),
103 os.path.join('scripts', 'lib', 'scriptutils.py'), ] 99 os.path.join('scripts', 'lib', 'scriptutils.py'), ]
104 100 for f in core_files_to_copy:
105 for f in files_to_copy:
106 src = os.path.join(corebase_path, f) 101 src = os.path.join(corebase_path, f)
107 dst = os.path.join(export_path, f.split('/', 1)[-1]) 102 dst = os.path.join(export_path, f.split('/', 1)[-1])
108 if os.path.isdir(src): 103 if os.path.isdir(src):
@@ -110,18 +105,21 @@ def copy_needed_files(d, tc):
110 else: 105 else:
111 shutil.copy2(src, dst) 106 shutil.copy2(src, dst)
112 107
113 # Remove cases and just copy the ones specified 108 # layer specific files/dirs
114 cases_path = os.path.join(export_path, 'lib', 'oeqa', 'runtime', 'cases') 109 layer_files_to_copy = [ os.path.join('lib', 'oeqa', 'core'),
115 oe.path.remove(cases_path) 110 os.path.join('lib', 'oeqa', 'runtime'),
116 bb.utils.mkdirhier(cases_path) 111 os.path.join('lib', 'oeqa', 'files'),
117 test_paths = get_runtime_paths(d) 112 os.path.join('lib', 'oeqa', 'utils'),]
118 test_modules = d.getVar('TEST_SUITES').split() 113 for layer in bblayers:
119 tc.loadTests(test_paths, modules=test_modules) 114 meta = os.path.basename(layer)
120 for f in getSuiteCasesFiles(tc.suites): 115 for f in layer_files_to_copy:
121 shutil.copy2(f, cases_path) 116 src = os.path.join(layer, f)
122 json_file = _get_json_file(f) 117 dst = os.path.join(export_path, meta, f)
123 if json_file: 118 if os.path.exists(src):
124 shutil.copy2(json_file, cases_path) 119 if os.path.isdir(src):
120 oe.path.copytree(src, dst)
121 else:
122 shutil.copy2(src, dst)
125 123
126 # Copy test data 124 # Copy test data
127 image_name = ("%s/%s" % (d.getVar('DEPLOY_DIR_IMAGE'), 125 image_name = ("%s/%s" % (d.getVar('DEPLOY_DIR_IMAGE'),
@@ -146,6 +144,9 @@ def copy_needed_files(d, tc):
146 (image_basename, image_machine_suffix), d.getVar("TEST_EXPORT_DIR")) 144 (image_basename, image_machine_suffix), d.getVar("TEST_EXPORT_DIR"))
147 145
148 # Copy packages needed for runtime testing 146 # Copy packages needed for runtime testing
147 test_paths = get_runtime_paths(d)
148 test_modules = d.getVar('TEST_SUITES').split()
149 tc.loadTests(test_paths, modules=test_modules)
149 package_extraction(d, tc.suites) 150 package_extraction(d, tc.suites)
150 test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR") 151 test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR")
151 if os.path.isdir(test_pkg_dir) and os.listdir(test_pkg_dir): 152 if os.path.isdir(test_pkg_dir) and os.listdir(test_pkg_dir):
diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index 4253c7b062..4451e00b48 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -25,6 +25,7 @@ PTESTS_FAST = "\
25 gdk-pixbuf \ 25 gdk-pixbuf \
26 glib-networking \ 26 glib-networking \
27 gzip \ 27 gzip \
28 icu \
28 json-c \ 29 json-c \
29 json-glib \ 30 json-glib \
30 libconvert-asn1-perl \ 31 libconvert-asn1-perl \
diff --git a/meta/recipes-connectivity/openssl/openssl_3.5.0.bb b/meta/recipes-connectivity/openssl/openssl_3.5.0.bb
index 0f5c28dafa..a7d08d5b86 100644
--- a/meta/recipes-connectivity/openssl/openssl_3.5.0.bb
+++ b/meta/recipes-connectivity/openssl/openssl_3.5.0.bb
@@ -192,6 +192,11 @@ do_install:append:class-native () {
192 SSL_CERT_FILE=\${SSL_CERT_FILE:-${libdir}/ssl-3/cert.pem} \ 192 SSL_CERT_FILE=\${SSL_CERT_FILE:-${libdir}/ssl-3/cert.pem} \
193 OPENSSL_ENGINES=\${OPENSSL_ENGINES:-${libdir}/engines-3} \ 193 OPENSSL_ENGINES=\${OPENSSL_ENGINES:-${libdir}/engines-3} \
194 OPENSSL_MODULES=\${OPENSSL_MODULES:-${libdir}/ossl-modules} 194 OPENSSL_MODULES=\${OPENSSL_MODULES:-${libdir}/ossl-modules}
195
196 # Setting ENGINESDIR and MODULESDIR to invalid paths prevents host contamination,
197 # but also breaks the generated libcrypto.pc file. Post-Fix it manually here.
198 sed -i 's|^enginesdir=\($.libdir.\)/.*|enginesdir=\1/engines-3|' ${D}${libdir}/pkgconfig/libcrypto.pc
199 sed -i 's|^modulesdir=\($.libdir.\)/.*|modulesdir=\1/ossl-modules|' ${D}${libdir}/pkgconfig/libcrypto.pc
195} 200}
196 201
197do_install:append:class-nativesdk () { 202do_install:append:class-nativesdk () {
diff --git a/meta/recipes-devtools/gcc/gcc-15.1.inc b/meta/recipes-devtools/gcc/gcc-15.1.inc
index af29db8e5b..28fcf9376c 100644
--- a/meta/recipes-devtools/gcc/gcc-15.1.inc
+++ b/meta/recipes-devtools/gcc/gcc-15.1.inc
@@ -53,7 +53,6 @@ SRC_URI = "${BASEURI} \
53 file://0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \ 53 file://0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \
54 file://0006-cpp-honor-sysroot.patch \ 54 file://0006-cpp-honor-sysroot.patch \
55 file://0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \ 55 file://0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \
56 file://0008-libtool.patch \
57 file://0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch \ 56 file://0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch \
58 file://0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch \ 57 file://0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch \
59 file://0011-aarch64-Fix-include-paths-when-S-B.patch \ 58 file://0011-aarch64-Fix-include-paths-when-S-B.patch \
diff --git a/meta/recipes-graphics/wayland/wayland-protocols_1.45.bb b/meta/recipes-graphics/wayland/wayland-protocols_1.45.bb
index d98ccf964f..840d196ace 100644
--- a/meta/recipes-graphics/wayland/wayland-protocols_1.45.bb
+++ b/meta/recipes-graphics/wayland/wayland-protocols_1.45.bb
@@ -9,8 +9,8 @@ LICENSE = "MIT"
9LIC_FILES_CHKSUM = "file://COPYING;md5=c7b12b6702da38ca028ace54aae3d484 \ 9LIC_FILES_CHKSUM = "file://COPYING;md5=c7b12b6702da38ca028ace54aae3d484 \
10 file://stable/presentation-time/presentation-time.xml;endline=26;md5=4646cd7d9edc9fa55db941f2d3a7dc53" 10 file://stable/presentation-time/presentation-time.xml;endline=26;md5=4646cd7d9edc9fa55db941f2d3a7dc53"
11 11
12SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/${PV}/downloads/wayland-protocols-${PV}.tar.xz" 12SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/${PV}/wayland-protocols-${PV}.tar.bz2"
13SRC_URI[sha256sum] = "4d2b2a9e3e099d017dc8107bf1c334d27bb87d9e4aff19a0c8d856d17cd41ef0" 13SRC_URI[sha256sum] = "b73315c26d6c3374c19c2dff7e491f019d8597dc4dcd4473d9181f676f15f48f"
14 14
15UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tags" 15UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tags"
16UPSTREAM_CHECK_REGEX = "releases/(?P<pver>.+)" 16UPSTREAM_CHECK_REGEX = "releases/(?P<pver>.+)"
diff --git a/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb b/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
index 59d414a0a6..47fae72666 100644
--- a/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
+++ b/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
@@ -9,8 +9,8 @@ LICENSE = "MIT"
9LIC_FILES_CHKSUM = "file://COPYING;md5=548a66038a77415e1df51118625e832f \ 9LIC_FILES_CHKSUM = "file://COPYING;md5=548a66038a77415e1df51118625e832f \
10 " 10 "
11 11
12SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz" 12SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/archive/${PV}/${BPN}-${PV}.tar.bz2"
13SRC_URI[sha256sum] = "d9278c22554586881802540751bcc42569262bf80cd9ac9b0fd12ff4bd09a9e4" 13SRC_URI[sha256sum] = "f38c6a4ca2113cf716ca687a4cd8e24a11cbeeb04759678b7bb2da7d16335d18"
14 14
15UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/tags" 15UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/tags"
16UPSTREAM_CHECK_REGEX = "releases/(?P<pver>.+)" 16UPSTREAM_CHECK_REGEX = "releases/(?P<pver>.+)"
diff --git a/meta/recipes-graphics/wayland/wayland_1.23.1.bb b/meta/recipes-graphics/wayland/wayland_1.23.1.bb
index 3a5d91be04..1b29f7762e 100644
--- a/meta/recipes-graphics/wayland/wayland_1.23.1.bb
+++ b/meta/recipes-graphics/wayland/wayland_1.23.1.bb
@@ -12,11 +12,11 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b31d8f53b6aaf2b4985d7dd7810a70d1 \
12 12
13DEPENDS = "expat libffi wayland-native" 13DEPENDS = "expat libffi wayland-native"
14 14
15SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz \ 15SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/archive/${PV}/${BPN}-${PV}.tar.bz2 \
16 file://run-ptest \ 16 file://run-ptest \
17 file://0001-build-Fix-strndup-detection-on-MinGW.patch \ 17 file://0001-build-Fix-strndup-detection-on-MinGW.patch \
18 " 18 "
19SRC_URI[sha256sum] = "864fb2a8399e2d0ec39d56e9d9b753c093775beadc6022ce81f441929a81e5ed" 19SRC_URI[sha256sum] = "4afcf2942a39d8276d06dcefc89dfaf029222994778fd4c49aa68a702ebf698f"
20 20
21UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/tags" 21UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/tags"
22UPSTREAM_CHECK_REGEX = "releases/(?P<pver>\d+\.\d+\.(?!9\d+)\d+)" 22UPSTREAM_CHECK_REGEX = "releases/(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb b/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
index 5a7bad9017..baa13c866e 100644
--- a/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
@@ -14,13 +14,13 @@ python () {
14 raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it") 14 raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
15} 15}
16 16
17SRCREV_machine ?= "7cb6d42c40de351ecab0a083aef260f84407de0d" 17SRCREV_machine ?= "6f409db4f0082642197240f39b8a58850c8eb884"
18SRCREV_meta ?= "60b8562e9989f268ad5d241989f56b71cfa1f648" 18SRCREV_meta ?= "f8cd1607519efd135e4037c84b6e42684b12c5a8"
19 19
20SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \ 20SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
21 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https" 21 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https"
22 22
23LINUX_VERSION ?= "6.12.31" 23LINUX_VERSION ?= "6.12.36"
24 24
25LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 25LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
26 26
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
index 0fad73dddd..ec2136f035 100644
--- a/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
@@ -8,7 +8,7 @@ require recipes-kernel/linux/linux-yocto.inc
8# CVE exclusions 8# CVE exclusions
9include recipes-kernel/linux/cve-exclusion_6.12.inc 9include recipes-kernel/linux/cve-exclusion_6.12.inc
10 10
11LINUX_VERSION ?= "6.12.31" 11LINUX_VERSION ?= "6.12.36"
12LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 12LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
13 13
14DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}" 14DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@ DEPENDS += "openssl-native util-linux-native"
17KMETA = "kernel-meta" 17KMETA = "kernel-meta"
18KCONF_BSP_AUDIT_LEVEL = "2" 18KCONF_BSP_AUDIT_LEVEL = "2"
19 19
20SRCREV_machine ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 20SRCREV_machine ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
21SRCREV_meta ?= "60b8562e9989f268ad5d241989f56b71cfa1f648" 21SRCREV_meta ?= "f8cd1607519efd135e4037c84b6e42684b12c5a8"
22 22
23PV = "${LINUX_VERSION}+git" 23PV = "${LINUX_VERSION}+git"
24 24
diff --git a/meta/recipes-kernel/linux/linux-yocto_6.12.bb b/meta/recipes-kernel/linux/linux-yocto_6.12.bb
index 262ae35704..205c8a3ed5 100644
--- a/meta/recipes-kernel/linux/linux-yocto_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_6.12.bb
@@ -18,25 +18,25 @@ KBRANCH:qemux86.104 ?= "v6.12/standard/base"
18KBRANCH:qemuloongarch64 ?= "v6.12/standard/base" 18KBRANCH:qemuloongarch64 ?= "v6.12/standard/base"
19KBRANCH:qemumips64 ?= "v6.12/standard/mti-malta64" 19KBRANCH:qemumips64 ?= "v6.12/standard/mti-malta64"
20 20
21SRCREV_machine:qemuarm ?= "37a1fd13ca538e7785daf01434495a614bc55ead" 21SRCREV_machine:qemuarm ?= "511b6848cd392ee9bbc841794a5e905f4db31689"
22SRCREV_machine:qemuarm64 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 22SRCREV_machine:qemuarm64 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
23SRCREV_machine:qemuloongarch64 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 23SRCREV_machine:qemuloongarch64 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
24SRCREV_machine:qemumips ?= "2bcf58ea5aa19d54c436e63c59ab09b307e9ee8e" 24SRCREV_machine:qemumips ?= "afbfb2216d4f16a231b834922a937641864c8931"
25SRCREV_machine:qemuppc ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 25SRCREV_machine:qemuppc ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
26SRCREV_machine:qemuriscv64 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 26SRCREV_machine:qemuriscv64 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
27SRCREV_machine:qemuriscv32 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 27SRCREV_machine:qemuriscv32 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
28SRCREV_machine:qemux86 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 28SRCREV_machine:qemux86 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
29SRCREV_machine:qemux86-64 ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 29SRCREV_machine:qemux86-64 ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
30SRCREV_machine:qemumips64 ?= "6470f58a8f04951f202cf85afb4421d2e7ec9995" 30SRCREV_machine:qemumips64 ?= "707ad7179119ed07e5911b61b08b7b11d2c9a352"
31SRCREV_machine ?= "298aefdf4112e7c0a84522e4acf2c722e433c8a0" 31SRCREV_machine ?= "5633e9a98a153afa6b2051b116faef6c5e855bd8"
32SRCREV_meta ?= "60b8562e9989f268ad5d241989f56b71cfa1f648" 32SRCREV_meta ?= "f8cd1607519efd135e4037c84b6e42684b12c5a8"
33 33
34# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll 34# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
35# get the <version>/base branch, which is pure upstream -stable, and the same 35# get the <version>/base branch, which is pure upstream -stable, and the same
36# meta SRCREV as the linux-yocto-standard builds. Select your version using the 36# meta SRCREV as the linux-yocto-standard builds. Select your version using the
37# normal PREFERRED_VERSION settings. 37# normal PREFERRED_VERSION settings.
38BBCLASSEXTEND = "devupstream:target" 38BBCLASSEXTEND = "devupstream:target"
39SRCREV_machine:class-devupstream ?= "df3f6d10f353de274cc7c87f52dba5d26f185393" 39SRCREV_machine:class-devupstream ?= "df64e51d4ab83244b6a4eb11eb41f89403611e24"
40PN:class-devupstream = "linux-yocto-upstream" 40PN:class-devupstream = "linux-yocto-upstream"
41KBRANCH:class-devupstream = "v6.12/base" 41KBRANCH:class-devupstream = "v6.12/base"
42 42
@@ -44,7 +44,7 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRA
44 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https" 44 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https"
45 45
46LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 46LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
47LINUX_VERSION ?= "6.12.31" 47LINUX_VERSION ?= "6.12.36"
48 48
49PV = "${LINUX_VERSION}+git" 49PV = "${LINUX_VERSION}+git"
50 50
diff --git a/meta/recipes-support/icu/icu/0001-ICU-23120-Mask-UnicodeStringTest-TestLargeMemory-on-.patch b/meta/recipes-support/icu/icu/0001-ICU-23120-Mask-UnicodeStringTest-TestLargeMemory-on-.patch
new file mode 100644
index 0000000000..e2e9546679
--- /dev/null
+++ b/meta/recipes-support/icu/icu/0001-ICU-23120-Mask-UnicodeStringTest-TestLargeMemory-on-.patch
@@ -0,0 +1,28 @@
1From 4b3e6888c2aaba6465f1bc96f61b17a2513050f3 Mon Sep 17 00:00:00 2001
2From: David Seifert <soap@gentoo.org>
3Date: Sat, 21 Jun 2025 12:28:15 +0200
4Subject: [PATCH] ICU-23120 Mask UnicodeStringTest::TestLargeMemory on 32-bit
5 platforms
6
7Upstream-Status: Submitted [https://github.com/unicode-org/icu/pull/3496]
8Signed-off-by: Daisuke Yamane <yamane07ynct@gmail.com>
9---
10 test/intltest/ustrtest.cpp | 2 +-
11 1 file changed, 1 insertion(+), 1 deletion(-)
12
13diff --git a/test/intltest/ustrtest.cpp b/test/intltest/ustrtest.cpp
14index 56976b3e3d2..26225f5b5b5 100644
15--- a/test/intltest/ustrtest.cpp
16+++ b/test/intltest/ustrtest.cpp
17@@ -2353,7 +2353,7 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
18 }
19
20 void UnicodeStringTest::TestLargeMemory() {
21-#if U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED
22+#if (U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED) && (UINTPTR_MAX == 0xFFFFFFFFFFFFFFFF)
23 if(quick) { return; }
24 IcuTestErrorCode status(*this, "TestLargeMemory");
25 constexpr uint32_t len = 2147483643;
26--
272.43.0
28
diff --git a/meta/recipes-support/icu/icu/0001-test-Add-support-ptest.patch b/meta/recipes-support/icu/icu/0001-test-Add-support-ptest.patch
new file mode 100644
index 0000000000..88350c0db5
--- /dev/null
+++ b/meta/recipes-support/icu/icu/0001-test-Add-support-ptest.patch
@@ -0,0 +1,84 @@
1From 783d9e0d3d7824fbca53c2c3a80e8e5e23eacc82 Mon Sep 17 00:00:00 2001
2From: Daisuke Yamane <yamane07ynct@gmail.com>
3Date: Tue, 1 Jul 2025 18:35:25 +0900
4Subject: [PATCH] test: Add support ptest
5
6Upstream-Status: Inappropriate [oe-core specific]
7
8Signed-off-by: Daisuke Yamane <yamane07ynct@gmail.com>
9---
10 test/cintltst/Makefile.in | 2 +-
11 test/intltest/Makefile.in | 2 +-
12 test/intltest/intltest.cpp | 2 +-
13 test/iotest/Makefile.in | 2 +-
14 test/letest/Makefile.in | 2 +-
15 5 files changed, 5 insertions(+), 5 deletions(-)
16
17diff --git a/test/cintltst/Makefile.in b/test/cintltst/Makefile.in
18index 552a105..9cf3071 100644
19--- a/test/cintltst/Makefile.in
20+++ b/test/cintltst/Makefile.in
21@@ -39,7 +39,7 @@ CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ct
22 ifdef QNX_TARGET
23 DEFS += -D'ICU_UNICODE_VERSION="$(UNICODE_VERSION)"' -D'ICU_VERSION="@VERSION@"' -D'ICUDATA_NAME="$(ICUDATA_PLATFORM_NAME)"' -D'U_TOPSRCDIR="/var/icu_tests"' -D'U_TOPBUILDDIR="/var/icu_tests/"'
24 else
25-DEFS += -D'ICU_UNICODE_VERSION="$(UNICODE_VERSION)"' -D'ICU_VERSION="@VERSION@"' -D'ICUDATA_NAME="$(ICUDATA_PLATFORM_NAME)"' -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
26+DEFS += -D'ICU_UNICODE_VERSION="$(UNICODE_VERSION)"' -D'ICU_VERSION="@VERSION@"' -D'ICUDATA_NAME="$(ICUDATA_PLATFORM_NAME)"' -D'U_TOPSRCDIR="$(PTEST_PATH)/"' -D'U_TOPBUILDDIR="$(PTEST_PATH)/"'
27 endif
28 LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
29
30diff --git a/test/intltest/Makefile.in b/test/intltest/Makefile.in
31index 5d4a03b..ca4e4cd 100644
32--- a/test/intltest/Makefile.in
33+++ b/test/intltest/Makefile.in
34@@ -39,7 +39,7 @@ CPPFLAGS += -DUNISTR_FROM_CHAR_EXPLICIT= -DUNISTR_FROM_STRING_EXPLICIT=
35 ifdef QNX_TARGET
36 DEFS += -D'U_TOPSRCDIR="/var/icu_tests"' -D'U_TOPBUILDDIR="/var/icu_tests/"'
37 else
38-DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
39+DEFS += -D'U_TOPSRCDIR="$(PTEST_PATH)/"' -D'U_TOPBUILDDIR="$(PTEST_PATH)/"'
40 endif
41 LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) $(LIB_THREAD)
42
43diff --git a/test/intltest/intltest.cpp b/test/intltest/intltest.cpp
44index 3806d0f..33829b0 100644
45--- a/test/intltest/intltest.cpp
46+++ b/test/intltest/intltest.cpp
47@@ -1713,7 +1713,7 @@ static bool fileExists(const char* fileName) {
48 * Returns the path to icu/testdata/
49 */
50 const char *IntlTest::getSharedTestData(UErrorCode& err) {
51-#define SOURCE_TARBALL_TOP U_TOPSRCDIR U_FILE_SEP_STRING ".." U_FILE_SEP_STRING
52+#define SOURCE_TARBALL_TOP U_TOPSRCDIR U_FILE_SEP_STRING
53 #define REPO_TOP SOURCE_TARBALL_TOP ".." U_FILE_SEP_STRING
54 #define FILE_NAME U_FILE_SEP_STRING "message2" U_FILE_SEP_STRING "valid-tests.json"
55 const char *srcDataDir = nullptr;
56diff --git a/test/iotest/Makefile.in b/test/iotest/Makefile.in
57index 16c510f..9eeff4b 100644
58--- a/test/iotest/Makefile.in
59+++ b/test/iotest/Makefile.in
60@@ -39,7 +39,7 @@ CPPFLAGS += -DUNISTR_FROM_CHAR_EXPLICIT= -DUNISTR_FROM_STRING_EXPLICIT=
61 ifdef QNX_TARGET
62 DEFS += -D'U_TOPSRCDIR="/var/icu_tests"' -D'U_TOPBUILDDIR="/var/icu_tests/"'
63 else
64-DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
65+DEFS += -D'U_TOPSRCDIR="$(PTEST_PATH)/"' -D'U_TOPBUILDDIR="$(PTEST_PATH)/"'
66 endif
67 LIBS = $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(LIBICUIO) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
68
69diff --git a/test/letest/Makefile.in b/test/letest/Makefile.in
70index 156c86f..555a820 100644
71--- a/test/letest/Makefile.in
72+++ b/test/letest/Makefile.in
73@@ -30,7 +30,7 @@ BUILDDIR := $(BUILDDIR:test\\cintltst/../../=)
74 BUILDDIR := $(BUILDDIR:TEST\\CINTLTST/../../=)
75
76 CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/layoutex $(ICULE_CFLAGS) $(ICULEHB_CFLAGS)
77-DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
78+DEFS += -D'U_TOPSRCDIR="$(PTEST_PATH)/"' -D'U_TOPBUILDDIR="$(PTEST_PATH)/"'
79 LIBS = $(LIBICULX) $(LIBICUUC) $(LIBICUI18N) $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) $(ICULEHB_LIBS)
80
81 COMMONOBJECTS = SimpleFontInstance.o
82--
832.43.0
84
diff --git a/meta/recipes-support/icu/icu/run-ptest b/meta/recipes-support/icu/icu/run-ptest
new file mode 100755
index 0000000000..e5bf27a822
--- /dev/null
+++ b/meta/recipes-support/icu/icu/run-ptest
@@ -0,0 +1,13 @@
1#!/bin/sh
2
3TOPDIR=$(dirname "$(realpath $0)")
4cd ${TOPDIR}/test/tests
5TESTS=$(find . -executable -type f)
6for t in ${TESTS}; do
7 ./$t
8 if [ "$?" = "0" ]; then
9 echo "PASS: $t"
10 else
11 echo "FAIL: $t"
12 fi
13done
diff --git a/meta/recipes-support/icu/icu_77-1.bb b/meta/recipes-support/icu/icu_77-1.bb
index e655b18ad2..cd81a6c729 100644
--- a/meta/recipes-support/icu/icu_77-1.bb
+++ b/meta/recipes-support/icu/icu_77-1.bb
@@ -119,6 +119,9 @@ SRC_URI = "${BASE_SRC_URI};name=code \
119 ${DATA_SRC_URI};name=data \ 119 ${DATA_SRC_URI};name=data \
120 file://filter.json \ 120 file://filter.json \
121 file://0001-icu-Added-armeb-support.patch \ 121 file://0001-icu-Added-armeb-support.patch \
122 file://0001-ICU-23120-Mask-UnicodeStringTest-TestLargeMemory-on-.patch \
123 file://0001-test-Add-support-ptest.patch \
124 file://run-ptest \
122 " 125 "
123 126
124SRC_URI:append:class-target = "\ 127SRC_URI:append:class-target = "\
@@ -160,3 +163,23 @@ do_make_icudata() {
160} 163}
161 164
162addtask make_icudata before do_configure after do_patch do_prepare_recipe_sysroot 165addtask make_icudata before do_configure after do_patch do_prepare_recipe_sysroot
166
167inherit ptest
168RDEPENDS:${PN}-ptest += "bash"
169
170do_compile_ptest() {
171 oe_runmake -C test everything PTEST_PATH=${PTEST_PATH}
172}
173
174do_install_ptest() {
175 install -d ${D}${PTEST_PATH}/test
176 install -d ${D}${PTEST_PATH}/data
177 cp -r ${S}/test/testdata ${D}/${PTEST_PATH}/test
178 cp -r ${S}/data/unidata ${D}/${PTEST_PATH}/data/
179 cp -r ${S}/data/sprep ${D}/${PTEST_PATH}/data/
180 cp -r ${S}/../testdata ${D}/${PTEST_PATH}/
181 cp -r ${B}/test/testdata/out ${D}/${PTEST_PATH}/test/testdata
182
183 install -d ${D}${PTEST_PATH}/test/tests
184 find ${B}/test/ -type f -executable -exec cp {} ${D}${PTEST_PATH}/test/tests \;
185}
diff --git a/scripts/contrib/improve_kernel_cve_report.py b/scripts/contrib/improve_kernel_cve_report.py
index 829cc4cd30..5c39df05a5 100755
--- a/scripts/contrib/improve_kernel_cve_report.py
+++ b/scripts/contrib/improve_kernel_cve_report.py
@@ -340,6 +340,10 @@ def cve_update(cve_data, cve, entry):
340 if cve_data[cve]['status'] == entry['status']: 340 if cve_data[cve]['status'] == entry['status']:
341 return 341 return
342 if entry['status'] == "Unpatched" and cve_data[cve]['status'] == "Patched": 342 if entry['status'] == "Unpatched" and cve_data[cve]['status'] == "Patched":
343 # Backported-patch (e.g. vendor kernel repo with cherry-picked CVE patch)
344 # has priority over unpatch from CNA
345 if cve_data[cve]['detail'] == "backported-patch":
346 return
343 logging.warning("CVE entry %s update from Patched to Unpatched from the scan result", cve) 347 logging.warning("CVE entry %s update from Patched to Unpatched from the scan result", cve)
344 cve_data[cve] = copy_data(cve_data[cve], entry) 348 cve_data[cve] = copy_data(cve_data[cve], entry)
345 return 349 return
@@ -441,10 +445,12 @@ def main():
441 is_kernel=True 445 is_kernel=True
442 if not is_kernel: 446 if not is_kernel:
443 continue 447 continue
444 448 # We remove custom versions after -
449 upstream_version = Version(pkg["version"].split("-")[0])
450 logging.info("Checking kernel %s", upstream_version)
445 kernel_cves = get_kernel_cves(args.datadir, 451 kernel_cves = get_kernel_cves(args.datadir,
446 compiled_files, 452 compiled_files,
447 Version(pkg["version"])) 453 upstream_version)
448 logging.info("Total kernel cves from kernel CNA: %s", len(kernel_cves)) 454 logging.info("Total kernel cves from kernel CNA: %s", len(kernel_cves))
449 cves = {issue["id"]: issue for issue in pkg["issue"]} 455 cves = {issue["id"]: issue for issue in pkg["issue"]}
450 logging.info("Total kernel before processing cves: %s", len(cves)) 456 logging.info("Total kernel before processing cves: %s", len(cves))
diff --git a/scripts/oe-test b/scripts/oe-test
index 55985b0b24..3a00369e01 100755
--- a/scripts/oe-test
+++ b/scripts/oe-test
@@ -7,14 +7,18 @@
7# SPDX-License-Identifier: MIT 7# SPDX-License-Identifier: MIT
8# 8#
9 9
10import os
11import sys
12import argparse 10import argparse
11import glob
13import logging 12import logging
13import os
14import sys
14 15
15scripts_path = os.path.dirname(os.path.realpath(__file__)) 16scripts_path = os.path.dirname(os.path.realpath(__file__))
16lib_path = scripts_path + '/lib' 17lib_path = os.path.join(scripts_path, 'lib')
17sys.path = sys.path + [lib_path] 18sys.path.append(lib_path)
19meta_lib_paths = glob.glob(scripts_path + '/*/lib', recursive=True)
20for p in meta_lib_paths:
21 sys.path.append(p)
18import argparse_oe 22import argparse_oe
19import scriptutils 23import scriptutils
20 24