[oe] [STABLE][PATCH] base.bbclass: add support for checksums in .bb files

Vitus Jensen vjensen at gmx.de
Fri Jun 4 03:42:36 UTC 2010


On Tue, 13 Apr 2010, Vitus Jensen wrote:

> From: Phil Blundell <philb at gnu.org>
>
> Ported from .dev branch to allow easy sharing of recipes between
> .dev and stable branches.
>
> Signed-off-by: Vitus Jensen <vjensen at gmx.de>

May I get comments for this patch?  I think it is really helpfull.

Best regards,
    Vitus


> ---
>  classes/base.bbclass |   56
>  ++++++++++++++++++++++++++++++++++++++++++++-----
>  1 files changed, 50 insertions(+), 6 deletions(-)
>
> diff --git a/classes/base.bbclass b/classes/base.bbclass
> index 69d1979..459fbe9 100644
> --- a/classes/base.bbclass
> +++ b/classes/base.bbclass
> @@ -56,6 +56,50 @@ def base_chk_load_parser(config_paths):
>
>     return parser
>
> +def base_chk_file_vars(parser, localpath, params, data):
> +    try:
> +        name = params["name"]
> +    except KeyError:
> +        return False
> +    flagName = "%s.md5sum" % name
> +    want_md5sum = bb.data.getVarFlag("SRC_URI", flagName, data)
> +    flagName = "%s.sha256sum" % name
> +    want_sha256sum = bb.data.getVarFlag("SRC_URI", flagName, data)
> +
> +    if (want_sha256sum == None and want_md5sum == None):
> +        # no checksums to check, nothing to do
> +        return False
> +
> +    if not os.path.exists(localpath):
> +        localpath = base_path_out(localpath, data)
> +        bb.note("The localpath does not exist '%s'" % localpath)
> +        raise Exception("The path does not exist '%s'" % localpath)
> +
> +    if want_md5sum:
> +        try:
> +	    md5pipe = os.popen('PATH=%s md5sum %s' % (bb.data.getVar('PATH', 
> data, True), localpath))
> +            md5data = (md5pipe.readline().split() or [ "" ])[0]
> +            md5pipe.close()
> +        except OSError, e:
> +            raise Exception("Executing md5sum failed")
> +        if want_md5sum != md5data:
> +            bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" 
> % (want_md5sum, md5data))
> +            raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" 
> % (want_md5sum, md5data))
> +
> +    if want_sha256sum:
> +        try:
> +            shapipe = os.popen('PATH=%s oe_sha256sum %s' % 
> (bb.data.getVar('PATH', data, True), localpath))
> +            sha256data = (shapipe.readline().split() or [ "" ])[0]
> +            shapipe.close()
> +        except OSError, e:
> +            raise Exception("Executing shasum failed")
> +        if want_sha256sum != sha256data:
> +            bb.note("The SHA256Sums did not match. Wanted: '%s' and Got: 
> '%s'" % (want_sha256sum, sha256data))
> +            raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: 
> '%s'" % (want_sha256sum, sha256data))
> +
> +    return True
> +
> +
>  def base_chk_file(parser, pn, pv, src_uri, localpath, data):
>      import os, bb
>      no_checksum = False
> @@ -652,15 +696,15 @@ python base_do_fetch() {
> 	 # Check each URI
> 	 for url in src_uri.split():
> 		localpath = bb.data.expand(bb.fetch.localpath(url, 
> localdata), localdata)
> -		(type,host,path,_,_,_) = bb.decodeurl(url)
> +		(type,host,path,_,_,params) = bb.decodeurl(url)
> 		 uri = "%s://%s%s" % (type,host,path)
> 		 try:
> -			if type == "http" or type == "https" or type == "ftp" 
> or type == "ftps":
> -				if not base_chk_file(parser, pn, pv,uri, 
> localpath, d):
> -					if not 
> bb.data.getVar("OE_ALLOW_INSECURE_DOWNLOADS",d, True):
> -						bb.fatal("%s-%s: %s has no 
> entry in conf/checksums.ini, not checking URI" % (pn,pv,uri))
> +			if type in [ "http", "https", "ftp", "ftps" ]:
> +				if not (base_chk_file_vars(parser, localpath, 
> params, d) or base_chk_file(parser, pn, pv,uri, localpath, d)):
> +					if not 
> bb.data.getVar("OE_ALLOW_INSECURE_DOWNLOADS", d, True):
> +						bb.fatal("%s-%s: %s has no 
> checksum defined, cannot check archive integrity" % (pn,pv,uri))
> 					else:
> -						bb.note("%s-%s: %s has no 
> entry in conf/checksums.ini, not checking URI" % (pn,pv,uri))
> +						bb.note("%s-%s: %s has no 
> checksum defined, archive integrity not checked" % (pn,pv,uri))
> 		 except Exception:
>  			raise bb.build.FuncFailed("Checksum of '%s' failed" %
>  uri)
> }
>

-- 
Vitus Jensen, Hannover, Germany, Universe (current)
pgp public key available from keyservers




More information about the Openembedded-devel mailing list