Exemplo n.º 1
0
        static void CreateBinaryNuspec(
            string id,
            string compiler,
            IEnumerable <Targets.ItemDefinitionGroup> itemDefinitionGroupList,
            IEnumerable <Nuspec.File> fileList,
            IEnumerable <Nuspec.Dependency> dependencyList,
            Optional <string> name,
            IEnumerable <string> platformList)
        {
            var info        = Config.CompilerMap[compiler];
            var description =
                id +
                ". Compiler: " +
                info.Name +
                ". Platforms: " +
                string.Join(", ", platformList) +
                ".";

            Nuspec.Create(
                id,
                id,
                Package.CompilerVersion(info),
                description,
                itemDefinitionGroupList,
                fileList,
                Enumerable.Empty <CompilationUnit>(),
                dependencyList,
                new[] { "binaries", compiler }.
                Concat(name.ToEnumerable()).
                Concat(platformList));
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            var doc = new Doc();

            // Changes
            {
                doc = doc[T.H1("Release Notes")];
                foreach (var change in Config.Release)
                {
                    doc = doc[change];
                }
            }

            // headers only library.
            {
                doc = doc
                      [T.H1("Headers Only Libraries")]
                      [T.List[A("boost", Config.Version)]];
                var path     = Path.Combine(Config.BoostDir, "boost");
                var fileList =
                    new Dir(new DirectoryInfo(path), "boost").
                    FileList(f => true);
                Nuspec.Create(
                    "boost",
                    "boost",
                    Config.Version,
                    "boost",
                    new[]
                {
                    new Targets.ItemDefinitionGroup(
                        clCompile:
                        new Targets.ClCompile(
                            additionalIncludeDirectories:
                            new[]
                    {
                        Targets.PathFromThis(
                            Targets.IncludePath)
                    }
                            )
                        )
                },
                    fileList.Select(
                        f =>
                        new Nuspec.File(
                            Path.Combine(Config.BoostDir, f),
                            Path.Combine(Targets.IncludePath, f)
                            )
                        ),
                    new CompilationUnit[0],
                    new Nuspec.Dependency[0],
                    new[] { "headers" }
                    );
            }

            // source libraries.
            doc = doc[T.H1("Source Libraries")];
            foreach (var directory in Directory
                     .GetDirectories(Path.Combine(Config.BoostDir, "libs")))
            {
                var src = Path.Combine(directory, "src");
                if (Directory.Exists(src))
                {
                    var name = Path.GetFileName(directory);

                    var libraryConfig = Config
                                        .LibraryList
                                        .Where(l => l.Name == name)
                                        .FirstOrDefault()
                                        ?? new Library(name);

                    foreach (var libName in MakeLibrary(libraryConfig, src))
                    {
                        doc = doc[T.List[A(
                                             libName, "boost_" + libName, Config.Version)]];
                    }
                }
            }

            // create dictionaries for binary NuGet packages.
            doc = doc[T.H1("Precompiled Libraries")];

            // compiler -> (library name -> pacakge)
            var compilerDictionary =
                new Dictionary <string, Dictionary <string, CompiledPackage> >();

            // library name -> library.
            var libraryDictionary = new Dictionary <string, CompiledLibrary>();

            foreach (var platform in Config.PlatformList)
            {
                ScanCompiledFileSet(
                    compilerDictionary, libraryDictionary, platform);
            }

            // all libraries for specific compiler.
            {
                var list = T.List[T.Text("all libraries")];
                foreach (var compiler in compilerDictionary.Keys)
                {
                    var id = "boost-" + compiler;
                    var compilerLibraries = compilerDictionary[compiler];
                    CreateBinaryNuspec(
                        id,
                        compiler,
                        Enumerable.Empty <Targets.ItemDefinitionGroup>(),
                        Enumerable.Empty <Nuspec.File>(),
                        compilerLibraries
                        .Keys
                        .Select(lib => Package.Dependency(lib, compiler)),
                        Optional <string> .Absent.Value,
                        compilerLibraries
                        .Values
                        .SelectMany(package => package.PlatformList)
                        .Distinct());
                    list = list
                           [T.Text(" ")]
                           [A(
                                compiler,
                                id,
                                Package.CompilerVersion(Config.CompilerMap[compiler]))];
                }
                doc = doc[list];
            }

            //
            var itemDefinitionGroupList =
                Config.
                PlatformList.
                Select(
                    p =>
                    new Targets.ItemDefinitionGroup(
                        condition: "'$(Platform)'=='" + p.Name + "'",
                        link:
                        new Targets.Link(
                            additionalLibraryDirectories:
                            new[]
            {
                Targets.PathFromThis(
                    Path.Combine(
                        Targets.LibNativePath,
                        p.Directory)
                    )
            }
                            )
                        )
                    );

            // NuGet packages for each library.
            foreach (var library in libraryDictionary)
            {
                var name      = library.Key;
                var libraryId = "boost_" + name;
                var list      = T.List[T.Text(name)];
                foreach (var package in library.Value.PackageDictionary)
                {
                    var compiler     = package.Key;
                    var packageValue = package.Value;
                    var nuspecId     = libraryId + "-" + compiler;
                    CreateBinaryNuspec(
                        nuspecId,
                        compiler,
                        itemDefinitionGroupList,
                        packageValue.FileList.Select(
                            f =>
                            new Nuspec.File(
                                Path.Combine(Config.BoostDir, f),
                                Path.Combine(Targets.LibNativePath, f)
                                )
                            ),
                        Package.BoostDependency,
                        name.ToOptional(),
                        packageValue.PlatformList);
                    list = list
                           [T.Text(" ")]
                           [A(
                                package.Key,
                                nuspecId,
                                Package.CompilerVersion(Config.CompilerMap[compiler]))];
                }
                doc = doc[list];
            }

            // codeplex.txt
            using (var file = new StreamWriter("codeplex.txt"))
            {
                doc.Write(file);
            }
        }