def checkDependenciesForShrinkwrap(dependency_list):
<EOL>from yotta.lib import sourceparse<EOL>errors = []<EOL>available_versions = {}<EOL>for mod in dependency_list.get('<STR_LIT>', []):<EOL><INDENT>available_versions[mod['<STR_LIT:name>']] = mod['<STR_LIT:version>']<EOL><DEDENT>for mod in dependency_list.get('<STR_LIT>', []):<EOL><INDENT>for spec_info in mod.get('<STR_LIT>', []):<EOL><INDENT>name = spec_info['<STR_LIT:name>']<EOL>spec = spec_info['<STR_LIT:version>']<EOL>if spec_info.get('<STR_LIT>', False):<EOL><INDENT>continue<EOL><DEDENT>if not name in available_versions:<EOL><INDENT>errors.append('<STR_LIT>' % (<EOL>name, mod['<STR_LIT:name>']<EOL>))<EOL><DEDENT>else:<EOL><INDENT>available_version = available_versions[name]<EOL>parsed_spec = sourceparse.parseSourceURL(spec)<EOL>if not parsed_spec.semanticSpecMatches(available_version):<EOL><INDENT>errors.append('<STR_LIT>' % (<EOL>name, available_version, parsed_spec.semanticSpec(), mod['<STR_LIT:name>']<EOL>))<EOL><DEDENT><DEDENT><DEDENT><DEDENT>return errors<EOL>
return a list of errors encountered (e.g. dependency missing or
        specification not met