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