Hi Gert, Below is a diff of the changes. If you have any suggestions for improvements or aren't sure of what all the modifications do just let me know.
I think there may also be an additional problem to do with configurations that I haven't fixed. Basically, the <solution> task assumes that for a given solution configuration each project will have a configuration of the same name. Usually this is true as there are "debug" and "release" configurations for the solution and for each project. However this isn't always the case. For example, I added a "debugall" and "releaseall" solution configuration that just use the "debug" and "release" project configurations, respectively. I'll try and fix this and if I get it working send the changes a bit later. Regards, Simon diff -r -w nant-0.85-nightly/src/NAnt.VSNet/ConfigurationBase.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/ConfigurationBase.cs 155a156,157 > case "noinherit": > return ""; diff -r -w nant-0.85-nightly/src/NAnt.VSNet/ProjectBase.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/ProjectBase.cs 46a47 > _projectDependencies = new ArrayList(); 149a151,155 > > public ArrayList ProjectDependencies { > get { return _projectDependencies; } > } > 390a397 > private ArrayList _projectDependencies; diff -r -w nant-0.85-nightly/src/NAnt.VSNet/Reference.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/Reference.cs 89a90,93 > string referencedProjectGuid = > elemReference.Attributes["Project"]; > if (referencedProjectGuid == null) { > referencedProjectGuid = > elemReference.Attributes["ReferencedProjectIdentifier"]; > } 91c95 < if (elemReference.Attributes["Project"] != null) { --- > if (referencedProjectGuid != null) { 98c102 < string projectFile = solution.GetProjectFileFromGuid(elemReference.GetAttribute("Project")); --- > string projectFile = > solution.GetProjectFileFromGuid(referencedProjectGuid); diff -r -w nant-0.85-nightly/src/NAnt.VSNet/Solution.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/Solution.cs 652a653,663 > > // Now go through all the project dependencies > and store them in > // the project so they are available for later > use (such as link time). > string[] dependencies = > GetProjectDependencies(projectGuid); > > foreach (string dependency in dependencies) { > ProjectBase dependencyProject = > GetProjectFromGuid(dependency); > if (dependencyProject != null) { > > project.ProjectDependencies.Add(dependencyProject); > } > } diff -r -w nant-0.85-nightly/src/NAnt.VSNet/VcArgumentMap.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/VcArgumentMap.cs 69,85c69,85 < map.AddEnum("AssemblerOutput", null, null, "FA", "FAcs", "FAc", "FAs"); < map.AddBool("BufferSecurityCheck", "GS"); < map.AddEnum("CompileAs", null, null, "TC", "TP"); < map.AddEnum("DebugInformationFormat", null, null, "Z7", "Zd", "Zi", "ZI"); < map.AddBool("EnableFunctionLevelLinking", "Gy"); < map.AddBool("EnableIntrinsicFunctions", "Oi"); < map.AddBool("ExceptionHandling", "EHsc"); < map.AddEnum("FavorSizeOrSpeed", null, null, "Ot", "Os"); < map.AddBool("GlobalOptimizations", "Og"); < map.AddEnum("InlineFunctionExpansion", null, "Ob0", "Ob1", "Ob2"); < map.AddBool("OmitFramePointers", "Oy"); < map.AddEnum("Optimization", null, "Od", "O1", "O2", "Ox"); < map.AddEnum("RuntimeLibrary", null, "MT", "MTd", "MD", "MDd", "ML", "MLd"); < map.AddBool("StringPooling", "GF"); < map.AddEnum("StructMemberAlignment", null, null, "Zp1", "Zp2", "Zp4", "Zp8", "Zp16"); < map.AddEnum("UsePrecompiledHeader", null, null, "Yc", "YX", "Yu"); < map.AddEnum("WarningLevel", null, "W0", "W1", "W2", "W3", "W4"); --- > map.AddEnum("AssemblerOutput", null, null, "/FA", "/FAcs", > "/FAc", "/FAs"); > map.AddBool("BufferSecurityCheck", "/GS"); > map.AddEnum("CompileAs", null, null, "/TC", "/TP"); > map.AddEnum("DebugInformationFormat", null, null, "/Z7", "/Zd", > "/Zi", "/ZI"); > map.AddBool("EnableFunctionLevelLinking", "/Gy"); > map.AddBool("EnableIntrinsicFunctions", "/Oi"); > map.AddBool("ExceptionHandling", "/EHsc"); > map.AddEnum("FavorSizeOrSpeed", null, null, "/Ot", "/Os"); > map.AddBool("GlobalOptimizations", "/Og"); > map.AddEnum("InlineFunctionExpansion", null, "/Ob0", "/Ob1", > "/Ob2"); > map.AddBool("OmitFramePointers", "/Oy"); > map.AddEnum("Optimization", null, "/Od", "/O1", "/O2", "/Ox"); > map.AddEnum("RuntimeLibrary", null, "/MT", "/MTd", "/MD", "/MDd", > "/ML", "/MLd"); > map.AddBool("StringPooling", "/GF"); > map.AddEnum("StructMemberAlignment", null, null, "/Zp1", "/Zp2", > "/Zp4", "/Zp8", "/Zp16"); > map.AddEnum("UsePrecompiledHeader", null, "", "/Yc", "/YX", > "/Yu"); > map.AddEnum("WarningLevel", null, "/W0", "/W1", "/W2", "/W3", > "/W4"); 91,95c91,95 < map.AddBool("GenerateDebugInformation", "DEBUG"); < map.AddEnum("LinkIncremental", null, null, "INCREMENTAL:NO", "INCREMENTAL"); < map.AddString("ModuleDefinitionFile", "DEF:"); < map.AddEnum("OptimizeForWindows98", "OPT:", null, "NOWIN98", "WIN98"); < map.AddEnum("SubSystem", "SUBSYSTEM:", null, "CONSOLE", "WINDOWS"); --- > map.AddBool("GenerateDebugInformation", "/DEBUG"); > map.AddEnum("LinkIncremental", null, null, "/INCREMENTAL:NO", > "/INCREMENTAL"); > map.AddString("ModuleDefinitionFile", "/DEF:"); > map.AddEnum("OptimizeForWindows98", "/OPT:", null, "NOWIN98", > "WIN98"); > map.AddEnum("SubSystem", "/SUBSYSTEM:", null, "CONSOLE", > "WINDOWS"); 118c118 < return "/" + value; --- > return value; 120c120 < return "/" + _name + value; --- > return _name + value; diff -r -w nant-0.85-nightly/src/NAnt.VSNet/VcConfiguration.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/VcConfiguration.cs 155c155 < return Path.Combine(OutputDir.FullName, linkOutput); --- > return Path.Combine(ProjectDir.FullName, linkOutput); 160c160 < return Path.Combine(OutputDir.FullName, librarianOutput); --- > return Path.Combine(ProjectDir.FullName, librarianOutput); diff -r -w nant-0.85-nightly/src/NAnt.VSNet/VcProject.cs nantchanges/nant-0.85-nightly/src/NAnt.VSNet/VcProject.cs 135a136,156 > > VcConfiguration stdafxConfig = null; > > // If VC project uses precompiled headers then the > precompiled header > // output (.pch file) must be generated before > compiling any other > // source files. > foreach (VcConfiguration config in buildConfigs.Keys) { > const string compilerTool = "VCCLCompilerTool"; > Hashtable compilerArgs = > config.GetToolArguments(compilerTool, _clArgMap); > > object o = compilerArgs["UsePrecompiledHeader"]; > > if (o != null) { > string arg = o as string; > if (arg.Equals("/Yc")) { > BuildCPPFiles((ArrayList) > buildConfigs[config], baseConfig, config); > stdafxConfig = config; > } > } > } > 136a158 > if (config != stdafxConfig) { 138a161 > } 342a366,368 > if (metadataDir.Equals("$(NOINHERIT)")) > { > > clTask.MetaDataIncludeDirs.DirectoryNames.Clear(); > } else { 346a373 > } 382c409,438 < if (IsOutputDll(fileConfig)) { --- > string undefinePreprocessorDefs = > fileConfig.GetToolSetting(compilerTool, "UndefinePreprocessorDefinitions"); > if > (!StringUtils.IsNullOrEmpty(undefinePreprocessorDefs)) { > foreach (string def in > undefinePreprocessorDefs.Split(';', ',')) { > clTask.Arguments.Add(new > Argument("/U")); > clTask.Arguments.Add(new Argument(def)); > } > } > > > string addOptions = > baseConfig.GetToolSetting(compilerTool, "AdditionalOptions"); > if (addOptions != null) { > StringReader reader = new > StringReader(addOptions); > string addOptionsLine = reader.ReadLine(); > while (addOptionsLine != null) { > foreach(string addOption in > addOptionsLine.Split(' ')) { > clTask.Arguments.Add(new > Argument(addOption)); > } > > addOptionsLine = reader.ReadLine(); > } > } > > string exceptionHandling = > baseConfig.GetToolSetting(compilerTool, "ExceptionHandling"); > if (exceptionHandling == null || > exceptionHandling.ToUpper().Equals("TRUE")) { > clTask.Arguments.Add(new Argument("/EHsc")); > } > > > if (IsOutputDll(fileConfig)) > { 399a456,460 > string arg = > compilerArgs["UsePrecompiledHeader"] as string; > > // if arg.length == 0 then this > configuration explicitly turns > // OFF use of precompiled > headers - even if parent config uses it. > if (arg == null || arg.Length > > 0) { 411a473 > } 529a592,604 > foreach (ProjectBase dependency in ProjectDependencies) > { > if (dependency is VcProject) { > VcConfiguration vcConfig = > dependency.ProjectConfigurations[baseConfig.Name] as VcConfiguration; > > string libraryName = > vcConfig.GetToolSetting("VCLibrarianTool", "OutputFile"); > if (libraryName != null) { > string libOutFile = new > FileInfo(Path.Combine( > > dependency.ProjectDirectory.FullName, libraryName)).FullName; > > linkTask.Sources.FileNames.Add(libOutFile); > } > } > } > 555c630,633 < foreach(string addOption in addOptions.Split(' ')) { --- > StringReader reader = new > StringReader(addOptions); > string addOptionsLine = reader.ReadLine(); > while (addOptionsLine != null) { > foreach(string addOption in > addOptionsLine.Split(' ')) { 557a636,638 > > addOptionsLine = reader.ReadLine(); > } diff -r -w nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/ClTask.cs nantchanges/nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/ClTask.cs 92c92 < get { return (_pchFile != null) ? Path.Combine(OutputDir.FullName, _pchFile) : null; } --- > get { return (_pchFile != null) ? > Path.Combine(OutputDir.Parent.FullName, _pchFile) : null; } 336,340d335 < // specify pch file, if user specified one < if (PchFile != null) { < writer.WriteLine("/Fp\"{0}\"", PchFile); < } < diff -r -w nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/LibTask.cs nantchanges/nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/LibTask.cs 160a161 > if (libdir.Length > 0) { 162a164 > } diff -r -w nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/LinkTask.cs nantchanges/nant-0.85-nightly/src/NAnt.VisualCpp/Tasks/LinkTask.cs 188a189 > if (libdir.Length > 0) { 190a192 > } ----- Original Message ----- From: "Gert Driesen" To: "'Simon Keary'" , [EMAIL PROTECTED] Subject: RE: [nant-dev] How to contribute task fixes Date: Wed, 17 Nov 2004 15:12:01 +0100
--- Begin Message ---Hi Simon,Visual C++ support in <solution> is indeed not very good right now. Would it be possible to create diffs against current CVS and post them to the list ?If that's too much trouble you can just send the modified sources.Thanks !Gert
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Simon Keary
Sent: woensdag 17 november 2004 15:05
To: [EMAIL PROTECTED]
Subject: [nant-dev] How to contribute <solution> task fixes
Hi,
Firstly, thanks for a great tool.
Whilst testing the <solution> task on an (apparently) fairly complicated .sln I found a few problems which I think I've addressed and can now get nant to build my solution. Most of the problems were dealing with settings on vc projects and reference handling.
I made the changes against a fairly recent 0.85 nightly build and am not sure what the best way to contribute these fixes as I haven't contributed to the project before. Should I send a zip of the changed files or file diffs to the list so they can be reviewed etc? Btw, I haven't used cvs for a long time but use should be able to use it if this is the best way to contribute the changes.
Thanks, Simon
------------------------------------------------------- This SF.Net email is sponsored by: InterSystems CACHE FREE OODBMS DOWNLOAD - A multidimensional database that combines robust object and relational technologies, making it a perfect match for Java, C++,COM, XML, ODBC and JDBC. www.intersystems.com/match8 _______________________________________________ nant-developers mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/nant-developers
--- End Message ---