diff options
| -rw-r--r-- | meta/classes/distrodata.bbclass | 88 |
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 | 1 | include conf/distro/include/upstream_tracking.inc | |
| 2 | addhandler distro_eventhandler | 2 | addhandler distro_eventhandler |
| 3 | python distro_eventhandler() { | 3 | python 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": |
