예제 #1
0
파일: PluginLinker.cs 프로젝트: runt18/c3p
        internal static void CopyNativeCode(string sourcePath, string[] sourceSubdirectories, string targetPath)
        {
            foreach (string platform in new[]
            {
                PluginInfo.AndroidPlatformName,
                PluginInfo.IOSPlatformName,
            })
            {
                string platformSourcePath = Path.Combine(sourcePath, platform);
                if (!Directory.Exists(platformSourcePath))
                {
                    continue;
                }

                string platformTargetPath = Path.Combine(targetPath, platform);
                if (!Directory.Exists(platformTargetPath))
                {
                    Directory.CreateDirectory(platformTargetPath);
                }

                ICollection <string> includeExtensions  = GetFileExtensionsForNativeCode(platform);
                ICollection <string> excludeDirectories = new List <string>(new[] { "build" });

                if (sourceSubdirectories != null)
                {
                    foreach (string sourceSubdirectory in sourceSubdirectories)
                    {
                        string sourceSubPath = Path.Combine(platformSourcePath, sourceSubdirectory);
                        PluginLinker.CopyFiles(
                            sourceSubPath, platformTargetPath, false, includeExtensions, excludeDirectories);
                    }
                }
                else
                {
                    foreach (string frameworkSourceDirectory in Directory.GetDirectories(platformSourcePath, "*.framework"))
                    {
                        string frameworkName = Path.GetFileName(frameworkSourceDirectory);
                        excludeDirectories.Add(frameworkName);

                        string frameworkTargetDirectory = Path.Combine(platformTargetPath, frameworkName);
                        if (!Directory.Exists(frameworkTargetDirectory))
                        {
                            Directory.CreateDirectory(frameworkTargetDirectory);
                        }

                        PluginLinker.CopyFiles(frameworkSourceDirectory, frameworkTargetDirectory, true);
                    }

                    PluginLinker.CopyFiles(
                        platformSourcePath, platformTargetPath, false, includeExtensions, excludeDirectories);
                }
            }
        }
예제 #2
0
파일: PluginLinker.cs 프로젝트: runt18/c3p
        protected static void CopyFiles(
            string sourcePath,
            string targetPath,
            bool preserveDirectories,
            ICollection <string> includeExtensions  = null,
            ICollection <string> excludeDirectories = null)
        {
            PluginLinker.CopyFiles(sourcePath, targetPath, preserveDirectories, relativePath =>
            {
                if (excludeDirectories != null)
                {
                    char slash = Path.DirectorySeparatorChar;
                    foreach (string excludeDirectory in excludeDirectories)
                    {
                        if (relativePath.StartsWith(excludeDirectory + slash, StringComparison.OrdinalIgnoreCase) ||
                            relativePath.IndexOf(slash + excludeDirectory + slash, StringComparison.OrdinalIgnoreCase) > 0)
                        {
                            return(false);
                        }
                    }
                }

                if (includeExtensions != null)
                {
                    foreach (string includeExtension in includeExtensions)
                    {
                        if (relativePath.EndsWith(includeExtension, StringComparison.OrdinalIgnoreCase))
                        {
                            return(true);
                        }
                    }

                    return(false);
                }

                return(true);
            });
        }