View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0000966 | CMake | public | 2004-07-01 07:14 | 2004-07-14 16:26 | |||||
Reporter | Paul Smyth | ||||||||
Assigned To | Bill Hoffman | ||||||||
Priority | normal | Severity | major | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | |||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0000966: VC7.1 Generator makes Wrong Compiler Flags | ||||||||
Description | The VC7.1 (.NET 2003) generator doesn't completely convert compiler flags from e.g. CXX_FLAGS_RELEASE to variables in the vcproj file that the Dev Environment will understand. This can result in conflicting or wrong compiler flags sent to the compiler. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | cmLocalVisualStudio7Generator.cxx.diff [^] (20,840 bytes) 1969-12-31 19:00 [Show Content] [Hide Content]Index: cmLocalVisualStudio7Generator.cxx =================================================================== RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.cxx,v retrieving revision 1.56 diff -u -r1.56 cmLocalVisualStudio7Generator.cxx --- a/cmLocalVisualStudio7Generator.cxx 14 Jun 2004 16:16:25 -0000 1.56 +++ b/cmLocalVisualStudio7Generator.cxx 1 Jul 2004 12:13:27 -0000 @@ -22,6 +22,8 @@ #include "cmCacheManager.h" #include "cmake.h" +#include <cassert> + cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator() { m_Version71 = false; @@ -256,7 +258,7 @@ // Optimization = 0 None Debug /O0 // Optimization = 1 MinSize /O1 // Optimization = 2 MaxSpeed /O2 -// Optimization = 3 Max Optimization /O3 +// Optimization = 3 Max Optimization /Ox // RuntimeLibrary = 0 /MT multithread // RuntimeLibrary = 1 /MTd multithread debug // RuntimeLibrary = 2 /MD multithread dll @@ -266,11 +268,36 @@ // InlineFunctionExpansion = 0 none // InlineFunctionExpansion = 1 when inline keyword // InlineFunctionExpansion = 2 any time you can - +// GlobalOptimizations = TRUE /GA +// EnableIntrinsicFunctions = TRUE /Oi +// ImproveFloatingPointConsistency = TRUE /Op +// FavorSizeOrSpeed = 1 /Ot Favor Fast code +// FavorSizeOrSpeed = 2 /Os Favor Small code +// OmitFramePointers = TRUE /Og +// EnableFibreSafeOptimization = TRUE /GT +// OptimizeForProcessor = 0 Blended +// OptimizeForProcessor = 1 /G5 Pentium +// OptimizeForProcessor = 2 /G6 PPro, PII, PIII +// OptimizeForProcessor = 3 /G7 Pentium 4 and above +// OptimizeForWindowsApplication = TRUE /GA +// EnableEnhancedInstructionSet = 1 /arch:sse - sse instructions +// EnableEnhancedInstructionSet = 2 /arch:sse2 - sse2 instructions +// WarnAsError = TRUE /WX int runtime = 0; int optimized = 0; int inlineFunctions = 0; + int debugFormat = 0; + int enhancedinstructions = 0; + std::string globaloptimizations = "FALSE"; + std::string enableintrinsicfunctions = "FALSE"; + std::string improvefloatingpointconsistency = "FALSE"; + int favorsizeorspeed = 0; + std::string omitframepointers = "FALSE"; + std::string enablefibersafeoptimization = "FALSE"; + int optimizeforprocessor = 0; + std::string optimizeforwindowsapplication = "FALSE"; + std::string programDatabase; const char* pre = "WIN32,_DEBUG,_WINDOWS"; std::string debugPostfix = ""; @@ -347,72 +374,114 @@ << "\t\t\t\tName=\"VCCLCompilerTool\"\n" << "\t\t\t\tAdditionalOptions=\""; - // check the flags for the run time library flag options - // if there is a match set the run time flag - if(flags.find("MTd") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-MTd", ""); - cmSystemTools::ReplaceString(flags, "/MTd", ""); - runtime = 1; - } - else if (flags.find("MDd") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-MDd", ""); - cmSystemTools::ReplaceString(flags, "/MDd", ""); - runtime = 3; - } - else if (flags.find("MLd") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-MLd", ""); - cmSystemTools::ReplaceString(flags, "/MLd", ""); - runtime = 5; - } - else if (flags.find("MT") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-MT", ""); - cmSystemTools::ReplaceString(flags, "/MT", ""); - runtime = 0; - } - else if (flags.find("MD") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-MD", ""); - cmSystemTools::ReplaceString(flags, "/MD", ""); - runtime = 2; - } - else if (flags.find("ML") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-ML", ""); - cmSystemTools::ReplaceString(flags, "/ML", ""); - runtime = 4; - } - int debugFormat = 0; - - // check the flags for the debug information format flag options - if(flags.find("Z7") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-Z7", ""); - cmSystemTools::ReplaceString(flags, "/Z7", ""); - debugFormat = 1; - } - else if (flags.find("Zd") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-Zd", ""); - cmSystemTools::ReplaceString(flags, "/Zd", ""); - debugFormat = 2; - } - else if (flags.find("Zi") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-Zi", ""); - cmSystemTools::ReplaceString(flags, "/Zi", ""); - debugFormat = 3; - } - else if (flags.find("ZI") != flags.npos) - { - cmSystemTools::ReplaceString(flags, "-ZI", ""); - cmSystemTools::ReplaceString(flags, "/ZI", ""); - debugFormat = 4; - } - + // GENERAL FLAGS + + // Check flags for DebugFormat + debugFormat = FindAndRemoveCaseInsensitive(flags,"Z7")?1: + FindAndRemoveCaseInsensitive(flags,"Zd")?2: + FindAndRemoveCaseInsensitive(flags,"Zi")?3: + FindAndRemoveCaseInsensitive(flags,"ZI")?4:debugFormat; + + std::string warningsaserrors = "FALSE"; + warningsaserrors = FindAndRemoveCaseInsensitive(flags, "WX") ? "TRUE" : warningsaserrors; + + // OPTIMIZATION FLAGS + + // Check flags for Basic optimization + optimized = FindAndRemoveCaseInsensitive(flags,"Od") ? 0: + FindAndRemoveCaseInsensitive(flags,"O1") ? 1: + FindAndRemoveCaseInsensitive(flags,"O2") ? 2: + FindAndRemoveCaseInsensitive(flags,"Ox") ? 3 : optimized; + + // Check flags for GlobalOptimizations + globaloptimizations = FindAndRemoveCaseInsensitive(flags,"Og")?"TRUE":globaloptimizations; + + // Check flags for InlineFunctionExpansion + inlineFunctions= FindAndRemoveCaseInsensitive(flags,"Ob1")?1: + FindAndRemoveCaseInsensitive(flags,"Ob2")?2:inlineFunctions; + + // Check flags for EnableIntrinsicFunctions + enableintrinsicfunctions = FindAndRemoveCaseInsensitive(flags,"Oi")?"TRUE":enableintrinsicfunctions; + + // Check flags for ImproveFloatingPointConsistency + improvefloatingpointconsistency = FindAndRemoveCaseInsensitive(flags,"Op")?"TRUE":improvefloatingpointconsistency; + + // Check flags for FavorSizeOrSpeed + favorsizeorspeed = FindAndRemoveCaseInsensitive(flags,"Ot")?1: + FindAndRemoveCaseInsensitive(flags,"Os")?2:favorsizeorspeed; + + // Check flags for OmitFramePointers + omitframepointers = FindAndRemoveCaseInsensitive(flags,"Oy")?"TRUE":omitframepointers; + + // Check flags for EnableFibreSafeOptimization + enablefibersafeoptimization = FindAndRemoveCaseInsensitive(flags,"GT")?"TRUE":enablefibersafeoptimization; + + // Check flags for OptimizeForProcessor + optimizeforprocessor = FindAndRemoveCaseInsensitive(flags,"G5")?1: + FindAndRemoveCaseInsensitive(flags,"G6")?2: + FindAndRemoveCaseInsensitive(flags,"G7")?3:optimizeforprocessor; + + // Check flags for OptimizeForWindowsApplication + optimizeforwindowsapplication = FindAndRemoveCaseInsensitive(flags,"GA")?"TRUE":optimizeforwindowsapplication; + + + // CODE GENERATION FLAGS + + // Minimal rebuild + std::string minrebuild = "FALSE"; // default off + minrebuild = FindAndRemoveCaseInsensitive(flags,"Gm")?"TRUE" :minrebuild; + + // exception handling + std::string exceptions = "FALSE"; // default off + exceptions = FindAndRemoveCaseInsensitive(flags,"EHsc")?"TRUE" :exceptions; + + // smaller type check + std::string smallertypecheck = "FALSE"; // default off + smallertypecheck = FindAndRemoveCaseInsensitive(flags,"RTCc")?"TRUE" :smallertypecheck; + + // basic runtime checks + int basicruntimechecks = 0; // default off + basicruntimechecks = FindAndRemoveCaseInsensitive(flags,"RTCs")?1 : + FindAndRemoveCaseInsensitive(flags,"RTCu")?2 : + FindAndRemoveCaseInsensitive(flags,"RTC1")?3 : + FindAndRemoveCaseInsensitive(flags,"RTCsu")?3 : basicruntimechecks; + + // buffer check + std::string buffcheck = "FALSE"; // default off + buffcheck = FindAndRemoveCaseInsensitive(flags,"Gs")? "TRUE" : buffcheck; + + + // Check flags for Runtime Library + runtime = FindAndRemoveCaseInsensitive(flags,"MT")?0: + FindAndRemoveCaseInsensitive(flags,"MTd")?1: + FindAndRemoveCaseInsensitive(flags,"MD")?2: + FindAndRemoveCaseInsensitive(flags,"MDd")?3: + FindAndRemoveCaseInsensitive(flags,"ML")?4: + FindAndRemoveCaseInsensitive(flags,"MLd")?5:runtime; + + + // Check flags for enhanced instruction set + enhancedinstructions = FindAndRemoveCaseInsensitive(flags,"arch:sse")?1: + FindAndRemoveCaseInsensitive(flags,"arch:sse2") ?2 : enhancedinstructions; + + + // LANGUAGE + bool found_rtti = m_Makefile->IsOn("CMAKE_CXX_USE_RTTI"); + std::string rtti; + + // if rtti not set above, look at command line + if(!found_rtti) + { + rtti = FindAndRemoveCaseInsensitive(flags,"GR")? "TRUE" : "FALSE"; + } + else + { + rtti = "TRUE"; + // if was set, remove extra flag from command line + FindAndRemoveCaseInsensitive(flags,"GR"); + } + + fout << this->EscapeForXML(flags.c_str()).c_str(); fout << " -DCMAKE_INTDIR=\\"" << configName << "\\"" @@ -429,8 +498,23 @@ fout << "\"\n"; fout << "\t\t\t\tOptimization=\"" << optimized << "\"\n" - << "\t\t\t\tRuntimeLibrary=\"" << runtime << "\"\n" + << "\t\t\t\tGlobalOptimizations=\"" << globaloptimizations << "\"\n" << "\t\t\t\tInlineFunctionExpansion=\"" << inlineFunctions << "\"\n" + << "\t\t\t\tEnableIntrinsicFunctions=\"" << enableintrinsicfunctions << "\"\n" + << "\t\t\t\tImproveFloatingPointConsistency=\"" << improvefloatingpointconsistency << "\"\n" + << "\t\t\t\tFavorSizeOrSpeed=\"" << favorsizeorspeed << "\"\n" + << "\t\t\t\tOmitFramePointers=\"" << omitframepointers << "\"\n" + << "\t\t\t\tEnableFiberSafeOptimizations=\"" << enablefibersafeoptimization << "\"\n" + << "\t\t\t\tOptimizeForProcessor=\"" << optimizeforprocessor << "\"\n" + << "\t\t\t\tOptimizeForWindowsApplication=\"" << optimizeforwindowsapplication << "\"\n" + << "\t\t\t\tRuntimeLibrary=\"" << runtime << "\"\n" + << "\t\t\t\tEnableEnhancedInstructionSet=\"" << enhancedinstructions << "\"\n" + << "\t\t\t\tWarnAsError=\"" << warningsaserrors << "\"\n" + << "\t\t\t\tMinimalRebuild=\"" << minrebuild << "\"\n" + << "\t\t\t\tExceptionHandling=\"" << exceptions << "\"\n" + << "\t\t\t\tSmallerTypeCheck=\"" << smallertypecheck << "\"\n" + << "\t\t\t\tBasicRuntimeChecks=\"" << basicruntimechecks << "\"\n" + << "\t\t\t\tBufferSecurityCheck=\"" << buffcheck << "\"\n" << "\t\t\t\tPreprocessorDefinitions=\"" << pre; if(target.GetType() == cmTarget::SHARED_LIBRARY || target.GetType() == cmTarget::MODULE_LIBRARY) @@ -450,10 +534,7 @@ } this->OutputDefineFlags(fout); fout << "\"\n"; - if(m_Makefile->IsOn("CMAKE_CXX_USE_RTTI")) - { - fout << "\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n"; - } + fout << "\t\t\t\tRuntimeTypeInfo=\"" << rtti << "\"\n"; fout << "\t\t\t\tAssemblerListingLocation=\"" << configName << "\"\n"; fout << "\t\t\t\tObjectFile=\"" << configName << "\\\"\n"; if ( m_Makefile->GetDefinition("CMAKE_CXX_WARNING_LEVEL") ) @@ -523,6 +604,15 @@ extraLinkOptions += " "; extraLinkOptions += targetLinkFlags; } + + int linkincrementally = FindAndRemoveCaseInsensitive(extraLinkOptions, "INCREMENTAL:NO") ? 1 : + FindAndRemoveCaseInsensitive(extraLinkOptions, "INCREMENTAL:YES") ? 2 : 0; + + int removeReferences = FindAndRemoveCaseInsensitive(extraLinkOptions, "OPT:NOREF") ? 1: + FindAndRemoveCaseInsensitive(extraLinkOptions, "OPT:REF") ? 2 : 0; + int COMDATFolding = FindAndRemoveCaseInsensitive(extraLinkOptions, "OPT:NOICF") ? 1: + FindAndRemoveCaseInsensitive(extraLinkOptions, "OPT:ICF") ? 2 : 0; + switch(target.GetType()) { @@ -542,6 +632,7 @@ } case cmTarget::SHARED_LIBRARY: case cmTarget::MODULE_LIBRARY: + { fout << "\t\t\t<Tool\n" << "\t\t\t\tName=\"VCLinkerTool\"\n" << "\t\t\t\tAdditionalOptions=\"/MACHINE:I386"; @@ -552,6 +643,7 @@ } fout << "\"\n" << "\t\t\t\tAdditionalDependencies=\" odbc32.lib odbccp32.lib "; + this->OutputLibraries(fout, configName, libName, target); fout << "\"\n"; temp = m_LibraryOutputPath; @@ -562,7 +654,9 @@ temp += ".dll"; fout << "\t\t\t\tOutputFile=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n"; - fout << "\t\t\t\tLinkIncremental=\"1\"\n"; + fout << "\t\t\tLinkIncremental=\"" << linkincrementally << "\"\n"; + fout << "\t\t\tOptimizeReferences=\"" << removeReferences << "\"\n"; + fout << "\t\t\tEnableCOMDATFolding=\"" << COMDATFolding << "\"\n"; if(m_Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE")) { fout << "\t\t\t\tSuppressStartupBanner=\"FALSE\"\n"; @@ -597,9 +691,10 @@ temp += debugPostfix; temp += ".lib"; fout << "\t\t\t\tImportLibrary=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"/>\n"; + } break; case cmTarget::EXECUTABLE: - + { fout << "\t\t\t<Tool\n" << "\t\t\t\tName=\"VCLinkerTool\"\n" << "\t\t\t\tAdditionalOptions=\"/MACHINE:I386"; @@ -612,7 +707,9 @@ << "\t\t\t\tAdditionalDependencies=\"" << m_Makefile->GetDefinition("CMAKE_STANDARD_LIBRARIES") << " "; + this->OutputLibraries(fout, configName, libName, target); + fout << "\"\n"; temp = m_ExecutableOutputPath; temp += configName; @@ -620,7 +717,9 @@ temp += libName; temp += ".exe"; fout << "\t\t\t\tOutputFile=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n"; - fout << "\t\t\t\tLinkIncremental=\"1\"\n"; + fout << "\t\t\tLinkIncremental=\"" << linkincrementally << "\"\n"; + fout << "\t\t\tOptimizeReferences=\"" << removeReferences << "\"\n"; + fout << "\t\t\tEnableCOMDATFolding=\"" << COMDATFolding << "\"\n"; if(m_Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE")) { fout << "\t\t\t\tSuppressStartupBanner=\"FALSE\"\n"; @@ -631,7 +730,9 @@ } fout << "\t\t\t\tAdditionalLibraryDirectories=\""; + this->OutputLibraryDirectories(fout, configName, libName, target); + fout << "\"\n"; fout << "\t\t\t\tProgramDatabaseFile=\"" << m_LibraryOutputPath << "$(OutDir)\\" << libName << ".pdb\"\n"; @@ -650,6 +751,7 @@ } fout << "\t\t\t\tStackReserveSize=\"" << m_Makefile->GetDefinition("CMAKE_CXX_STACK_SIZE") << "\"/>\n"; + } break; case cmTarget::UTILITY: break; @@ -681,89 +783,90 @@ { bool hasone = false; if(m_LibraryOutputPath.size()) - { + { hasone = true; std::string temp = m_LibraryOutputPath; temp += "$(INTDIR)"; - + fout << this->ConvertToXMLOutputPath(temp.c_str()) << "," << this->ConvertToXMLOutputPath(m_LibraryOutputPath.c_str()); - } + } if(m_ExecutableOutputPath.size() && (m_LibraryOutputPath != m_ExecutableOutputPath)) { if (hasone) - { + { fout << ","; - } + } hasone = true; std::string temp = m_ExecutableOutputPath; temp += "$(INTDIR)"; fout << this->ConvertToXMLOutputPath(temp.c_str()) << "," << this->ConvertToXMLOutputPath(m_ExecutableOutputPath.c_str()); } - + std::set<std::string> pathEmitted; std::vector<std::string>::const_iterator i; const std::vector<std::string>& libdirs = tgt.GetLinkDirectories(); for(i = libdirs.begin(); i != libdirs.end(); ++i) - { + { std::string lpath = *i; if(lpath[lpath.size()-1] != '/') - { + { lpath += "/"; - } + } if(pathEmitted.insert(lpath).second) - { + { if(hasone) - { + { fout << ","; - } + } std::string lpathi = lpath + "$(INTDIR)"; fout << this->ConvertToXMLOutputPath(lpathi.c_str()) << "," << this->ConvertToXMLOutputPath(lpath.c_str()); hasone = true; - } } + } } void cmLocalVisualStudio7Generator::OutputLibraries(std::ostream& fout, - const char* configName, - const char* libName, - const cmTarget &target) + const char* configName, + const char* libName, + const cmTarget &target) { const cmTarget::LinkLibraries& libs = target.GetLinkLibraries(); cmTarget::LinkLibraries::const_iterator j; for(j = libs.begin(); j != libs.end(); ++j) - { + { if(j->first != libName) - { + { std::string lib = j->first; std::string debugPostfix = ""; // if this is a library we are building then watch for a debugPostfix if (!strcmp(configName,"Debug")) - { + { std::string libPath = j->first + "_CMAKE_PATH"; const char* cacheValue = m_GlobalGenerator->GetCMakeInstance()->GetCacheDefinition(libPath.c_str()); if(cacheValue && *cacheValue && m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX")) - { + { debugPostfix = m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX"); - } } + } if(j->first.find(".lib") == std::string::npos) - { + { lib += debugPostfix + ".lib"; - } + } lib = this->ConvertToXMLOutputPath(lib.c_str()); if (j->second == cmTarget::GENERAL - || (j->second == cmTarget::DEBUG && strcmp(configName, "Debug") == 0) - || (j->second == cmTarget::OPTIMIZED && strcmp(configName, "Debug") != 0)) - { + || (j->second == cmTarget::DEBUG && strcmp(configName, "Debug") == 0) + || (j->second == cmTarget::OPTIMIZED && strcmp(configName, "Debug") != 0)) + { fout << lib << " "; - } } } + } + } void cmLocalVisualStudio7Generator::OutputDefineFlags(std::ostream& fout) @@ -1252,3 +1355,41 @@ } +bool cmLocalVisualStudio7Generator::FindAndRemoveCaseInsensitiveGivenUpperCase(std::string const & flagsupper, + std::string &flags, const std::string &flagupper) +{ + std::string::size_type i = flagsupper.find(flagupper); + std::string::size_type flagsize = flagupper.size(); + if(i == flags.npos) + return false; + // keep stripping out flags until done + std::string::size_type length_removed = 0; + while(flags.npos != i) + { + std::string::size_type iraw = i - length_removed; + std::string::size_type end = std::min(iraw + flagsize, flags.size()); + std::string::size_type count = end - iraw; + flags.erase(iraw, count); + i = std::min(flagsupper.size(), i + flagsize); + i = flagsupper.find(flagupper, i); + length_removed += flagsize; + } + return true; +} + +bool cmLocalVisualStudio7Generator::FindAndRemoveCaseInsensitive(std::string &flags, const std::string &flagraw) +{ + // this is rather inefficient as it copies all flags every time, but it's not the end of the world + + std::string flagsupper = cmSystemTools::UpperCase(flags); + flagsupper += " "; + // add space at the end to make sure we match all of the flag, and we match even if it's at the end + + std::string fdash = std::string("-") + cmSystemTools::UpperCase(flagraw) + " "; + std::string fslash = std::string("/") + cmSystemTools::UpperCase(flagraw) + " "; + + return FindAndRemoveCaseInsensitiveGivenUpperCase(flagsupper, flags, fdash) + || FindAndRemoveCaseInsensitiveGivenUpperCase(flagsupper, flags, fslash); +} + + cmLocalVisualStudio7Generator.h.diff [^] (903 bytes) 1969-12-31 19:00 [Show Content] [Hide Content] Index: cmLocalVisualStudio7Generator.h =================================================================== RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.h,v retrieving revision 1.7 diff -u -r1.7 cmLocalVisualStudio7Generator.h --- a/cmLocalVisualStudio7Generator.h 20 May 2004 20:29:09 -0000 1.7 +++ b/cmLocalVisualStudio7Generator.h 1 Jul 2004 12:14:43 -0000 @@ -114,6 +114,10 @@ const char* output, const char* extraFlags); + static bool FindAndRemoveCaseInsensitiveGivenUpperCase(std::string const & flagsupper, + std::string &flags, const std::string &flagupper); + static bool FindAndRemoveCaseInsensitive(std::string &flags, const std::string &f); + std::vector<std::string> m_CreatedProjectNames; std::string m_LibraryOutputPath; std::string m_ExecutableOutputPath; | ||||||||
Relationships | |
Relationships |
Notes | |
(0001228) Paul Smyth (reporter) 2004-07-01 09:36 |
I've attached patches to fix this - and convert the compiler flags (and some linker flags) into parameters that the dev environment understands. |
(0001265) Bill Hoffman (manager) 2004-07-14 11:55 |
I don't think your patch is correct. The command line options seem to be case sensitive. For example: /ZI and /Zi mean something different. I am working on incorporating your changes in a bit of a rework, but the case will have to match the documentation found in cl /help for the flags. -Bill |
(0001268) Bill Hoffman (manager) 2004-07-14 16:26 |
I have changed the implementation in cvs to better use the command line options. Please try it and let me know if it works for you. As I mentioned, it is not case insensitive as there serveral flags that are differentiated by case in cl. This is too big a fix for 2.0, but should be in 2.2. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |