diff --git a/Source/DLLHeader.dsptemplate b/Source/DLLHeader.dsptemplate index 81870bb14..23387c18e 100644 --- a/Source/DLLHeader.dsptemplate +++ b/Source/DLLHeader.dsptemplate @@ -68,7 +68,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 CM_OPTIMIZED_LIBRARIES CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 !ELSEIF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Debug" @@ -95,7 +95,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 CM_DEBUG_LIBRARIES CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ENDIF diff --git a/Source/EXEHeader.dsptemplate b/Source/EXEHeader.dsptemplate index 64c4cb571..c2e1f2952 100644 --- a/Source/EXEHeader.dsptemplate +++ b/Source/EXEHeader.dsptemplate @@ -63,7 +63,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 -# ADD LINK32 CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 +# ADD LINK32 CM_OPTIMIZED_LIBRARIES CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 !ELSEIF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Debug" @@ -88,7 +88,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /IGNORE:4089 -# ADD LINK32 CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /IGNORE:4089 +# ADD LINK32 CM_DEBUG_LIBRARIES CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /IGNORE:4089 !ELSEIF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Release MinSize" # PROP BASE Use_MFC 0 @@ -110,7 +110,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 -# ADD LINK32 CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 +# ADD LINK32 CM_OPTIMIZED_LIBRARIES CM_LIBRARIES kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /IGNORE:4089 !ENDIF diff --git a/Source/MFCDialog/CMakeSetup.rc b/Source/MFCDialog/CMakeSetup.rc index 4e458763c..28318e73f 100644 --- a/Source/MFCDialog/CMakeSetup.rc +++ b/Source/MFCDialog/CMakeSetup.rc @@ -91,7 +91,7 @@ EXSTYLE WS_EX_APPWINDOW CAPTION "CMakeSetupDialog" FONT 8, "MS Sans Serif" BEGIN - DEFPUSHBUTTON "Close",IDOK,319,39,50,14 + DEFPUSHBUTTON "Close",IDOK,231,206,50,14 EDITTEXT IDC_WhereSource,129,4,135,13,ES_AUTOHSCROLL PUSHBUTTON "Browse...",IDC_BUTTON2,269,5,43,13 LTEXT "Where is the source code:",IDC_STATIC,39,6,86,9 @@ -99,11 +99,13 @@ BEGIN PUSHBUTTON "Browse...",IDC_BUTTON3,268,25,43,13 LTEXT "Where do you want to build the binaries:",IDC_STATIC,1, 27,128,9 - PUSHBUTTON "Build Project Files",IDC_BuildProjects,6,39,67,15 - GROUPBOX "Cache Values",IDC_STATIC,2,67,370,156 - LISTBOX IDC_LIST2,13,84,344,122,LBS_OWNERDRAWVARIABLE | + PUSHBUTTON "Build Project Files",IDC_BuildProjects,81,205,67,15 + GROUPBOX "Cache Values",IDC_STATIC,9,43,356,141 + LISTBOX IDC_LIST2,15,55,344,122,LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + CTEXT "Right click on cache entries for additional options", + IDC_STATIC,19,190,333,11 END @@ -165,11 +167,6 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 48 END - - IDD_CMakeSetupDialog_DIALOG, DIALOG - BEGIN - BOTTOMMARGIN, 215 - END END #endif // APSTUDIO_INVOKED diff --git a/Source/MFCDialog/resource.h b/Source/MFCDialog/resource.h index 682c50c1e..3e1aa316c 100644 --- a/Source/MFCDialog/resource.h +++ b/Source/MFCDialog/resource.h @@ -13,6 +13,7 @@ #define IDC_BUTTON3 1004 #define IDC_BuildProjects 1006 #define IDC_LIST2 1007 +#define IDC_LIST3 1010 // Next default values for new objects // @@ -20,7 +21,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 131 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_CONTROL_VALUE 1011 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/Source/cmDSPMakefile.cxx b/Source/cmDSPMakefile.cxx index 22dc79851..1efbcc8ae 100644 --- a/Source/cmDSPMakefile.cxx +++ b/Source/cmDSPMakefile.cxx @@ -53,10 +53,8 @@ void cmDSPMakefile::OutputDSPFile() } // Create the DSP or set of DSP's for libraries and executables - const char* cacheValue - = cmCacheManager::GetInstance()->GetCacheValue("BUILD_SHARED_LIBS"); m_LibraryBuildType = STATIC_LIBRARY; - if(cacheValue && strcmp(cacheValue,"0")) + if(cmCacheManager::GetInstance()->IsOn("BUILD_SHARED_LIBS")) { m_LibraryBuildType = DLL; } @@ -69,30 +67,6 @@ void cmDSPMakefile::OutputDSPFile() for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); l++) { - std::string libOptions; - std::vector& libdirs = m_Makefile->GetLinkDirectories(); - for(i = libdirs.begin(); i != libdirs.end(); ++i) - { - libOptions += " /LIBPATH:\""; - libOptions += *i; - libOptions += "/$(OUTDIR)\" "; - libOptions += " /LIBPATH:\""; - libOptions += *i; - libOptions += "\" "; - } - std::vector& libs = m_Makefile->GetLinkLibraries(); - for(i = libs.begin(); i != libs.end(); ++i) - { - // add libraries to executables and dlls (but never include - // a library in a library, bad recursion) - if (!l->second.IsALibrary() || - (m_LibraryBuildType == DLL && l->first.c_str() != *i)) - { - libOptions += " "; - libOptions += *i; - libOptions += ".lib "; - } - } if (l->second.IsALibrary()) { this->SetBuildType(m_LibraryBuildType, l->first.c_str()); @@ -101,13 +75,11 @@ void cmDSPMakefile::OutputDSPFile() { this->SetBuildType(EXECUTABLE,l->first.c_str()); } - libOptions += "/STACK:10000000 "; - this->CreateSingleDSP(l->first.c_str(),l->second, libOptions); + this->CreateSingleDSP(l->first.c_str(),l->second); } } -void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target, - const std::string &libOptions) +void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target) { std::string fname; fname = m_Makefile->GetStartOutputDirectory(); @@ -121,7 +93,7 @@ void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target, { cmSystemTools::Error("Error Writing ", fname.c_str()); } - this->WriteDSPFile(fout,lname,target, libOptions); + this->WriteDSPFile(fout,lname,target); } void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout) @@ -189,11 +161,10 @@ void cmDSPMakefile::AddDSPBuildRule(cmSourceGroup& sourceGroup) void cmDSPMakefile::WriteDSPFile(std::ostream& fout, const char *libName, - cmTarget &target, - const std::string &libOptions) + cmTarget &target) { // Write the DSP file's header. - this->WriteDSPHeader(fout, libName, libOptions); + this->WriteDSPHeader(fout, libName, target); // We may be modifying the source groups temporarily, so make a copy. std::vector sourceGroups = m_Makefile->GetSourceGroups(); @@ -405,8 +376,55 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName) } void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName, - const std::string &libOptions) + const cmTarget &target) { + // determine the link directories + std::string libOptions; + std::string libDebugOptions; + std::string libOptimizedOptions; + std::vector::iterator i; + std::vector& libdirs = m_Makefile->GetLinkDirectories(); + for(i = libdirs.begin(); i != libdirs.end(); ++i) + { + libOptions += " /LIBPATH:\""; + libOptions += *i; + libOptions += "/$(OUTDIR)\" "; + libOptions += " /LIBPATH:\""; + libOptions += *i; + libOptions += "\" "; + } + // find link libraries + cmMakefile::LinkLibraries& libs = m_Makefile->GetLinkLibraries(); + cmMakefile::LinkLibraries::const_iterator j; + for(j = libs.begin(); j != libs.end(); ++j) + { + // add libraries to executables and dlls (but never include + // a library in a library, bad recursion) + if (!target.IsALibrary() || + (m_LibraryBuildType == DLL && libName != j->first)) + { + if (j->second == cmMakefile::GENERAL) + { + libOptions += " "; + libOptions += j->first; + libOptions += ".lib "; + } + if (j->second == cmMakefile::DEBUG) + { + libDebugOptions += " "; + libDebugOptions += j->first; + libDebugOptions += ".lib "; + } + if (j->second == cmMakefile::OPTIMIZED) + { + libOptimizedOptions += " "; + libOptimizedOptions += j->first; + libOptimizedOptions += ".lib "; + } + } + } + libOptions += "/STACK:10000000 "; + std::ifstream fin(m_DSPHeaderTemplate.c_str()); if(!fin) { @@ -420,6 +438,10 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName, std::string line = buffer; cmSystemTools::ReplaceString(line, "CM_LIBRARIES", libOptions.c_str()); + cmSystemTools::ReplaceString(line, "CM_DEBUG_LIBRARIES", + libDebugOptions.c_str()); + cmSystemTools::ReplaceString(line, "CM_OPTIMIZED_LIBRARIES", + libOptimizedOptions.c_str()); cmSystemTools::ReplaceString(line, "BUILD_INCLUDES", m_IncludeOptions.c_str()); cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName); diff --git a/Source/cmDSPMakefile.h b/Source/cmDSPMakefile.h index d231d161f..c35665397 100644 --- a/Source/cmDSPMakefile.h +++ b/Source/cmDSPMakefile.h @@ -67,16 +67,15 @@ private: std::string m_DSPFooterTemplate; std::vector m_CreatedProjectNames; - void CreateSingleDSP(const char *lname, cmTarget &tgt, - const std::string &libs); + void CreateSingleDSP(const char *lname, cmTarget &tgt); void WriteDSPFile(std::ostream& fout, const char *libName, - cmTarget &tgt, const std::string &libs); + cmTarget &tgt); void WriteDSPBeginGroup(std::ostream& fout, const char* group, const char* filter); void WriteDSPEndGroup(std::ostream& fout); void WriteDSPHeader(std::ostream& fout, const char *libName, - const std::string &libs); + const cmTarget &tgt); void WriteDSPBuildRule(std::ostream& fout, const char*); void WriteDSPBuildRule(std::ostream& fout); void WriteDSPFooter(std::ostream& fout); diff --git a/Source/cmDSPWriter.cxx b/Source/cmDSPWriter.cxx index 22dc79851..1efbcc8ae 100644 --- a/Source/cmDSPWriter.cxx +++ b/Source/cmDSPWriter.cxx @@ -53,10 +53,8 @@ void cmDSPMakefile::OutputDSPFile() } // Create the DSP or set of DSP's for libraries and executables - const char* cacheValue - = cmCacheManager::GetInstance()->GetCacheValue("BUILD_SHARED_LIBS"); m_LibraryBuildType = STATIC_LIBRARY; - if(cacheValue && strcmp(cacheValue,"0")) + if(cmCacheManager::GetInstance()->IsOn("BUILD_SHARED_LIBS")) { m_LibraryBuildType = DLL; } @@ -69,30 +67,6 @@ void cmDSPMakefile::OutputDSPFile() for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); l++) { - std::string libOptions; - std::vector& libdirs = m_Makefile->GetLinkDirectories(); - for(i = libdirs.begin(); i != libdirs.end(); ++i) - { - libOptions += " /LIBPATH:\""; - libOptions += *i; - libOptions += "/$(OUTDIR)\" "; - libOptions += " /LIBPATH:\""; - libOptions += *i; - libOptions += "\" "; - } - std::vector& libs = m_Makefile->GetLinkLibraries(); - for(i = libs.begin(); i != libs.end(); ++i) - { - // add libraries to executables and dlls (but never include - // a library in a library, bad recursion) - if (!l->second.IsALibrary() || - (m_LibraryBuildType == DLL && l->first.c_str() != *i)) - { - libOptions += " "; - libOptions += *i; - libOptions += ".lib "; - } - } if (l->second.IsALibrary()) { this->SetBuildType(m_LibraryBuildType, l->first.c_str()); @@ -101,13 +75,11 @@ void cmDSPMakefile::OutputDSPFile() { this->SetBuildType(EXECUTABLE,l->first.c_str()); } - libOptions += "/STACK:10000000 "; - this->CreateSingleDSP(l->first.c_str(),l->second, libOptions); + this->CreateSingleDSP(l->first.c_str(),l->second); } } -void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target, - const std::string &libOptions) +void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target) { std::string fname; fname = m_Makefile->GetStartOutputDirectory(); @@ -121,7 +93,7 @@ void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target, { cmSystemTools::Error("Error Writing ", fname.c_str()); } - this->WriteDSPFile(fout,lname,target, libOptions); + this->WriteDSPFile(fout,lname,target); } void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout) @@ -189,11 +161,10 @@ void cmDSPMakefile::AddDSPBuildRule(cmSourceGroup& sourceGroup) void cmDSPMakefile::WriteDSPFile(std::ostream& fout, const char *libName, - cmTarget &target, - const std::string &libOptions) + cmTarget &target) { // Write the DSP file's header. - this->WriteDSPHeader(fout, libName, libOptions); + this->WriteDSPHeader(fout, libName, target); // We may be modifying the source groups temporarily, so make a copy. std::vector sourceGroups = m_Makefile->GetSourceGroups(); @@ -405,8 +376,55 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName) } void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName, - const std::string &libOptions) + const cmTarget &target) { + // determine the link directories + std::string libOptions; + std::string libDebugOptions; + std::string libOptimizedOptions; + std::vector::iterator i; + std::vector& libdirs = m_Makefile->GetLinkDirectories(); + for(i = libdirs.begin(); i != libdirs.end(); ++i) + { + libOptions += " /LIBPATH:\""; + libOptions += *i; + libOptions += "/$(OUTDIR)\" "; + libOptions += " /LIBPATH:\""; + libOptions += *i; + libOptions += "\" "; + } + // find link libraries + cmMakefile::LinkLibraries& libs = m_Makefile->GetLinkLibraries(); + cmMakefile::LinkLibraries::const_iterator j; + for(j = libs.begin(); j != libs.end(); ++j) + { + // add libraries to executables and dlls (but never include + // a library in a library, bad recursion) + if (!target.IsALibrary() || + (m_LibraryBuildType == DLL && libName != j->first)) + { + if (j->second == cmMakefile::GENERAL) + { + libOptions += " "; + libOptions += j->first; + libOptions += ".lib "; + } + if (j->second == cmMakefile::DEBUG) + { + libDebugOptions += " "; + libDebugOptions += j->first; + libDebugOptions += ".lib "; + } + if (j->second == cmMakefile::OPTIMIZED) + { + libOptimizedOptions += " "; + libOptimizedOptions += j->first; + libOptimizedOptions += ".lib "; + } + } + } + libOptions += "/STACK:10000000 "; + std::ifstream fin(m_DSPHeaderTemplate.c_str()); if(!fin) { @@ -420,6 +438,10 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName, std::string line = buffer; cmSystemTools::ReplaceString(line, "CM_LIBRARIES", libOptions.c_str()); + cmSystemTools::ReplaceString(line, "CM_DEBUG_LIBRARIES", + libDebugOptions.c_str()); + cmSystemTools::ReplaceString(line, "CM_OPTIMIZED_LIBRARIES", + libOptimizedOptions.c_str()); cmSystemTools::ReplaceString(line, "BUILD_INCLUDES", m_IncludeOptions.c_str()); cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName); diff --git a/Source/cmDSPWriter.h b/Source/cmDSPWriter.h index d231d161f..c35665397 100644 --- a/Source/cmDSPWriter.h +++ b/Source/cmDSPWriter.h @@ -67,16 +67,15 @@ private: std::string m_DSPFooterTemplate; std::vector m_CreatedProjectNames; - void CreateSingleDSP(const char *lname, cmTarget &tgt, - const std::string &libs); + void CreateSingleDSP(const char *lname, cmTarget &tgt); void WriteDSPFile(std::ostream& fout, const char *libName, - cmTarget &tgt, const std::string &libs); + cmTarget &tgt); void WriteDSPBeginGroup(std::ostream& fout, const char* group, const char* filter); void WriteDSPEndGroup(std::ostream& fout); void WriteDSPHeader(std::ostream& fout, const char *libName, - const std::string &libs); + const cmTarget &tgt); void WriteDSPBuildRule(std::ostream& fout, const char*); void WriteDSPBuildRule(std::ostream& fout); void WriteDSPFooter(std::ostream& fout); diff --git a/Source/cmDSWMakefile.cxx b/Source/cmDSWMakefile.cxx index 97eb9c3fb..8d00d9f85 100644 --- a/Source/cmDSWMakefile.cxx +++ b/Source/cmDSWMakefile.cxx @@ -126,23 +126,24 @@ void cmDSWMakefile::WriteProject(std::ostream& fout, fout << "{{{\n"; // insert Begin Project Dependency Project_Dep_Name project stuff here - std::vector::iterator i, end; - i = project->GetMakefile()->GetLinkLibraries().begin(); - end = project->GetMakefile()->GetLinkLibraries().end(); - for(;i!= end; ++i) + cmMakefile::LinkLibraries::const_iterator j, jend; + j = project->GetMakefile()->GetLinkLibraries().begin(); + jend = project->GetMakefile()->GetLinkLibraries().end(); + for(;j!= jend; ++j) { - if(*i != dspname) + if(j->first != dspname) { if (!l.IsALibrary() || project->GetLibraryBuildType() == cmDSPMakefile::DLL) { fout << "Begin Project Dependency\n"; - fout << "Project_Dep_Name " << *i << "\n"; + fout << "Project_Dep_Name " << j->first << "\n"; fout << "End Project Dependency\n"; } } } - + + std::vector::iterator i, end; // write utility dependencies. i = project->GetMakefile()->GetUtilities().begin(); end = project->GetMakefile()->GetUtilities().end(); diff --git a/Source/cmDSWWriter.cxx b/Source/cmDSWWriter.cxx index 97eb9c3fb..8d00d9f85 100644 --- a/Source/cmDSWWriter.cxx +++ b/Source/cmDSWWriter.cxx @@ -126,23 +126,24 @@ void cmDSWMakefile::WriteProject(std::ostream& fout, fout << "{{{\n"; // insert Begin Project Dependency Project_Dep_Name project stuff here - std::vector::iterator i, end; - i = project->GetMakefile()->GetLinkLibraries().begin(); - end = project->GetMakefile()->GetLinkLibraries().end(); - for(;i!= end; ++i) + cmMakefile::LinkLibraries::const_iterator j, jend; + j = project->GetMakefile()->GetLinkLibraries().begin(); + jend = project->GetMakefile()->GetLinkLibraries().end(); + for(;j!= jend; ++j) { - if(*i != dspname) + if(j->first != dspname) { if (!l.IsALibrary() || project->GetLibraryBuildType() == cmDSPMakefile::DLL) { fout << "Begin Project Dependency\n"; - fout << "Project_Dep_Name " << *i << "\n"; + fout << "Project_Dep_Name " << j->first << "\n"; fout << "End Project Dependency\n"; } } } - + + std::vector::iterator i, end; // write utility dependencies. i = project->GetMakefile()->GetUtilities().begin(); end = project->GetMakefile()->GetUtilities().end(); diff --git a/Source/cmLinkLibrariesCommand.cxx b/Source/cmLinkLibrariesCommand.cxx index 4215147d0..e06fce8e7 100644 --- a/Source/cmLinkLibrariesCommand.cxx +++ b/Source/cmLinkLibrariesCommand.cxx @@ -23,10 +23,27 @@ bool cmLinkLibrariesCommand::Invoke(std::vector& args) this->SetError("called with incorrect number of arguments"); return false; } + // add libraries, nothe that there is an optional prefix + // of debug and optimized than can be used for(std::vector::iterator i = args.begin(); i != args.end(); ++i) { - m_Makefile->AddLinkLibrary((*i).c_str()); + if (*i == "debug") + { + ++i; + m_Makefile->AddLinkLibrary(i->c_str(), + cmMakefile::DEBUG); + } + else if (*i == "optimized") + { + ++i; + m_Makefile->AddLinkLibrary(i->c_str(), + cmMakefile::OPTIMIZED); + } + else + { + m_Makefile->AddLinkLibrary(i->c_str()); + } } return true; } diff --git a/Source/cmLinkLibrariesCommand.h b/Source/cmLinkLibrariesCommand.h index 5f01d524a..3ef25f653 100644 --- a/Source/cmLinkLibrariesCommand.h +++ b/Source/cmLinkLibrariesCommand.h @@ -70,11 +70,14 @@ public: virtual const char* GetFullDocumentation() { return - "LINK_LIBRARIES(library1 library2)\n" + "LINK_LIBRARIES(library1 library2 ...)\n" "Specify a list of libraries to be linked into\n" "executables or shared objects. This command is passed\n" "down to all other commands. The library name should be\n" - "the same as the name used in the LIBRARY(library) command."; + "the same as the name used in the LIBRARY(library) command.\n" + "The debug and optimized strings may be used to indicate that\n" + "the next library listed is to be used only for that specific\n" + "type of build"; } cmTypeMacro(cmLinkLibrariesCommand, cmCommand); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 6446f985a..a9a182d74 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -127,7 +127,6 @@ void cmMakefile::Print() const this->PrintStringVector("m_MakeVerbatim ", m_MakeVerbatim); this->PrintStringVector("m_IncludeDirectories;", m_IncludeDirectories); this->PrintStringVector("m_LinkDirectories", m_LinkDirectories); - this->PrintStringVector("m_LinkLibraries", m_LinkLibraries); this->PrintStringVector("m_Utilities", m_Utilities); this->PrintStringVector("m_UtilityDirectories", m_UtilityDirectories); } @@ -335,9 +334,15 @@ void cmMakefile::AddUtilityDirectory(const char* dir) m_UtilityDirectories.push_back(dir); } +void cmMakefile::AddLinkLibrary(const char* lib, LinkLibraryType llt) +{ + m_LinkLibraries.push_back( + std::pair(lib,llt)); +} + void cmMakefile::AddLinkLibrary(const char* lib) { - m_LinkLibraries.push_back(lib); + this->AddLinkLibrary(lib,GENERAL); } void cmMakefile::AddLinkDirectory(const char* dir) @@ -483,11 +488,12 @@ void cmMakefile::ExpandVariables() { this->ExpandVariablesInString(*j); } - begin = m_LinkLibraries.begin(); - end = m_LinkLibraries.end(); - for(j = begin; j != end; ++j) + LinkLibraries::iterator j2, end2; + j2 = m_LinkLibraries.begin(); + end2 = m_LinkLibraries.end(); + for(; j2 != end2; ++j2) { - this->ExpandVariablesInString(*j); + this->ExpandVariablesInString(j2->first); } } diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index a8930b084..4da8f2bc0 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -118,10 +118,21 @@ public: */ void AddUtilityDirectory(const char*); + /** + * Get a list of link libraries in the build. + */ + enum LinkLibraryType {GENERAL, DEBUG, OPTIMIZED}; + typedef std::vector > LinkLibraries; + LinkLibraries& GetLinkLibraries() + { + return m_LinkLibraries; + } + /** * Add a link library to the build. */ void AddLinkLibrary(const char*); + void AddLinkLibrary(const char*, LinkLibraryType type); /** * Add a link directory to the build. @@ -332,14 +343,6 @@ public: return m_UtilityDirectories; } - /** - * Get a list of link libraries in the build. - */ - std::vector& GetLinkLibraries() - { - return m_LinkLibraries; - } - /** * Return a list of source files in this makefile. */ @@ -446,7 +449,7 @@ protected: std::vector m_LinkDirectories; std::vector m_Utilities; std::vector m_UtilityDirectories; - std::vector m_LinkLibraries; + LinkLibraries m_LinkLibraries; std::string m_IncludeFileRegularExpression; std::string m_DefineFlags; std::vector m_SourceGroups; diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx index 08392f2f4..c2da9132b 100644 --- a/Source/cmUnixMakefileGenerator.cxx +++ b/Source/cmUnixMakefileGenerator.cxx @@ -133,18 +133,21 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout, linkLibs += " "; } std::string librariesLinked; - std::vector& libs = m_Makefile->GetLinkLibraries(); - for(j = libs.begin(); j != libs.end(); ++j) + cmMakefile::LinkLibraries& libs = m_Makefile->GetLinkLibraries(); + cmMakefile::LinkLibraries::const_iterator j2; + for(j2 = libs.begin(); j2 != libs.end(); ++j2) { // Don't link the library against itself! - if(targetLibrary && (*j == targetLibrary)) continue; - std::string::size_type pos = (*j).find("-l"); + if(targetLibrary && (j2->first == targetLibrary)) continue; + // don't look at debug libraries + if (j2->second == cmMakefile::DEBUG) continue; + std::string::size_type pos = j2->first.find("-l"); if((pos == std::string::npos || pos > 0) - && (*j).find("${") == std::string::npos) + && j2->first.find("${") == std::string::npos) { librariesLinked += "-l"; } - librariesLinked += *j; + librariesLinked += j2->first; librariesLinked += " "; } linkLibs += librariesLinked; @@ -206,22 +209,22 @@ void cmUnixMakefileGenerator::OutputTargets(std::ostream& fout) void cmUnixMakefileGenerator::OutputDependencies(std::ostream& fout) { fout << "CMAKE_DEPEND_LIBS = "; - std::vector& libs = m_Makefile->GetLinkLibraries(); - std::vector::iterator dir, lib; + cmMakefile::LinkLibraries& libs = m_Makefile->GetLinkLibraries(); + cmMakefile::LinkLibraries::const_iterator lib2; // Search the list of libraries that will be linked into // the executable - for(lib = libs.begin(); lib != libs.end(); ++lib) + for(lib2 = libs.begin(); lib2 != libs.end(); ++lib2) { // loop over the list of directories that the libraries might // be in, looking for an ADD_LIBRARY(lib...) line. This would // be stored in the cache const char* cacheValue - = cmCacheManager::GetInstance()->GetCacheValue(lib->c_str()); + = cmCacheManager::GetInstance()->GetCacheValue(lib2->first.c_str()); if(cacheValue) { std::string libpath = cacheValue; libpath += "/lib"; - libpath += *lib; + libpath += lib2->first; libpath += "${CMAKE_LIB_EXT}"; fout << libpath << " "; } @@ -229,7 +232,7 @@ void cmUnixMakefileGenerator::OutputDependencies(std::ostream& fout) std::vector& utils = m_Makefile->GetUtilities(); std::vector& utildirs = m_Makefile->GetUtilityDirectories(); - std::vector::iterator util; + std::vector::iterator dir, util; // Search the list of utilities that may be used to generate code for // this project. for(util = utils.begin(); util != utils.end(); ++util) diff --git a/Source/cmVTKWrapPythonCommand.cxx b/Source/cmVTKWrapPythonCommand.cxx index 0a26f8de8..729375ab6 100644 --- a/Source/cmVTKWrapPythonCommand.cxx +++ b/Source/cmVTKWrapPythonCommand.cxx @@ -26,9 +26,7 @@ bool cmVTKWrapPythonCommand::Invoke(std::vector& args) // Now check and see if the value has been stored in the cache // already, if so use that value and don't look for the program - const char* cacheValue - = cmCacheManager::GetInstance()->GetCacheValue("VTK_WRAP_PYTHON"); - if(!cacheValue || !strcmp(cacheValue,"0")) + if(!cmCacheManager::GetInstance()->IsOn("VTK_WRAP_PYTHON")) { return true; }