コード例 #1
0
ファイル: PluginLinker.cs プロジェクト: runt18/c3p
        protected virtual void Init()
        {
            if (String.IsNullOrEmpty(this.SourcePath))
            {
                throw new ArgumentNullException(nameof(SourcePath));
            }
            else if (this.IntermediatePaths == null || this.IntermediatePaths.Count == 0 ||
                     this.IntermediatePaths.Any(p => String.IsNullOrEmpty(p)))
            {
                throw new ArgumentNullException(nameof(IntermediatePaths));
            }
            else if (String.IsNullOrEmpty(this.OutputPath))
            {
                throw new ArgumentNullException(nameof(OutputPath));
            }

            if (!Directory.Exists(this.SourcePath))
            {
                throw new DirectoryNotFoundException("Source path not found: " + this.SourcePath);
            }

            // Don't check for existence of the last one because it was not specified explicitly.
            for (int i = 0; i < this.IntermediatePaths.Count - 1; i++)
            {
                if (!Directory.Exists(this.IntermediatePaths[i]))
                {
                    throw new DirectoryNotFoundException("Intermediate path not found: " + this.IntermediatePaths[i]);
                }
            }

            string pluginInfoFilePath = Path.Combine(this.SourcePath, "plugin.xml");

            if (!File.Exists(pluginInfoFilePath))
            {
                throw new FileNotFoundException("Plugin info file not found: " + pluginInfoFilePath);
            }

            using (StreamReader reader = File.OpenText(pluginInfoFilePath))
            {
                this.PluginInfo = PluginInfo.FromXml(reader);
            }

            if (!Directory.Exists(this.OutputPath))
            {
                Directory.CreateDirectory(this.OutputPath);
            }

            this.TargetOutputPath = Path.Combine(this.OutputPath, this.TargetName);
            if (!Directory.Exists(this.TargetOutputPath))
            {
                Directory.CreateDirectory(this.TargetOutputPath);
            }
            else
            {
                Utils.ClearDirectory(this.TargetOutputPath, new string[] { "tools" });
            }

            this.PluginInfo.Id = this.PluginInfo.Id + "-" + this.TargetName;

            Log.Important($"Linking {this.TargetName} plugin at\n" +
                          Utils.EnsureTrailingSlash(Path.GetFullPath(this.TargetOutputPath)));
        }
コード例 #2
0
        protected virtual void Init()
        {
            if (String.IsNullOrEmpty(this.SourcePath))
            {
                throw new ArgumentNullException(nameof(SourcePath));
            }
            else if (String.IsNullOrEmpty(this.IntermediatePath))
            {
                throw new ArgumentNullException(nameof(IntermediatePath));
            }

            if (!Directory.Exists(this.SourcePath))
            {
                throw new DirectoryNotFoundException("Source path not found: " + this.SourcePath);
            }

            this.PlatformSourcePath = Path.Combine(this.SourcePath, this.PlatformName);
            if (!String.IsNullOrEmpty(this.Language))
            {
                this.PlatformSourcePath += "-" + this.Language;
            }

            if (!Directory.Exists(this.PlatformSourcePath))
            {
                throw new DirectoryNotFoundException("Platform source path not found: " + this.PlatformSourcePath);
            }

            string pluginInfoFilePath = Path.Combine(this.SourcePath, "plugin.xml");

            if (!File.Exists(pluginInfoFilePath))
            {
                throw new FileNotFoundException("Plugin info file not found: " + pluginInfoFilePath);
            }

            using (StreamReader reader = File.OpenText(pluginInfoFilePath))
            {
                this.PluginInfo = PluginInfo.FromXml(reader);
            }

            if (!Directory.Exists(this.IntermediatePath))
            {
                Directory.CreateDirectory(this.IntermediatePath);
            }

            this.PlatformIntermediatePath = Path.Combine(this.IntermediatePath, this.PlatformName);
            if (!Directory.Exists(this.PlatformIntermediatePath))
            {
                Directory.CreateDirectory(this.PlatformIntermediatePath);
            }
            else
            {
                Utils.ClearDirectory(this.PlatformIntermediatePath, new string[] { "javadoc", "tools" });
            }

            PluginInfo.PlatformInfo platformInfo =
                this.PluginInfo.Platforms.SingleOrDefault(p => p.Name == this.PlatformName);
            if (platformInfo == null)
            {
                throw new InvalidOperationException(
                          "Platform info for " + this.PlatformName + " platform is missing from plugin.xml.");
            }

            Log.Important($"Compiling {this.PlatformName} APIs at\n" +
                          Utils.EnsureTrailingSlash(Path.GetFullPath(this.PlatformIntermediatePath)));
        }