mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
Because methods for get latest version of upstream package are now available into bitbake removes duplicated code and make use of it. Compatibility testing was made running distrodata class and the result files can be found at: https://bugzilla.yoctoproject.org/show_bug.cgi?id=1813 [YOCTO #1813] (From OE-Core rev: 68ddb28a68ceb59cd1ed322c16143827ce1ac712) Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
497 lines
18 KiB
Plaintext
497 lines
18 KiB
Plaintext
include conf/distro/include/package_regex.inc
|
|
addhandler distro_eventhandler
|
|
distro_eventhandler[eventmask] = "bb.event.BuildStarted"
|
|
python distro_eventhandler() {
|
|
import oe.distro_check as dc
|
|
logfile = dc.create_log_file(e.data, "distrodata.csv")
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("Package,Description,Owner,License,VerMatch,Version,Upsteam,Reason,Recipe Status,Distro 1,Distro 2,Distro 3\n")
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
|
|
return
|
|
}
|
|
|
|
addtask distrodata_np
|
|
do_distrodata_np[nostamp] = "1"
|
|
python do_distrodata_np() {
|
|
localdata = bb.data.createCopy(d)
|
|
pn = d.getVar("PN", True)
|
|
bb.note("Package Name: %s" % pn)
|
|
|
|
import oe.distro_check as dist_check
|
|
tmpdir = d.getVar('TMPDIR', True)
|
|
distro_check_dir = os.path.join(tmpdir, "distro_check")
|
|
datetime = localdata.getVar('DATETIME', True)
|
|
dist_check.update_distro_data(distro_check_dir, datetime)
|
|
|
|
if pn.find("-native") != -1:
|
|
pnstripped = pn.split("-native")
|
|
bb.note("Native Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.find("-cross") != -1:
|
|
pnstripped = pn.split("-cross")
|
|
bb.note("cross Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.find("-crosssdk") != -1:
|
|
pnstripped = pn.split("-crosssdk")
|
|
bb.note("cross Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.startswith("nativesdk-"):
|
|
pnstripped = pn.replace("nativesdk-", "")
|
|
bb.note("NativeSDK Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
|
|
if pn.find("-initial") != -1:
|
|
pnstripped = pn.split("-initial")
|
|
bb.note("initial Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
"""generate package information from .bb file"""
|
|
pname = localdata.getVar('PN', True)
|
|
pcurver = localdata.getVar('PV', True)
|
|
pdesc = localdata.getVar('DESCRIPTION', True)
|
|
if pdesc is not None:
|
|
pdesc = pdesc.replace(',','')
|
|
pdesc = pdesc.replace('\n','')
|
|
|
|
pgrp = localdata.getVar('SECTION', True)
|
|
plicense = localdata.getVar('LICENSE', True).replace(',','_')
|
|
|
|
rstatus = localdata.getVar('RECIPE_COLOR', True)
|
|
if rstatus is not None:
|
|
rstatus = rstatus.replace(',','')
|
|
|
|
pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION', True)
|
|
if pcurver == pupver:
|
|
vermatch="1"
|
|
else:
|
|
vermatch="0"
|
|
noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON', True)
|
|
if noupdate_reason is None:
|
|
noupdate="0"
|
|
else:
|
|
noupdate="1"
|
|
noupdate_reason = noupdate_reason.replace(',','')
|
|
|
|
maintainer = localdata.getVar('RECIPE_MAINTAINER', True)
|
|
rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE', True)
|
|
result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata)
|
|
|
|
bb.note("DISTRO: %s,%s,%s,%s,%s,%s,%s,%s,%s\n" % \
|
|
(pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus))
|
|
line = pn
|
|
for i in result:
|
|
line = line + "," + i
|
|
bb.note("%s\n" % line)
|
|
}
|
|
|
|
addtask distrodata
|
|
do_distrodata[nostamp] = "1"
|
|
python do_distrodata() {
|
|
logpath = d.getVar('LOG_DIR', True)
|
|
bb.utils.mkdirhier(logpath)
|
|
logfile = os.path.join(logpath, "distrodata.csv")
|
|
|
|
import oe.distro_check as dist_check
|
|
localdata = bb.data.createCopy(d)
|
|
tmpdir = d.getVar('TMPDIR', True)
|
|
distro_check_dir = os.path.join(tmpdir, "distro_check")
|
|
datetime = localdata.getVar('DATETIME', True)
|
|
dist_check.update_distro_data(distro_check_dir, datetime)
|
|
|
|
pn = d.getVar("PN", True)
|
|
bb.note("Package Name: %s" % pn)
|
|
|
|
if pn.find("-native") != -1:
|
|
pnstripped = pn.split("-native")
|
|
bb.note("Native Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.startswith("nativesdk-"):
|
|
pnstripped = pn.replace("nativesdk-", "")
|
|
bb.note("NativeSDK Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.find("-cross") != -1:
|
|
pnstripped = pn.split("-cross")
|
|
bb.note("cross Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.find("-crosssdk") != -1:
|
|
pnstripped = pn.split("-crosssdk")
|
|
bb.note("cross Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pn.find("-initial") != -1:
|
|
pnstripped = pn.split("-initial")
|
|
bb.note("initial Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
"""generate package information from .bb file"""
|
|
pname = localdata.getVar('PN', True)
|
|
pcurver = localdata.getVar('PV', True)
|
|
pdesc = localdata.getVar('DESCRIPTION', True)
|
|
if pdesc is not None:
|
|
pdesc = pdesc.replace(',','')
|
|
pdesc = pdesc.replace('\n','')
|
|
|
|
pgrp = localdata.getVar('SECTION', True)
|
|
plicense = localdata.getVar('LICENSE', True).replace(',','_')
|
|
|
|
rstatus = localdata.getVar('RECIPE_COLOR', True)
|
|
if rstatus is not None:
|
|
rstatus = rstatus.replace(',','')
|
|
|
|
pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION', True)
|
|
if pcurver == pupver:
|
|
vermatch="1"
|
|
else:
|
|
vermatch="0"
|
|
|
|
noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON', True)
|
|
if noupdate_reason is None:
|
|
noupdate="0"
|
|
else:
|
|
noupdate="1"
|
|
noupdate_reason = noupdate_reason.replace(',','')
|
|
|
|
maintainer = localdata.getVar('RECIPE_MAINTAINER', True)
|
|
rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE', True)
|
|
# do the comparison
|
|
result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata)
|
|
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("%s,%s,%s,%s,%s,%s,%s,%s,%s" % \
|
|
(pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus))
|
|
line = ""
|
|
for i in result:
|
|
line = line + "," + i
|
|
f.write(line + "\n")
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
}
|
|
|
|
addtask distrodataall after do_distrodata
|
|
do_distrodataall[recrdeptask] = "do_distrodataall do_distrodata"
|
|
do_distrodataall[recideptask] = "do_${BB_DEFAULT_TASK}"
|
|
do_distrodataall[nostamp] = "1"
|
|
do_distrodataall() {
|
|
:
|
|
}
|
|
|
|
addhandler checkpkg_eventhandler
|
|
checkpkg_eventhandler[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted"
|
|
python checkpkg_eventhandler() {
|
|
def parse_csv_file(filename):
|
|
package_dict = {}
|
|
fd = open(filename, "r")
|
|
lines = fd.read().rsplit("\n")
|
|
fd.close()
|
|
|
|
first_line = ''
|
|
index = 0
|
|
for line in lines:
|
|
#Skip the first line
|
|
if index == 0:
|
|
first_line = line
|
|
index += 1
|
|
continue
|
|
elif line == '':
|
|
continue
|
|
index += 1
|
|
package_name = line.rsplit("\t")[0]
|
|
if '-native' in package_name or 'nativesdk-' in package_name:
|
|
original_name = package_name.rsplit('-native')[0]
|
|
if original_name == '':
|
|
original_name = package_name.rsplit('nativesdk-')[0]
|
|
if original_name in package_dict:
|
|
continue
|
|
else:
|
|
package_dict[package_name] = line
|
|
else:
|
|
new_name = package_name + "-native"
|
|
if not(new_name in package_dict):
|
|
new_name = 'nativesdk-' + package_name
|
|
if new_name in package_dict:
|
|
del package_dict[new_name]
|
|
package_dict[package_name] = line
|
|
|
|
fd = open(filename, "w")
|
|
fd.write("%s\n"%first_line)
|
|
for el in package_dict:
|
|
fd.write(package_dict[el] + "\n")
|
|
fd.close()
|
|
|
|
del package_dict
|
|
|
|
if bb.event.getName(e) == "BuildStarted":
|
|
import oe.distro_check as dc
|
|
logfile = dc.create_log_file(e.data, "checkpkg.csv")
|
|
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("Package\tVersion\tUpver\tLicense\tSection\tHome\tRelease\tDepends\tBugTracker\tPE\tDescription\tStatus\tTracking\tURI\tMAINTAINER\tNoUpReason\n")
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
elif bb.event.getName(e) == "BuildCompleted":
|
|
import os
|
|
filename = "tmp/log/checkpkg.csv"
|
|
if os.path.isfile(filename):
|
|
lf = bb.utils.lockfile("%s.lock"%filename)
|
|
parse_csv_file(filename)
|
|
bb.utils.unlockfile(lf)
|
|
return
|
|
}
|
|
|
|
addtask checkpkg
|
|
do_checkpkg[nostamp] = "1"
|
|
python do_checkpkg() {
|
|
localdata = bb.data.createCopy(d)
|
|
import re
|
|
import tempfile
|
|
import subprocess
|
|
|
|
"""first check whether a uri is provided"""
|
|
src_uri = d.getVar('SRC_URI', True)
|
|
if not src_uri:
|
|
return
|
|
|
|
"""initialize log files."""
|
|
logpath = d.getVar('LOG_DIR', True)
|
|
bb.utils.mkdirhier(logpath)
|
|
logfile = os.path.join(logpath, "checkpkg.csv")
|
|
|
|
"""generate package information from .bb file"""
|
|
pname = d.getVar('PN', True)
|
|
|
|
if pname.find("-native") != -1:
|
|
if d.getVar('BBCLASSEXTEND', True):
|
|
return
|
|
pnstripped = pname.split("-native")
|
|
bb.note("Native Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pname.startswith("nativesdk-"):
|
|
if d.getVar('BBCLASSEXTEND', True):
|
|
return
|
|
pnstripped = pname.replace("nativesdk-", "")
|
|
bb.note("NativeSDK Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pname.find("-cross") != -1:
|
|
pnstripped = pname.split("-cross")
|
|
bb.note("cross Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
if pname.find("-initial") != -1:
|
|
pnstripped = pname.split("-initial")
|
|
bb.note("initial Split: %s" % pnstripped)
|
|
localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
|
|
bb.data.update_data(localdata)
|
|
|
|
pdesc = localdata.getVar('DESCRIPTION', True)
|
|
pgrp = localdata.getVar('SECTION', True)
|
|
if localdata.getVar('PRSPV', True):
|
|
pversion = localdata.getVar('PRSPV', True)
|
|
else:
|
|
pversion = localdata.getVar('PV', True)
|
|
plicense = localdata.getVar('LICENSE', True)
|
|
psection = localdata.getVar('SECTION', True)
|
|
phome = localdata.getVar('HOMEPAGE', True)
|
|
prelease = localdata.getVar('PR', True)
|
|
pdepends = localdata.getVar('DEPENDS', True)
|
|
pbugtracker = localdata.getVar('BUGTRACKER', True)
|
|
ppe = localdata.getVar('PE', True)
|
|
psrcuri = localdata.getVar('SRC_URI', True)
|
|
maintainer = localdata.getVar('RECIPE_MAINTAINER', True)
|
|
|
|
""" Get upstream version version """
|
|
pupver = None
|
|
pstatus = "ErrUnknown"
|
|
found = 0
|
|
|
|
for uri in src_uri.split():
|
|
m = re.compile('(?P<type>[^:]*)').match(uri)
|
|
if not m:
|
|
raise MalformedUrl(uri)
|
|
elif m.group('type') in ('http', 'https', 'ftp', 'cvs', 'svn', 'git'):
|
|
found = 1
|
|
psrcuri = uri
|
|
pproto = m.group('type')
|
|
break
|
|
if not found:
|
|
pproto = "file"
|
|
|
|
if pproto in ['http', 'https', 'ftp', 'git']:
|
|
try:
|
|
ud = bb.fetch2.FetchData(psrcuri, d)
|
|
pupver = ud.method.latest_versionstring(ud, d)
|
|
if pproto == 'git':
|
|
if pupver == "":
|
|
pupver = pversion.rsplit("+")[0]
|
|
if re.search(pversion, "gitrAUTOINC"):
|
|
pupver += "+gitrAUTOINC+"
|
|
else:
|
|
pupver += "+gitAUTOINC+"
|
|
latest_revision = ud.method.latest_revision(ud, d, ud.names[0])
|
|
pupver += latest_revision[:10]
|
|
except Exception as inst:
|
|
bb.warn("%s: unexpected error: %s" % (pname, repr(inst)))
|
|
pstatus = "ErrAccess"
|
|
elif pproto == "file":
|
|
"""Local files are always updated"""
|
|
pupver = pversion
|
|
else:
|
|
pstatus = "ErrUnsupportedProto"
|
|
bb.note("do_checkpkg, protocol %s isn't implemented" % pproto)
|
|
|
|
if not pupver:
|
|
pupver = "N/A"
|
|
elif pupver == pversion:
|
|
pstatus = "MATCH"
|
|
else:
|
|
pstatus = "UPDATE"
|
|
|
|
"""Read from manual distro tracking fields as alternative"""
|
|
pmver = d.getVar("RECIPE_UPSTREAM_VERSION", True)
|
|
if not pmver:
|
|
pmver = "N/A"
|
|
pmstatus = "ErrNoRecipeData"
|
|
elif pmver == pupver:
|
|
pmstatus = "MATCH"
|
|
else:
|
|
pmstatus = "UPDATE"
|
|
|
|
pdepends = "".join(pdepends.split("\t"))
|
|
pdesc = "".join(pdesc.split("\t"))
|
|
no_upgr_reason = d.getVar('RECIPE_NO_UPDATE_REASON', True)
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \
|
|
(pname,pversion,pupver,plicense,psection, phome,prelease, pdepends,pbugtracker,ppe,pdesc,pstatus,pmver,psrcuri,maintainer, no_upgr_reason))
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
}
|
|
|
|
addtask checkpkgall after do_checkpkg
|
|
do_checkpkgall[recrdeptask] = "do_checkpkgall do_checkpkg"
|
|
do_checkpkgall[recideptask] = "do_${BB_DEFAULT_TASK}"
|
|
do_checkpkgall[nostamp] = "1"
|
|
do_checkpkgall() {
|
|
:
|
|
}
|
|
|
|
addhandler distro_check_eventhandler
|
|
distro_check_eventhandler[eventmask] = "bb.event.BuildStarted"
|
|
python distro_check_eventhandler() {
|
|
"""initialize log files."""
|
|
import oe.distro_check as dc
|
|
result_file = dc.create_log_file(e.data, "distrocheck.csv")
|
|
return
|
|
}
|
|
|
|
addtask 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
|
|
import shutil
|
|
if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('nativesdk',d):
|
|
return
|
|
|
|
localdata = bb.data.createCopy(d)
|
|
bb.data.update_data(localdata)
|
|
tmpdir = d.getVar('TMPDIR', True)
|
|
distro_check_dir = os.path.join(tmpdir, "distro_check")
|
|
logpath = d.getVar('LOG_DIR', True)
|
|
bb.utils.mkdirhier(logpath)
|
|
result_file = os.path.join(logpath, "distrocheck.csv")
|
|
datetime = localdata.getVar('DATETIME', True)
|
|
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, result_file, d)
|
|
}
|
|
|
|
addtask distro_checkall after do_distro_check
|
|
do_distro_checkall[recrdeptask] = "do_distro_checkall do_distro_check"
|
|
do_distro_checkall[recideptask] = "do_${BB_DEFAULT_TASK}"
|
|
do_distro_checkall[nostamp] = "1"
|
|
do_distro_checkall() {
|
|
:
|
|
}
|
|
#
|
|
#Check Missing License Text.
|
|
#Use this task to generate the missing license text data for pkg-report system,
|
|
#then we can search those recipes which license text isn't exsit in common-licenses directory
|
|
#
|
|
addhandler checklicense_eventhandler
|
|
checklicense_eventhandler[eventmask] = "bb.event.BuildStarted"
|
|
python checklicense_eventhandler() {
|
|
"""initialize log files."""
|
|
import oe.distro_check as dc
|
|
logfile = dc.create_log_file(e.data, "missinglicense.csv")
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("Package\tLicense\tMissingLicense\n")
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
return
|
|
}
|
|
|
|
addtask checklicense
|
|
do_checklicense[nostamp] = "1"
|
|
python do_checklicense() {
|
|
import shutil
|
|
logpath = d.getVar('LOG_DIR', True)
|
|
bb.utils.mkdirhier(logpath)
|
|
pn = d.getVar('PN', True)
|
|
logfile = os.path.join(logpath, "missinglicense.csv")
|
|
generic_directory = d.getVar('COMMON_LICENSE_DIR', True)
|
|
license_types = d.getVar('LICENSE', True)
|
|
for license_type in ((license_types.replace('+', '').replace('|', '&')
|
|
.replace('(', '').replace(')', '').replace(';', '')
|
|
.replace(',', '').replace(" ", "").split("&"))):
|
|
if not os.path.isfile(os.path.join(generic_directory, license_type)):
|
|
lf = bb.utils.lockfile("%s.lock" % logfile)
|
|
f = open(logfile, "a")
|
|
f.write("%s\t%s\t%s\n" % \
|
|
(pn,license_types,license_type))
|
|
f.close()
|
|
bb.utils.unlockfile(lf)
|
|
return
|
|
}
|
|
|
|
addtask checklicenseall after do_checklicense
|
|
do_checklicenseall[recrdeptask] = "do_checklicenseall do_checklicense"
|
|
do_checklicenseall[recideptask] = "do_${BB_DEFAULT_TASK}"
|
|
do_checklicenseall[nostamp] = "1"
|
|
do_checklicenseall() {
|
|
:
|
|
}
|
|
|
|
|