def test_is_older_no_version_no_template(self): conf = os.path.join(self.test_dir, "conf.txt") temp = os.path.join(self.test_dir, "temp.txt") # make file with no version tag self.make_one_file(conf, "1.0") c = conf_mgmt.ConfMgmt()._is_older_version(conf, temp) self.assertFalse(c)
def test_valid_version(self): valid_versions = ["1.2", "2.02", "0.1", "22.345", "69594.39939494"] p = os.path.join(self.test_dir, "test.txt") for a in valid_versions: self.make_one_file(p, a) c = conf_mgmt.ConfMgmt()._get_version(p) self.assertEqual(c, a)
def test_is_older_no_version_tag_template(self): conf = os.path.join(self.test_dir, "conf.txt") temp = os.path.join(self.test_dir, "temp.txt") # make file with no version tag with open(temp, "w") as f: f.write(test_file_text) self.make_one_file(conf, "1.0") c = conf_mgmt.ConfMgmt()._is_older_version(conf, temp) self.assertFalse(c)
def test_populate_when_conf_empty(self): conf = os.path.join(self.test_dir, "Conf") temp = os.path.join(self.test_dir, "templates") self.make_edk2_files_dir(temp, "1.0", "2.0", "3.0", True) conf_mgmt.ConfMgmt().populate_conf_dir(conf, False, [temp]) self.assertEqual("1.0", self.get_target_version(conf)) self.assertEqual("2.0", self.get_toolsdef_version(conf)) self.assertEqual("3.0", self.get_buildrules_version(conf))
def test_invalid_version(self): invalid_versions = [ "1.2.3.4", "1.2.3", "Hello.1", "1.jk", "", "Wow", "Unknown" ] p = os.path.join(self.test_dir, "test.txt") for a in invalid_versions: self.make_one_file(p, a) c = conf_mgmt.ConfMgmt()._get_version(p) self.assertEqual(c, "0.0")
def test_plat_template_fully_populated(self): conf = os.path.join(self.test_dir, "Conf") temp = os.path.join(self.test_dir, "Templates") plattemp = os.path.join(self.test_dir, "TemplatesPlat") self.make_edk2_files_dir(temp, "1.0", "2.0", "3.0", True) self.make_edk2_files_dir(plattemp, "1.2", "2.2", "3.2", True) conf_mgmt.ConfMgmt().populate_conf_dir(conf, False, [plattemp, temp]) self.assertEqual("1.2", self.get_target_version(conf)) self.assertEqual("2.2", self.get_toolsdef_version(conf)) self.assertEqual("3.2", self.get_buildrules_version(conf))
def test_is_older_version_false(self): # first member is conf # second member is temp # make second member larger versions = [("1.2", "1.2"), ("0.1", "0.09"), ("1", ".99999")] conf = os.path.join(self.test_dir, "conf.txt") temp = os.path.join(self.test_dir, "temp.txt") for a in versions: self.make_one_file(conf, a[0]) self.make_one_file(temp, a[1]) c = conf_mgmt.ConfMgmt()._is_older_version(conf, temp) self.assertFalse(c)
def test_conf_older_warn_fully_populated(self): conf = os.path.join(self.test_dir, "Conf") temp = os.path.join(self.test_dir, "Templates") self.make_edk2_files_dir(temp, "1.2", "2.2", "3.2", True) self.make_edk2_files_dir(conf, "1.1", "2.1", "3.1", False) c = conf_mgmt.ConfMgmt() c._set_delay_time(0) c.populate_conf_dir(conf, False, [temp]) self.assertEqual("1.1", self.get_target_version(conf)) self.assertEqual("2.1", self.get_toolsdef_version(conf)) self.assertEqual("3.1", self.get_buildrules_version(conf))
def get_buildrules_version(self, conf_folder_path): p = os.path.join(conf_folder_path, "build_rule.txt") return conf_mgmt.ConfMgmt()._get_version(p)
def get_toolsdef_version(self, conf_folder_path): p = os.path.join(conf_folder_path, "tools_def.txt") return conf_mgmt.ConfMgmt()._get_version(p)
def test_no_templates(self): conf = os.path.join(self.test_dir, "Conf") temp = os.path.join(self.test_dir, "Templates") with self.assertRaises(Exception): conf_mgmt.ConfMgmt().populate_conf_dir(conf, False, [temp])
def test_zero_extend_version(self): p = os.path.join(self.test_dir, "test.txt") self.make_one_file(p, "2") c = conf_mgmt.ConfMgmt()._get_version(p) self.assertEqual(c, "2.0")
def test_no_version_tag(self): p = os.path.join(self.test_dir, "test.txt") with open(p, "w") as f: f.write(test_file_text) c = conf_mgmt.ConfMgmt()._get_version(p) self.assertEqual(c, "0.0")
def test_init(self): conf_mgmt.ConfMgmt()
def SetEnv(self): edk2_logging.log_progress("Setting up the Environment") shell_environment.GetEnvironment().set_shell_var("WORKSPACE", self.ws) shell_environment.GetBuildVars().SetValue("WORKSPACE", self.ws, "Set in SetEnv") if (self.pp is not None): shell_environment.GetEnvironment().set_shell_var( "PACKAGES_PATH", self.pp) shell_environment.GetBuildVars().SetValue("PACKAGES_PATH", self.pp, "Set in SetEnv") # process platform parameters defined in platform build file ret = self.SetPlatformEnv() if (ret != 0): logging.critical("Set Platform Env failed") return ret # set some basic defaults self.SetBasicDefaults() # Handle all the template files for workspace/conf/ Allow override TemplateDirList = [self.env.GetValue("EDK_TOOLS_PATH") ] # set to edk2 BaseTools PlatTemplatesForConf = self.env.GetValue( "CONF_TEMPLATE_DIR") # get platform defined additional path if (PlatTemplatesForConf is not None): PlatTemplatesForConf = self.mws.join(self.ws, PlatTemplatesForConf) TemplateDirList.insert(0, PlatTemplatesForConf) logging.debug( f"Platform defined override for Template Conf Files: {PlatTemplatesForConf}" ) conf_dir = os.path.join(self.ws, "Conf") conf_mgmt.ConfMgmt().populate_conf_dir(conf_dir, self.UpdateConf, TemplateDirList) # parse target file ret = self.ParseTargetFile() if (ret != 0): logging.critical("ParseTargetFile failed") return ret # parse DSC file ret = self.ParseDscFile() if (ret != 0): logging.critical("ParseDscFile failed") return ret # parse FDF file ret = self.ParseFdfFile() if (ret != 0): logging.critical("ParseFdfFile failed") return ret # set build output base envs for all builds if self.env.GetValue("OUTPUT_DIRECTORY") is None: logging.warn("OUTPUT_DIRECTORY was not found, defaulting to Build") self.env.SetValue("OUTPUT_DIRECTORY", "Build", "default from uefi_build", True) self.env.SetValue( "BUILD_OUT_TEMP", os.path.join(self.ws, self.env.GetValue("OUTPUT_DIRECTORY")), "Computed in SetEnv") target = self.env.GetValue("TARGET") self.env.SetValue( "BUILD_OUTPUT_BASE", os.path.join(self.env.GetValue("BUILD_OUT_TEMP"), target + "_" + self.env.GetValue("TOOL_CHAIN_TAG")), "Computed in SetEnv") # We have our build target now. Give platform build one more chance for target specific settings. ret = self.SetPlatformEnvAfterTarget() if (ret != 0): logging.critical("SetPlatformEnvAfterTarget failed") return ret # set the build report file self.env.SetValue( "BUILDREPORT_FILE", os.path.join(self.env.GetValue("BUILD_OUTPUT_BASE"), "BUILD_REPORT.TXT"), True) # set environment variables for the build process os.environ["EFI_SOURCE"] = self.ws return 0
def SetEnv(self): edk2_logging.log_progress("Setting up the Environment") shell_environment.GetEnvironment().set_shell_var("WORKSPACE", self.ws) shell_environment.GetBuildVars().SetValue("WORKSPACE", self.ws, "Set in SetEnv") if (self.pp is not None): shell_environment.GetEnvironment().set_shell_var( "PACKAGES_PATH", self.pp) shell_environment.GetBuildVars().SetValue("PACKAGES_PATH", self.pp, "Set in SetEnv") # process platform parameters defined in platform build file ret = self.SetPlatformEnv() if (ret != 0): logging.critical("Set Platform Env failed") return ret # set some basic defaults self.SetBasicDefaults() # Handle all the template files for workspace/conf/ Allow override TemplatesForConf = self.env.GetValue("CONF_TEMPLATE_DIR") if (TemplatesForConf is not None): TemplatesForConf = self.mws.join(self.ws, TemplatesForConf) logging.debug( "Platform defined override for Template Conf Files: %s", TemplatesForConf) e = conf_mgmt.ConfMgmt(self.UpdateConf, TemplatesForConf) # parse target file ret = self.ParseTargetFile() if (ret != 0): logging.critical("ParseTargetFile failed") return ret ret = e.ToolsDefConfigure() if (ret != 0): logging.critical("ParseTargetFile failed") return ret # parse DSC file ret = self.ParseDscFile() if (ret != 0): logging.critical("ParseDscFile failed") return ret # parse FDF file ret = self.ParseFdfFile() if (ret != 0): logging.critical("ParseFdfFile failed") return ret # set build output base envs for all builds self.env.SetValue( "BUILD_OUT_TEMP", os.path.join(self.ws, self.env.GetValue("OUTPUT_DIRECTORY")), "Computed in SetEnv") target = self.env.GetValue("TARGET") self.env.SetValue( "BUILD_OUTPUT_BASE", os.path.join(self.env.GetValue("BUILD_OUT_TEMP"), target + "_" + self.env.GetValue("TOOL_CHAIN_TAG")), "Computed in SetEnv") # We have our build target now. Give platform build one more chance for target specific settings. ret = self.SetPlatformEnvAfterTarget() if (ret != 0): logging.critical("SetPlatformEnvAfterTarget failed") return ret # set the build report file self.env.SetValue( "BUILDREPORT_FILE", os.path.join(self.env.GetValue("BUILD_OUTPUT_BASE"), "BUILD_REPORT.TXT"), True) # set environment variables for the build process os.environ["EFI_SOURCE"] = self.ws return 0