def verify(self, logversion=True): result = True if not os.path.isdir(self._local_repo_root_path): self.logger.error("no dir for Git Dependency") result = False if result and len(os.listdir(self._local_repo_root_path)) == 0: self.logger.error("no files in Git Dependency") result = False if result: # valid repo folder r = Repo(self._local_repo_root_path) if(not r.initalized): self.logger.error("Git Dependency: Not Initialized") result = False elif(r.dirty): self.logger.error("Git Dependency: dirty") result = False if(r.head.commit != self.version): self.logger.error(f"Git Dependency: head is {r.head.commit} and version is {self.version}") result = False self.logger.debug("Verify '%s' returning '%s'." % (self.name, result)) if(logversion): VersionAggregator.GetVersionAggregator().ReportVersion(self.name, self.version, VersionAggregator.VersionTypes.INFO) return result
def verify(self): result = True state_data = None # See whether or not the state file exists. if not os.path.isfile(self.state_file_path): result = False # Attempt to load the state file. if result: with open(self.state_file_path, 'r') as file: try: state_data = yaml.safe_load(file) except Exception: pass if state_data is None: result = False # If loaded, check the version. if result and state_data['version'] != self.version: result = False logging.debug("Verify '%s' returning '%s'." % (self.name, result)) VersionAggregator.GetVersionAggregator().ReportVersion( self.name, self.version, VersionAggregator.VersionTypes.INFO) return result
def ToolsDefConfigure(self): Tag = self.env.GetValue("TOOL_CHAIN_TAG") VersionAggregator.GetVersionAggregator().ReportVersion( "TOOL_CHAIN_TAG", Tag, VersionAggregator.VersionTypes.TOOL) if (Tag is not None) and (Tag.upper().startswith("VSLATEST")): p1 = None self.Logger.debug("Must find latest VS toolchain") for p in [None, "Microsoft.VisualStudio.Product.BuildTools", "*"]: (rc, path) = FindWithVsWhere(p) if rc == 0 and path is not None: self.Logger.debug("Found VS instance using products = %s", p) p1 = path break elif (rc != 0): self.Logger.error( "Failed in VsWhere %d to get install dir" % rc) if (p1 is None): self.Logger.critical("Failed to find valid VSLatest instance") return -6 self.Logger.debug("VS150INSTALLPATH is %s" % p1) os.environ["VS150INSTALLPATH"] = p1 # now get vc version p2 = os.path.join(p1, "VC", "Tools", "MSVC") if not os.path.isdir(p2): self.Logger.critical( "Failed to find VC tools. Might need to check for VS install" ) return -5 newest = os.listdir(p2)[-1] # get last in list self.Logger.debug("VS150TOOLVER is %s" % newest) os.environ["VS150TOOLVER"] = newest.strip() else: self.Logger.debug("Tool Chain Tag not set or not vs latest") # # If environment specified VS15TOOLVER directly or was set above log the version if "VS150TOOLVER" in os.environ: VersionAggregator.GetVersionAggregator().ReportVersion( "VS Tools", os.environ["VS150TOOLVER"], VersionAggregator.VersionTypes.TOOL) return 0
def minimum_env_init(my_workspace_path, my_project_scope): # TODO: Check the Git version against minimums. # Check the Python version against minimums. cur_py = "%d.%d.%d" % sys.version_info[:3] VersionAggregator.GetVersionAggregator().ReportVersion( "Python", cur_py, VersionAggregator.VersionTypes.TOOL) soft_min_py = "3.7" hard_min_py = "3.6" if version_compare(hard_min_py, cur_py) > 0: raise RuntimeError( "Please upgrade Python! Current version is %s. Minimum is %s." % (cur_py, hard_min_py)) if version_compare(soft_min_py, cur_py) > 0: logging.error( "Please upgrade Python! Current version is %s. Recommended minimum is %s." % (cur_py, soft_min_py)) return_buffer = StringIO() RunCmd("git", "--version", outstream=return_buffer) git_version = return_buffer.getvalue().strip() return_buffer.close() VersionAggregator.GetVersionAggregator().ReportVersion( "Git", git_version, VersionAggregator.VersionTypes.TOOL) min_git = "2.11.0" # This code is highly specific to the return value of "git version"... cur_git = ".".join(git_version.split(' ')[2].split(".")[:3]) if version_compare(min_git, cur_git) > 0: raise RuntimeError( "Please upgrade Git! Current version is %s. Minimum is %s." % (cur_git, min_git)) # Initialized the build environment. return SelfDescribingEnvironment.BootstrapEnvironment( my_workspace_path, my_project_scope)
def do_report(self, thebuilder): try: from MuEnvironment import VersionAggregator except ImportError: logging.critical( "Loading BuildToolsReportGenerator failed, please update mu_environment pip module" ) return 0 OutputReport = os.path.join( thebuilder.env.GetValue("BUILD_OUTPUT_BASE"), "BUILD_TOOLS_REPORT") OutputReport = os.path.normpath(OutputReport) if not os.path.isdir(os.path.dirname(OutputReport)): os.makedirs(os.path.dirname(OutputReport)) Report = BuildToolsReport() Report.MakeReport(VersionAggregator.GetVersionAggregator(). GetAggregatedVersionInformation(), OutputReport=OutputReport)
def display_pip_package_info(package_list): for package in package_list: version = pkg_resources.get_distribution(package).version logging.info("{0} version: {1}".format(package, version)) VersionAggregator.GetVersionAggregator().ReportVersion( package, version, VersionAggregator.VersionTypes.TOOL)
def __PopulateConf(self, OverrideConf, AdditionalTemplateConfDir): ws = self.env.GetValue("WORKSPACE") # Copy Conf template files to conf if not present target = os.path.join(ws, "Conf", "target.txt") buildrules = os.path.join(ws, "Conf", "build_rule.txt") toolsdef = os.path.join(ws, "Conf", "tools_def.txt") # BaseTools Template files target_template = os.path.join("Conf", "target.template") tools_def_template = os.path.join("Conf", "tools_def.template") build_rules_template = os.path.join("Conf", "build_rule.template") outfiles = [target, toolsdef, buildrules] tfiles = [target_template, tools_def_template, build_rules_template] # check if conf exists if (not os.path.isdir(os.path.join(ws, "Conf"))): os.mkdir(os.path.join(ws, "Conf")) x = 0 while (x < len(outfiles)): # check if the conf file already exists # don't overwrite if exists. Popup if version is older in conf TemplateFilePath = "" Tag = self.env.GetValue("TOOL_CHAIN_TAG") if Tag is None: Tag = "" # # Get the Override template if it exist # if (AdditionalTemplateConfDir is not None): fp = os.path.join(AdditionalTemplateConfDir, tfiles[x] + ".ms") if os.path.isfile(fp): TemplateFilePath = fp # # If not found, try toolchain specific templates templates # if (TemplateFilePath == "" and Tag.startswith("VS")): fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"), tfiles[x] + ".vs") if os.path.isfile(fp): TemplateFilePath = fp if (TemplateFilePath == "" and Tag.startswith("GCC")): fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"), tfiles[x] + ".gcc") if os.path.isfile(fp): TemplateFilePath = fp # # If not found above try MS templates # if (TemplateFilePath == ""): fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"), tfiles[x] + ".ms") if os.path.isfile(fp): TemplateFilePath = fp # # If not found above try TianoCore Template # if (TemplateFilePath == ""): fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"), tfiles[x]) if TemplateFilePath == "" and os.path.isfile(fp): TemplateFilePath = fp # # Check to see if found yet -- No more options so now we are broken # if (TemplateFilePath == ""): self.Logger.critical("Failed to find Template file for %s" % outfiles[x]) raise Exception("Template File Missing", outfiles[x]) else: self.Logger.debug("Conf file template: [%s]", TemplateFilePath) # Check to see if we need the template if (not os.path.isfile(outfiles[x])): # file doesn't exist. copy template self.Logger.debug( "%s file not found. Creating from Template file %s" % (outfiles[x], TemplateFilePath)) shutil.copy2(TemplateFilePath, outfiles[x]) elif (OverrideConf): self.Logger.debug("%s file replaced as requested" % outfiles[x]) shutil.copy2(TemplateFilePath, outfiles[x]) else: # Both file exists. Do a quick version check if (self.__OlderVersion(outfiles[x], TemplateFilePath)): # Conf dir is older. Warn user. self.Logger.critical( "Conf file [%s] out-of-date. Please update your conf files! " "Sleeping 30 seconds to encourage update....", outfiles[x]) time.sleep(30) else: self.Logger.debug("Conf file [%s] up-to-date", outfiles[x]) VersionAggregator.GetVersionAggregator().ReportVersion( outfiles[x], self.__GetVersion(outfiles[x]), VersionAggregator.VersionTypes.INFO) x = x + 1