summaryrefslogtreecommitdiffstats
path: root/meta/classes/distrodata.bbclass
diff options
context:
space:
mode:
authorAndrei Dinu <andrei.adrianx.dinu@intel.com>2012-12-05 14:08:11 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-12-06 12:31:18 +0000
commit6a8677696e229cf28b4fe083b7028d36d75f55b6 (patch)
tree4a7ae821b9dc08587647c45d3fd04fdabad34da1 /meta/classes/distrodata.bbclass
parentae4a89612bcd0eb24db499682a44cdeb062a8690 (diff)
downloadpoky-6a8677696e229cf28b4fe083b7028d36d75f55b6.tar.gz
Added regex functionality to distrodata.bbclass
In order to make the PRS use regexes for the versioning of packages who have the distros on sourceforge and for those who have faulty reports. (From OE-Core rev: 2fe52b23c643d2125867dc9fcc9c01a184a9e238) Signed-off-by: Andrei Dinu <andrei.adrianx.dinu@intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/distrodata.bbclass')
-rw-r--r--meta/classes/distrodata.bbclass88
1 files changed, 63 insertions, 25 deletions
diff --git a/meta/classes/distrodata.bbclass b/meta/classes/distrodata.bbclass
index 69bcc35d44..ffc1b829e7 100644
--- a/meta/classes/distrodata.bbclass
+++ b/meta/classes/distrodata.bbclass
@@ -1,4 +1,4 @@
1 1include conf/distro/include/upstream_tracking.inc
2addhandler distro_eventhandler 2addhandler distro_eventhandler
3python distro_eventhandler() { 3python distro_eventhandler() {
4 4
@@ -237,11 +237,12 @@ python do_checkpkg() {
237 prefix2 = "[a-zA-Z]+" # a loose pattern such as for unzip552.tar.gz 237 prefix2 = "[a-zA-Z]+" # a loose pattern such as for unzip552.tar.gz
238 prefix3 = "[0-9a-zA-Z]+" # a loose pattern such as for 80325-quicky-0.4.tar.gz 238 prefix3 = "[0-9a-zA-Z]+" # a loose pattern such as for 80325-quicky-0.4.tar.gz
239 prefix = "(%s|%s|%s)" % (prefix1, prefix2, prefix3) 239 prefix = "(%s|%s|%s)" % (prefix1, prefix2, prefix3)
240 suffix = "(tar\.gz|tgz|tar\.bz2|zip|xz|rpm)" 240 #ver_regex = "((\d+[\.\-_]*[a-z]*)+)"#"((\d+[\.\-_[a-z]])+)"
241 suffixtuple = ("tar.gz", "tgz", "zip", "tar.bz2", "tar.xz", "src.rpm") 241 suffix = "(tar\.gz|tgz|tar\.bz2|zip|xz|rpm|bz2|orig\.tar\.gz|tar\.xz)"
242 242
243 suffixtuple = ("tar.gz", "tgz", "zip", "tar.bz2", "tar.xz", "src.rpm", "bz2", "orig.tar.gz")
243 sinterstr = "(?P<name>%s?)(?P<ver>.*)" % prefix 244 sinterstr = "(?P<name>%s?)(?P<ver>.*)" % prefix
244 sdirstr = "(?P<name>%s)(?P<ver>.*)\.(?P<type>%s$)" % (prefix, suffix) 245 sdirstr = "(?P<name>%s)\.?(?P<ver>.*)\.(?P<type>%s$)" % (prefix, suffix)
245 246
246 def parse_inter(s): 247 def parse_inter(s):
247 m = re.search(sinterstr, s) 248 m = re.search(sinterstr, s)
@@ -271,6 +272,13 @@ python do_checkpkg() {
271 ev = re.search("[\d|\.]+[^a-zA-Z]+", ev).group() 272 ev = re.search("[\d|\.]+[^a-zA-Z]+", ev).group()
272 return bb.utils.vercmp(("0", ov, ""), ("0", ev, "")) 273 return bb.utils.vercmp(("0", ov, ""), ("0", ev, ""))
273 274
275 def __vercmp2(old,new):
276 (on,ov,ot) = old
277 (en,ev,et) = new
278 #bb.plain("old n = %s" %(str(ov)))
279 if on != en or (et and et not in suffixtuple):
280 return False
281 return ov < ev
274 """ 282 """
275 wrapper for fetch upstream directory info 283 wrapper for fetch upstream directory info
276 'url' - upstream link customized by regular expression 284 'url' - upstream link customized by regular expression
@@ -376,6 +384,7 @@ python do_checkpkg() {
376 if not re.search("\d+", curname): 384 if not re.search("\d+", curname):
377 return pcurver 385 return pcurver
378 pn = d.getVar('PN', True) 386 pn = d.getVar('PN', True)
387 newver_regex = d.getVar('RECIPE_NEWVER_REGEX',True)
379 f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-2-" % pn) 388 f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-2-" % pn)
380 status = internal_fetch_wget(url, d, f) 389 status = internal_fetch_wget(url, d, f)
381 fhtml = f.read() 390 fhtml = f.read()
@@ -383,25 +392,45 @@ python do_checkpkg() {
383 if status == "SUCC" and len(fhtml): 392 if status == "SUCC" and len(fhtml):
384 newver = parse_dir(curname) 393 newver = parse_dir(curname)
385 394
386 """match "{PN}-5.21.1.tar.gz">{PN}-5.21.1.tar.gz """ 395 if not newver_regex:
387 pn1 = re.search("^%s" % prefix, curname).group() 396 """this is the default matching pattern, if recipe does not """
388 397 """provide a regex expression """
389 s = "[^\"]*%s[^\d\"]*?(\d+[\.\-_])+[^\"]*" % pn1 398 """match "{PN}-5.21.1.tar.gz">{PN}-5.21.1.tar.gz """
390 searchstr = "[hH][rR][eE][fF]=\"%s\".*[>\"]" % s 399 pn1 = re.search("^%s" % prefix, curname).group()
391 reg = re.compile(searchstr) 400 s = "[^\"]*%s[^\d\"]*?(\d+[\.\-_])+[^\"]*" % pn1
392 401 searchstr = "[hH][rR][eE][fF]=\"%s\".*[>\"]" % s
402 reg = searchstr
403 else:
404 reg = newver_regex
393 valid = 0 405 valid = 0
406 count = 0
394 for line in fhtml.split("\n"): 407 for line in fhtml.split("\n"):
395 m = reg.search(line) 408 count += 1
409 m = re.search(reg, line)
396 if m: 410 if m:
397 valid = 1 411 valid = 1
398 ver = m.group().split("\"")[1].split("/")[-1] 412 if not newver_regex:
399 if ver == "download": 413 ver = m.group().split("\"")[1].split("/")[-1]
400 ver = m.group().split("\"")[1].split("/")[-2] 414 if ver == "download":
401 ver = parse_dir(ver) 415 ver = m.group().split("\"")[1].split("/")[-2]
402 if ver and __vercmp(newver, ver) < 0: 416 ver = parse_dir(ver)
403 newver = ver 417 else:
404 418 """ we cheat a little here, but we assume that the
419 regular expression in the recipe will extract exacly
420 the version """
421 (on, ov, oe) = newver
422 #HARDCODED MESS
423 if pn == 'remake':
424 ver = (on, m.group(1)+m.group(3), oe)
425 else:
426 ver = (on, m.group(1), oe)
427 pkg_problem = ['jpeg','dhcp','remake','blktool','apmd','nativesdk-openssl','valgrind','net-tools']
428 if pn in pkg_problem:
429 if ver and __vercmp2(newver,ver) == True:
430 newver = ver
431 else:
432 if ver and __vercmp(newver, ver) < 0:
433 newver = ver
405 """Expect a match for curver in directory list, or else it indicates unknown format""" 434 """Expect a match for curver in directory list, or else it indicates unknown format"""
406 if not valid: 435 if not valid:
407 status = "ErrParseDir" 436 status = "ErrParseDir"
@@ -454,6 +483,9 @@ python do_checkpkg() {
454 localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True)) 483 localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True))
455 bb.data.update_data(localdata) 484 bb.data.update_data(localdata)
456 485
486 chk_uri = d.getVar('RECIPE_NEWVER_URI',True)
487 if not chk_uri:
488 chk_uri = src_uri
457 pdesc = localdata.getVar('DESCRIPTION', True) 489 pdesc = localdata.getVar('DESCRIPTION', True)
458 pgrp = localdata.getVar('SECTION', True) 490 pgrp = localdata.getVar('SECTION', True)
459 pversion = localdata.getVar('PV', True) 491 pversion = localdata.getVar('PV', True)
@@ -505,12 +537,15 @@ python do_checkpkg() {
505 537
506 """use new path and remove param. for wget only param is md5sum""" 538 """use new path and remove param. for wget only param is md5sum"""
507 alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) 539 alturi = bb.encodeurl([type, host, altpath, user, pswd, {}])
508 540 my_uri = d.getVar('RECIPE_NEWVER_URI',True)
509 newver = check_new_dir(alturi, dirver, d) 541 if my_uri:
542 newver = d.getVar('PV', True)
543 else:
544 newver = check_new_dir(alturi, dirver, d)
510 altpath = path 545 altpath = path
511 if not re.match("Err", newver) and dirver != newver: 546 if not re.match("Err", newver) and dirver != newver:
512 altpath = altpath.replace(dirver, newver, True) 547 altpath = altpath.replace(dirver, newver, True)
513 548 # For folder in folder cases - try to enter the folder again and then try parsing
514 """Now try to acquire all remote files in current directory""" 549 """Now try to acquire all remote files in current directory"""
515 if not re.match("Err", newver): 550 if not re.match("Err", newver):
516 curname = altpath.split("/")[-1] 551 curname = altpath.split("/")[-1]
@@ -521,8 +556,11 @@ python do_checkpkg() {
521 altpath = "/" 556 altpath = "/"
522 else: 557 else:
523 altpath = m.group() 558 altpath = m.group()
524 559 chk_uri = d.getVar('RECIPE_NEWVER_URI',True)
525 alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) 560 if not chk_uri:
561 alturi = bb.encodeurl([type, host, altpath, user, pswd, {}])
562 else:
563 alturi = chk_uri
526 newver = check_new_version(alturi, curname, d) 564 newver = check_new_version(alturi, curname, d)
527 while(newver == "ErrHostNoDir"): 565 while(newver == "ErrHostNoDir"):
528 if alturi == "/download": 566 if alturi == "/download":