mirror of
https://git.yoctoproject.org/poky
synced 2026-04-20 18:32:12 +02:00
This adds a new task (distro_check) for each recipe.
The task generates the source package list for Fedora OpenSuSE
Ubuntu Debian & Mandriva Linux distros.
As one recipe or source package can generate multiple target packages
the recipe name is compared with the source package name list of LInux
distributions.
Thread locking is used to avoid multiple threads racing for the
package list update.
Then the recipe name (PN) is checked if it exists in the package
list of distros. And if the DISTRO_PN_ALIAS then it is used to copmare
pacakge_name instead of the PN variable. Just for example the
DISTRO_PN_ALIAS can be defined in the recipe (.bb) files like this
In the file xset_1.0.4.bb:
DISTRO_PN_ALIAS = "Fedora=xorg-x11-server-utils;\
Ubuntu=x11-xserver-utils; Debian=x11-xserver-utils;Opensuse=xorg-x11"
The final results are stored in the tmp/log/distro_check-${DATETIME}.result
file.
FYI this command will generate the results for all recipies:
bitbake world -f -c distro_check
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
120 lines
3.1 KiB
Plaintext
120 lines
3.1 KiB
Plaintext
addtask listtasks
|
|
do_listtasks[nostamp] = "1"
|
|
python do_listtasks() {
|
|
import sys
|
|
# emit variables and shell functions
|
|
#bb.data.emit_env(sys.__stdout__, d)
|
|
# emit the metadata which isnt valid shell
|
|
for e in d.keys():
|
|
if bb.data.getVarFlag(e, 'task', d):
|
|
sys.__stdout__.write("%s\n" % e)
|
|
}
|
|
|
|
addtask clean
|
|
do_clean[dirs] = "${TOPDIR}"
|
|
do_clean[nostamp] = "1"
|
|
python do_clean() {
|
|
"""clear the build and temp directories"""
|
|
dir = bb.data.expand("${WORKDIR}", d)
|
|
if dir == '//': raise bb.build.FuncFailed("wrong DATADIR")
|
|
bb.note("removing " + dir)
|
|
os.system('rm -rf ' + dir)
|
|
|
|
dir = "%s.*" % bb.data.expand(bb.data.getVar('STAMP', d), d)
|
|
bb.note("removing " + dir)
|
|
os.system('rm -f '+ dir)
|
|
}
|
|
|
|
addtask rebuild after do_${BB_DEFAULT_TASK}
|
|
do_rebuild[dirs] = "${TOPDIR}"
|
|
do_rebuild[nostamp] = "1"
|
|
python do_rebuild() {
|
|
"""rebuild a package"""
|
|
}
|
|
|
|
#addtask mrproper
|
|
#do_mrproper[dirs] = "${TOPDIR}"
|
|
#do_mrproper[nostamp] = "1"
|
|
#python do_mrproper() {
|
|
# """clear downloaded sources, build and temp directories"""
|
|
# dir = bb.data.expand("${DL_DIR}", d)
|
|
# if dir == '/': bb.build.FuncFailed("wrong DATADIR")
|
|
# bb.debug(2, "removing " + dir)
|
|
# os.system('rm -rf ' + dir)
|
|
# bb.build.exec_func('do_clean', d)
|
|
#}
|
|
|
|
addtask checkuri
|
|
do_checkuri[nostamp] = "1"
|
|
python do_checkuri() {
|
|
import sys
|
|
|
|
localdata = bb.data.createCopy(d)
|
|
bb.data.update_data(localdata)
|
|
|
|
src_uri = bb.data.getVar('SRC_URI', localdata, 1)
|
|
|
|
try:
|
|
bb.fetch.init(src_uri.split(),d)
|
|
except bb.fetch.NoMethodError:
|
|
(type, value, traceback) = sys.exc_info()
|
|
raise bb.build.FuncFailed("No method: %s" % value)
|
|
|
|
try:
|
|
bb.fetch.checkstatus(localdata)
|
|
except bb.fetch.MissingParameterError:
|
|
(type, value, traceback) = sys.exc_info()
|
|
raise bb.build.FuncFailed("Missing parameters: %s" % value)
|
|
except bb.fetch.FetchError:
|
|
(type, value, traceback) = sys.exc_info()
|
|
raise bb.build.FuncFailed("Fetch failed: %s" % value)
|
|
except bb.fetch.MD5SumError:
|
|
(type, value, traceback) = sys.exc_info()
|
|
raise bb.build.FuncFailed("MD5 failed: %s" % value)
|
|
except:
|
|
(type, value, traceback) = sys.exc_info()
|
|
raise bb.build.FuncFailed("Unknown fetch Error: %s" % value)
|
|
}
|
|
|
|
addtask checkuriall after do_checkuri
|
|
do_checkuriall[recrdeptask] = "do_checkuri"
|
|
do_checkuriall[nostamp] = "1"
|
|
do_checkuriall() {
|
|
:
|
|
}
|
|
|
|
addtask fetchall after do_fetch
|
|
do_fetchall[recrdeptask] = "do_fetch"
|
|
do_fetchall() {
|
|
:
|
|
}
|
|
|
|
addtask buildall after do_build
|
|
do_buildall[recrdeptask] = "do_build"
|
|
do_buildall() {
|
|
:
|
|
}
|
|
|
|
addtask distro_check after do_distro_check
|
|
do_distro_check[nostamp] = "1"
|
|
python do_distro_check() {
|
|
"""checks if the package is present in other public Linux distros"""
|
|
import oe.distro_check as dc
|
|
localdata = bb.data.createCopy(d)
|
|
bb.data.update_data(localdata)
|
|
|
|
tmpdir = bb.data.getVar('TMPDIR', localdata, 1)
|
|
distro_check_dir = os.path.join(tmpdir, "distro_check")
|
|
datetime = bb.data.getVar('DATETIME', localdata, 1)
|
|
|
|
# if distro packages list data is old then rebuild it
|
|
dc.update_distro_data(distro_check_dir, datetime)
|
|
|
|
# do the comparison
|
|
result = dc.compare_in_distro_packages_list(distro_check_dir, d)
|
|
|
|
# save the results
|
|
dc.save_distro_check_result(result, datetime, d)
|
|
}
|
|
|