Exemplo n.º 1
0
        static void FixInvalidPathsRecursively(ImportedExternalProject.VirtualDirectory dir, string baseDir, ref Dictionary <string, string> allFilesUnderProjectDir)
        {
            foreach (var file in dir.Files)
            {
                if (!File.Exists(file.FullPath))
                {
                    if (allFilesUnderProjectDir == null)
                    {
                        allFilesUnderProjectDir = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase);
                        foreach (var fn in Directory.GetFiles(baseDir, "*", SearchOption.AllDirectories))
                        {
                            var key = Path.GetFileName(fn);
                            if (allFilesUnderProjectDir.ContainsKey(key))
                            {
                                allFilesUnderProjectDir[key] = null;
                            }
                            else
                            {
                                allFilesUnderProjectDir[key] = fn;
                            }
                        }
                    }

                    if (allFilesUnderProjectDir.TryGetValue(Path.GetFileName(file.FullPath), out var fullPath) && fullPath != null)
                    {
                        file.FullPath = fullPath;
                    }
                }
            }

            foreach (var subdir in dir.Subdirectories ?? new List <ImportedExternalProject.VirtualDirectory>())
            {
                FixInvalidPathsRecursively(subdir, baseDir, ref allFilesUnderProjectDir);
            }
        }
Exemplo n.º 2
0
        public ImportedExternalProject ParseEIPFile(string pFileEwp, IProjectImportService service)
        {
            PRJ_DIR = Path.GetDirectoryName(pFileEwp);
            ImportedExternalProject result = new ImportedExternalProject();
            XmlDocument             doc    = new XmlDocument();

            doc.Load(pFileEwp);
            string deviceName = "";
            List <ImportedExternalProject.ImportedConfiguration> allConfigurations = new List <ImportedExternalProject.ImportedConfiguration>();

            foreach (XmlElement prjNode in doc.SelectNodes("//project/configuration"))
            {
                ImportedExternalProject.ImportedConfiguration configuration = new ImportedExternalProject.ImportedConfiguration();
                configuration.Name = prjNode.SelectSingleNode($"name").InnerText ?? "NONAME_PRJ";
                allConfigurations.Add(configuration);

                var tPrjSetting = ExtractInvariantBuildSettings(prjNode);

                //string aIcfFile = ExpandPath(prjNode.SelectSingleNode("settings/data/option[name=\"IlinkIcfFile\"]/state").InnerText);
                deviceName = prjNode.SelectSingleNode("(settings/data/option[name=\"OGChipSelectEditMenu\"]|settings/data/option[name=\"OGChipSelectMenu\"])/state")?.InnerText?.Split(' ', '\t')[0] ?? "";
                //tPrjSetting.LinkerScript = aIcfFile;

                configuration.Settings = tPrjSetting;
            }

            if (allConfigurations.Count == 0)
            {
                service.Logger.LogLine("Warning: No Configurations found in " + pFileEwp);
            }

            ImportedExternalProject.VirtualDirectory RootDirectory = new ImportedExternalProject.VirtualDirectory
            {
                Name           = "Root",
                Files          = null,
                Subdirectories = ConvertGroupToVirtualDirectoryRecursively(doc.SelectSingleNode("//project"))
            };
            result.RootDirectory = RootDirectory;

            if (deviceName == "")
            {
                service.Logger.LogLine($"Warning: {pFileEwp} does not specify the device name");
            }

            result.Configurations      = allConfigurations.ToArray();
            result.OriginalProjectFile = pFileEwp;
            result.DeviceNameMask      = new Regex(".*" + deviceName + ".*", RegexOptions.IgnoreCase);
            if (result.Configurations.Length == 1)
            {
                result.Configurations[0].Name = null;
            }

            result.ReferencedFrameworks = new string[0];

            return(result);
        }
Exemplo n.º 3
0
        public ImportedExternalProject.VirtualDirectory ConvertGroupToVirtualDirectoryRecursively(XmlNode projectOrGroup, string name)
        {
            ImportedExternalProject.VirtualDirectory result = new ImportedExternalProject.VirtualDirectory
            {
                Name           = name,
                Files          = GetFilesInGroup(projectOrGroup),
                Subdirectories = new List <ImportedExternalProject.VirtualDirectory>(),
            };

            foreach (XmlElement subGroup in projectOrGroup.SelectNodes("group"))
            {
                ImportedExternalProject.VirtualDirectory dir = ConvertGroupToVirtualDirectoryRecursively(subGroup, subGroup.SelectSingleNode("name").InnerText);
                result.Subdirectories.Add(dir);
            }

            return(result);
        }
Exemplo n.º 4
0
        public List <ImportedExternalProject.VirtualDirectory> ConvertGroupToVirtualDirectoryRecursively(XmlNode pGroup)
        {
            List <ImportedExternalProject.VirtualDirectory> result = new List <ImportedExternalProject.VirtualDirectory>();

            var xmlNodeList = pGroup.SelectNodes("group");

            if (xmlNodeList != null)
            {
                foreach (XmlElement CntGroup in xmlNodeList)
                {
                    ImportedExternalProject.VirtualDirectory aOutGroup = new ImportedExternalProject.VirtualDirectory();
                    aOutGroup.Files = GetFilesInGroup(CntGroup);
                    string name = CntGroup.SelectSingleNode("name").InnerText;
                    aOutGroup.Name           = name;
                    aOutGroup.Subdirectories = ConvertGroupToVirtualDirectoryRecursively(CntGroup);
                    result.Add(aOutGroup);
                }
            }
            return(result);
        }