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)); }
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); } }