summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/CMakeSetup.dsw15
-rw-r--r--Source/DumpDocumentation.dsp100
-rw-r--r--Source/cmCommands.cxx2
-rw-r--r--Source/cmDSPMakefile.cxx68
-rw-r--r--Source/cmDSPMakefile.h11
-rw-r--r--Source/cmDSPWriter.cxx68
-rw-r--r--Source/cmDSPWriter.h11
-rw-r--r--Source/cmFindFileCommand.cxx5
-rw-r--r--Source/cmFindIncludeCommand.cxx22
-rw-r--r--Source/cmFindIncludeCommand.h4
-rw-r--r--Source/cmFindLibraryCommand.cxx35
-rw-r--r--Source/cmFindLibraryCommand.h3
-rw-r--r--Source/cmFindPathCommand.cxx74
-rw-r--r--Source/cmFindPathCommand.h81
-rw-r--r--Source/cmMakefile.cxx2
-rw-r--r--Source/cmMakefile.h18
-rw-r--r--Source/cmUnixMakefileGenerator.cxx7
17 files changed, 418 insertions, 108 deletions
diff --git a/Source/CMakeSetup.dsw b/Source/CMakeSetup.dsw
index 5b3a458..d734315 100644
--- a/Source/CMakeSetup.dsw
+++ b/Source/CMakeSetup.dsw
@@ -48,6 +48,21 @@ Package=<4>
###############################################################################
+Project: "DumpDocumentation"=.\DumpDocumentation.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name CMakeLib
+ End Project Dependency
+}}}
+
+###############################################################################
+
Global:
Package=<5>
diff --git a/Source/DumpDocumentation.dsp b/Source/DumpDocumentation.dsp
new file mode 100644
index 0000000..fcbe870
--- /dev/null
+++ b/Source/DumpDocumentation.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="DumpDocumentation" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=DumpDocumentation - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "DumpDocumentation.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "DumpDocumentation.mak" CFG="DumpDocumentation - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "DumpDocumentation - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "DumpDocumentation - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "DumpDocumentation - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# 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
+# ADD 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
+
+!ELSEIF "$(CFG)" == "DumpDocumentation - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DumpDocumentation___Win32_Debug"
+# PROP BASE Intermediate_Dir "DumpDocumentation___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DumpDocumentation___Win32_Debug"
+# PROP Intermediate_Dir "DumpDocumentation___Win32_Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# 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
+# ADD 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
+
+!ENDIF
+
+# Begin Target
+
+# Name "DumpDocumentation - Win32 Release"
+# Name "DumpDocumentation - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\cmDumpDocumentation.cxx
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index c9cf0fb..71d2ae5 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -37,6 +37,7 @@
#include "cmCableInstantiateCommand.cxx"
#include "cmCableInstantiateClassCommand.cxx"
#include "cmFindFileCommand.cxx"
+#include "cmFindPathCommand.cxx"
#include "cmWrapExcludeFilesCommand.cxx"
#include "cmVTKWrapPythonCommand.cxx"
#include "cmVTKWrapTclCommand.cxx"
@@ -83,6 +84,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands)
commands.push_back(new cmCableInstantiateCommand);
commands.push_back(new cmCableInstantiateClassCommand);
commands.push_back(new cmFindFileCommand);
+ commands.push_back(new cmFindPathCommand);
commands.push_back(new cmWrapExcludeFilesCommand);
commands.push_back(new cmVTKWrapPythonCommand);
commands.push_back(new cmVTKWrapTclCommand);
diff --git a/Source/cmDSPMakefile.cxx b/Source/cmDSPMakefile.cxx
index 74513fc..22dc798 100644
--- a/Source/cmDSPMakefile.cxx
+++ b/Source/cmDSPMakefile.cxx
@@ -51,28 +51,6 @@ void cmDSPMakefile::OutputDSPFile()
m_IncludeOptions += *i;
m_IncludeOptions += "\" ";
}
- std::vector<std::string>& libs = m_Makefile->GetLinkLibraries();
- for(i = libs.begin(); i != libs.end(); ++i)
- {
- m_LibraryOptions += " ";
- m_LibraryOptions += *i;
- m_LibraryOptions += ".lib ";
- }
- std::vector<std::string>& libswin32 = m_Makefile->GetLinkLibrariesWin32();
- for(i = libswin32.begin(); i != libswin32.end(); ++i)
- {
- m_LibraryOptions += " ";
- m_LibraryOptions += *i;
- m_LibraryOptions += ".lib ";
- }
- std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
- for(i = libdirs.begin(); i != libdirs.end(); ++i)
- {
- m_LibraryOptions += " /LIBPATH:\"";
- m_LibraryOptions += *i;
- m_LibraryOptions += "/$(OUTDIR)\" ";
- }
- m_LibraryOptions += "/STACK:10000000 ";
// Create the DSP or set of DSP's for libraries and executables
const char* cacheValue
@@ -91,6 +69,30 @@ void cmDSPMakefile::OutputDSPFile()
for(cmTargets::iterator l = tgts.begin();
l != tgts.end(); l++)
{
+ std::string libOptions;
+ std::vector<std::string>& 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<std::string>& 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());
@@ -99,11 +101,13 @@ void cmDSPMakefile::OutputDSPFile()
{
this->SetBuildType(EXECUTABLE,l->first.c_str());
}
- this->CreateSingleDSP(l->first.c_str(),l->second);
+ libOptions += "/STACK:10000000 ";
+ this->CreateSingleDSP(l->first.c_str(),l->second, libOptions);
}
}
-void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target)
+void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target,
+ const std::string &libOptions)
{
std::string fname;
fname = m_Makefile->GetStartOutputDirectory();
@@ -117,7 +121,7 @@ void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target)
{
cmSystemTools::Error("Error Writing ", fname.c_str());
}
- this->WriteDSPFile(fout,lname,target);
+ this->WriteDSPFile(fout,lname,target, libOptions);
}
void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
@@ -185,10 +189,11 @@ void cmDSPMakefile::AddDSPBuildRule(cmSourceGroup& sourceGroup)
void cmDSPMakefile::WriteDSPFile(std::ostream& fout,
const char *libName,
- cmTarget &target)
+ cmTarget &target,
+ const std::string &libOptions)
{
// Write the DSP file's header.
- this->WriteDSPHeader(fout, libName);
+ this->WriteDSPHeader(fout, libName, libOptions);
// We may be modifying the source groups temporarily, so make a copy.
std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
@@ -399,7 +404,8 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName)
}
}
-void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName)
+void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName,
+ const std::string &libOptions)
{
std::ifstream fin(m_DSPHeaderTemplate.c_str());
if(!fin)
@@ -413,12 +419,12 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName)
fin.getline(buffer, 2048);
std::string line = buffer;
cmSystemTools::ReplaceString(line, "CM_LIBRARIES",
- m_LibraryOptions.c_str());
+ libOptions.c_str());
cmSystemTools::ReplaceString(line, "BUILD_INCLUDES",
- m_IncludeOptions.c_str());
+ m_IncludeOptions.c_str());
cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName);
cmSystemTools::ReplaceString(line,
- "EXTRA_DEFINES",
+ "EXTRA_DEFINES",
m_Makefile->GetDefineFlags());
fout << line.c_str() << std::endl;
}
diff --git a/Source/cmDSPMakefile.h b/Source/cmDSPMakefile.h
index 4aac519..d231d16 100644
--- a/Source/cmDSPMakefile.h
+++ b/Source/cmDSPMakefile.h
@@ -67,14 +67,16 @@ private:
std::string m_DSPFooterTemplate;
std::vector<std::string> m_CreatedProjectNames;
- void CreateSingleDSP(const char *lname, cmTarget &tgt);
- void WriteDSPFile(std::ostream& fout,
- const char *libName, cmTarget &tgt);
+ void CreateSingleDSP(const char *lname, cmTarget &tgt,
+ const std::string &libs);
+ void WriteDSPFile(std::ostream& fout, const char *libName,
+ cmTarget &tgt, const std::string &libs);
void WriteDSPBeginGroup(std::ostream& fout,
const char* group,
const char* filter);
void WriteDSPEndGroup(std::ostream& fout);
- void WriteDSPHeader(std::ostream& fout, const char *libName);
+ void WriteDSPHeader(std::ostream& fout, const char *libName,
+ const std::string &libs);
void WriteDSPBuildRule(std::ostream& fout, const char*);
void WriteDSPBuildRule(std::ostream& fout);
void WriteDSPFooter(std::ostream& fout);
@@ -85,7 +87,6 @@ private:
const std::set<std::string>& outputs);
std::string m_IncludeOptions;
- std::string m_LibraryOptions;
cmMakefile* m_Makefile;
BuildType m_LibraryBuildType;
std::vector<std::string> m_Configurations;
diff --git a/Source/cmDSPWriter.cxx b/Source/cmDSPWriter.cxx
index 74513fc..22dc798 100644
--- a/Source/cmDSPWriter.cxx
+++ b/Source/cmDSPWriter.cxx
@@ -51,28 +51,6 @@ void cmDSPMakefile::OutputDSPFile()
m_IncludeOptions += *i;
m_IncludeOptions += "\" ";
}
- std::vector<std::string>& libs = m_Makefile->GetLinkLibraries();
- for(i = libs.begin(); i != libs.end(); ++i)
- {
- m_LibraryOptions += " ";
- m_LibraryOptions += *i;
- m_LibraryOptions += ".lib ";
- }
- std::vector<std::string>& libswin32 = m_Makefile->GetLinkLibrariesWin32();
- for(i = libswin32.begin(); i != libswin32.end(); ++i)
- {
- m_LibraryOptions += " ";
- m_LibraryOptions += *i;
- m_LibraryOptions += ".lib ";
- }
- std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
- for(i = libdirs.begin(); i != libdirs.end(); ++i)
- {
- m_LibraryOptions += " /LIBPATH:\"";
- m_LibraryOptions += *i;
- m_LibraryOptions += "/$(OUTDIR)\" ";
- }
- m_LibraryOptions += "/STACK:10000000 ";
// Create the DSP or set of DSP's for libraries and executables
const char* cacheValue
@@ -91,6 +69,30 @@ void cmDSPMakefile::OutputDSPFile()
for(cmTargets::iterator l = tgts.begin();
l != tgts.end(); l++)
{
+ std::string libOptions;
+ std::vector<std::string>& 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<std::string>& 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());
@@ -99,11 +101,13 @@ void cmDSPMakefile::OutputDSPFile()
{
this->SetBuildType(EXECUTABLE,l->first.c_str());
}
- this->CreateSingleDSP(l->first.c_str(),l->second);
+ libOptions += "/STACK:10000000 ";
+ this->CreateSingleDSP(l->first.c_str(),l->second, libOptions);
}
}
-void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target)
+void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target,
+ const std::string &libOptions)
{
std::string fname;
fname = m_Makefile->GetStartOutputDirectory();
@@ -117,7 +121,7 @@ void cmDSPMakefile::CreateSingleDSP(const char *lname, cmTarget &target)
{
cmSystemTools::Error("Error Writing ", fname.c_str());
}
- this->WriteDSPFile(fout,lname,target);
+ this->WriteDSPFile(fout,lname,target, libOptions);
}
void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
@@ -185,10 +189,11 @@ void cmDSPMakefile::AddDSPBuildRule(cmSourceGroup& sourceGroup)
void cmDSPMakefile::WriteDSPFile(std::ostream& fout,
const char *libName,
- cmTarget &target)
+ cmTarget &target,
+ const std::string &libOptions)
{
// Write the DSP file's header.
- this->WriteDSPHeader(fout, libName);
+ this->WriteDSPHeader(fout, libName, libOptions);
// We may be modifying the source groups temporarily, so make a copy.
std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
@@ -399,7 +404,8 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName)
}
}
-void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName)
+void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName,
+ const std::string &libOptions)
{
std::ifstream fin(m_DSPHeaderTemplate.c_str());
if(!fin)
@@ -413,12 +419,12 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName)
fin.getline(buffer, 2048);
std::string line = buffer;
cmSystemTools::ReplaceString(line, "CM_LIBRARIES",
- m_LibraryOptions.c_str());
+ libOptions.c_str());
cmSystemTools::ReplaceString(line, "BUILD_INCLUDES",
- m_IncludeOptions.c_str());
+ m_IncludeOptions.c_str());
cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName);
cmSystemTools::ReplaceString(line,
- "EXTRA_DEFINES",
+ "EXTRA_DEFINES",
m_Makefile->GetDefineFlags());
fout << line.c_str() << std::endl;
}
diff --git a/Source/cmDSPWriter.h b/Source/cmDSPWriter.h
index 4aac519..d231d16 100644
--- a/Source/cmDSPWriter.h
+++ b/Source/cmDSPWriter.h
@@ -67,14 +67,16 @@ private:
std::string m_DSPFooterTemplate;
std::vector<std::string> m_CreatedProjectNames;
- void CreateSingleDSP(const char *lname, cmTarget &tgt);
- void WriteDSPFile(std::ostream& fout,
- const char *libName, cmTarget &tgt);
+ void CreateSingleDSP(const char *lname, cmTarget &tgt,
+ const std::string &libs);
+ void WriteDSPFile(std::ostream& fout, const char *libName,
+ cmTarget &tgt, const std::string &libs);
void WriteDSPBeginGroup(std::ostream& fout,
const char* group,
const char* filter);
void WriteDSPEndGroup(std::ostream& fout);
- void WriteDSPHeader(std::ostream& fout, const char *libName);
+ void WriteDSPHeader(std::ostream& fout, const char *libName,
+ const std::string &libs);
void WriteDSPBuildRule(std::ostream& fout, const char*);
void WriteDSPBuildRule(std::ostream& fout);
void WriteDSPFooter(std::ostream& fout);
@@ -85,7 +87,6 @@ private:
const std::set<std::string>& outputs);
std::string m_IncludeOptions;
- std::string m_LibraryOptions;
cmMakefile* m_Makefile;
BuildType m_LibraryBuildType;
std::vector<std::string> m_Configurations;
diff --git a/Source/cmFindFileCommand.cxx b/Source/cmFindFileCommand.cxx
index 39f1371..a5a679a 100644
--- a/Source/cmFindFileCommand.cxx
+++ b/Source/cmFindFileCommand.cxx
@@ -38,7 +38,10 @@ bool cmFindFileCommand::Invoke(std::vector<std::string>& args)
= cmCacheManager::GetInstance()->GetCacheValue(define);
if(cacheValue)
{
- m_Makefile->AddDefinition(define, cacheValue);
+ if(strcmp(cacheValue, "NOTFOUND") != 0)
+ {
+ m_Makefile->AddDefinition(define, cacheValue);
+ }
return true;
}
// if it is not in the cache, then search the system path
diff --git a/Source/cmFindIncludeCommand.cxx b/Source/cmFindIncludeCommand.cxx
index 645ed0d..7ffd4c9 100644
--- a/Source/cmFindIncludeCommand.cxx
+++ b/Source/cmFindIncludeCommand.cxx
@@ -34,11 +34,20 @@ bool cmFindIncludeCommand::Invoke(std::vector<std::string>& args)
{
m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
}
+ cacheValue
+ = cmCacheManager::GetInstance()->GetCacheValue(args[1].c_str());
+ if(cacheValue)
+ {
+ if(strcmp(cacheValue, "NOTFOUND") != 0)
+ {
+ m_Makefile->AddDefinition(args[1].c_str(), cacheValue);
+ }
+ }
return true;
}
std::vector<std::string> path;
// add any user specified paths
- for (unsigned int j = 2; j < args.size(); j++)
+ for (unsigned int j = 3; j < args.size(); j++)
{
// expand variables
std::string exp = args[j];
@@ -53,20 +62,27 @@ bool cmFindIncludeCommand::Invoke(std::vector<std::string>& args)
{
std::string tryPath = path[k];
tryPath += "/";
- tryPath += args[1];
+ tryPath += args[2];
if(cmSystemTools::FileExists(tryPath.c_str()))
{
- m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
// Save the value in the cache
+ m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
path[k].c_str(),
cmCacheManager::PATH);
+ m_Makefile->AddDefinition(args[1].c_str(), args[2].c_str());
+ cmCacheManager::GetInstance()->AddCacheEntry(args[1].c_str(),
+ args[2].c_str(),
+ cmCacheManager::PATH);
return true;
}
}
cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
"NOTFOUND",
cmCacheManager::PATH);
+ cmCacheManager::GetInstance()->AddCacheEntry(args[1].c_str(),
+ "NOTFOUND",
+ cmCacheManager::PATH);
std::string message = "Include not found: ";
message += args[1];
message += "\n";
diff --git a/Source/cmFindIncludeCommand.h b/Source/cmFindIncludeCommand.h
index f3f6dcf..3c48922 100644
--- a/Source/cmFindIncludeCommand.h
+++ b/Source/cmFindIncludeCommand.h
@@ -68,7 +68,9 @@ public:
virtual const char* GetFullDocumentation()
{
return
- "FIND_INCLUDE(DEFINE include extraPath1 extraPath2 ...)";
+ "FIND_INCLUDE(DEFINE_PATH DEFINE_INCLUDE includeName extraPath1 extraPath2 ...)\n"
+ "If the include file is found, then DEFINE_PATH is set to the path\n"
+ "where it was found and DEFINE_NAME is set to includeName";
}
cmTypeMacro(cmFindIncludeCommand, cmCommand);
diff --git a/Source/cmFindLibraryCommand.cxx b/Source/cmFindLibraryCommand.cxx
index 1504af6..6587f06 100644
--- a/Source/cmFindLibraryCommand.cxx
+++ b/Source/cmFindLibraryCommand.cxx
@@ -19,7 +19,7 @@
// cmFindLibraryCommand
bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
{
- if(args.size() < 2 )
+ if(args.size() < 2)
{
this->SetError("called with incorrect number of arguments");
return false;
@@ -36,6 +36,7 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
}
return true;
}
+
std::vector<std::string> path;
// add any user specified paths
for (unsigned int j = 2; j < args.size(); j++)
@@ -53,8 +54,36 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
{
std::string tryPath = path[k];
tryPath += "/";
- tryPath += args[1];
- if(cmSystemTools::FileExists(tryPath.c_str()))
+ std::string testF;
+ testF = tryPath + args[1] + ".lib";
+ if(cmSystemTools::FileExists(testF.c_str()))
+ {
+ m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
+ cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+ path[k].c_str(),
+ cmCacheManager::PATH);
+ return true;
+ }
+ testF = tryPath + "lib" + args[1] + ".so";
+ if(cmSystemTools::FileExists(testF.c_str()))
+ {
+ m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
+ cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+ path[k].c_str(),
+ cmCacheManager::PATH);
+ return true;
+ }
+ testF = tryPath + "lib" + args[1] + ".a";
+ if(cmSystemTools::FileExists(testF.c_str()))
+ {
+ m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
+ cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+ path[k].c_str(),
+ cmCacheManager::PATH);
+ return true;
+ }
+ testF = tryPath + "lib" + args[1] + ".sl";
+ if(cmSystemTools::FileExists(testF.c_str()))
{
m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
diff --git a/Source/cmFindLibraryCommand.h b/Source/cmFindLibraryCommand.h
index f1e26a2..6f01f62 100644
--- a/Source/cmFindLibraryCommand.h
+++ b/Source/cmFindLibraryCommand.h
@@ -69,7 +69,8 @@ public:
virtual const char* GetFullDocumentation()
{
return
- "FIND_LIBRARY(DEFINE libraryName path1 path2 path3...)";
+ "FIND_LIBRARY(DEFINE_PATH libraryName path1 path2 path3...)\n"
+ "If the library is found, then DEFINE_PATH is set to the path where it was found";
}
cmTypeMacro(cmFindLibraryCommand, cmCommand);
diff --git a/Source/cmFindPathCommand.cxx b/Source/cmFindPathCommand.cxx
new file mode 100644
index 0000000..5235ae2
--- /dev/null
+++ b/Source/cmFindPathCommand.cxx
@@ -0,0 +1,74 @@
+/*=========================================================================
+
+ Program: Insight Segmentation & Registration Toolkit
+ Module: $RCSfile$
+ Language: C++
+ Date: $Date$
+ Version: $Revision$
+
+
+ Copyright (c) 2000 National Path of Medicine
+ All rights reserved.
+
+ See COPYRIGHT.txt for copyright details.
+
+=========================================================================*/
+#include "cmFindPathCommand.h"
+#include "cmCacheManager.h"
+
+// cmFindPathCommand
+bool cmFindPathCommand::Invoke(std::vector<std::string>& args)
+{
+ if(args.size() < 2)
+ {
+ this->SetError("called with incorrect number of arguments");
+ return false;
+ }
+
+ // 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(args[0].c_str());
+ if(cacheValue)
+ {
+ if(strcmp(cacheValue, "NOTFOUND") != 0)
+ {
+ m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
+ }
+ return true;
+ }
+
+ std::vector<std::string> path;
+ // add any user specified paths
+ for (unsigned int j = 2; j < args.size(); j++)
+ {
+ // expand variables
+ std::string exp = args[j];
+ m_Makefile->ExpandVariablesInString(exp);
+ path.push_back(exp);
+ }
+
+ // add the standard path
+ cmSystemTools::GetPath(path);
+ unsigned int k;
+ for(k=0; k < path.size(); k++)
+ {
+ std::string tryPath = path[k];
+ tryPath += "/";
+ tryPath += args[1];
+ if(cmSystemTools::FileExists(tryPath.c_str()))
+ {
+ m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str());
+ cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+ path[k].c_str(),
+ cmCacheManager::PATH);
+ return true;
+ }
+ }
+
+ cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+ "NOTFOUND",
+ cmCacheManager::PATH);
+ return true;
+}
+
diff --git a/Source/cmFindPathCommand.h b/Source/cmFindPathCommand.h
new file mode 100644
index 0000000..a01a4bb
--- /dev/null
+++ b/Source/cmFindPathCommand.h
@@ -0,0 +1,81 @@
+/*=========================================================================
+
+ Program: Insight Segmentation & Registration Toolkit
+ Module: $RCSfile$
+ Language: C++
+ Date: $Date$
+ Version: $Revision$
+
+
+ Copyright (c) 2000 National Path of Medicine
+ All rights reserved.
+
+ See COPYRIGHT.txt for copyright details.
+
+=========================================================================*/
+#ifndef cmFindPathCommand_h
+#define cmFindPathCommand_h
+
+#include "cmStandardIncludes.h"
+#include "cmCommand.h"
+
+
+/** \class cmFindPathCommand
+ * \brief Define a command to search for a library.
+ *
+ * cmFindPathCommand is used to define a CMake variable
+ * that specifies a library. The command searches for a given
+ * file in a list of directories.
+ */
+class cmFindPathCommand : public cmCommand
+{
+public:
+ /**
+ * This is a virtual constructor for the command.
+ */
+ virtual cmCommand* Clone()
+ {
+ return new cmFindPathCommand;
+ }
+
+ /**
+ * This is called when the command is first encountered in
+ * the CMakeLists.txt file.
+ */
+ virtual bool Invoke(std::vector<std::string>& args);
+
+ /**
+ * This determines if the command gets propagated down
+ * to makefiles located in subdirectories.
+ */
+ virtual bool IsInherited() {return true;}
+
+ /**
+ * The name of the command as specified in CMakeList.txt.
+ */
+ virtual const char* GetName() {return "FIND_PATH";}
+
+ /**
+ * Succinct documentation.
+ */
+ virtual const char* GetTerseDocumentation()
+ {
+ return "Find a path for a file.";
+ }
+
+ /**
+ * More documentation.
+ */
+ virtual const char* GetFullDocumentation()
+ {
+ return
+ "FIND_PATH(PATH_DEFINE fileName path1 path2 path3...)\n"
+ "If the file is found, then PATH_DEFINE is set to the path where it was found";
+ }
+
+ cmTypeMacro(cmFindPathCommand, cmCommand);
+};
+
+
+
+#endif
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 41f167c..6446f98 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -128,8 +128,6 @@ void cmMakefile::Print() const
this->PrintStringVector("m_IncludeDirectories;", m_IncludeDirectories);
this->PrintStringVector("m_LinkDirectories", m_LinkDirectories);
this->PrintStringVector("m_LinkLibraries", m_LinkLibraries);
- this->PrintStringVector("m_LinkLibrariesWin32", m_LinkLibrariesWin32);
- this->PrintStringVector("m_LinkLibrariesUnix", m_LinkLibrariesUnix);
this->PrintStringVector("m_Utilities", m_Utilities);
this->PrintStringVector("m_UtilityDirectories", m_UtilityDirectories);
}
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 221bd24..a8930b0 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -341,22 +341,6 @@ public:
}
/**
- * Get a list of Win32 link libraries in the build.
- */
- std::vector<std::string>& GetLinkLibrariesWin32()
- {
- return m_LinkLibrariesWin32;
- }
-
- /**
- * Get a list of Unix link libraries in the build.
- */
- std::vector<std::string>& GetLinkLibrariesUnix()
- {
- return m_LinkLibrariesUnix;
- }
-
- /**
* Return a list of source files in this makefile.
*/
typedef std::map<std::string,std::vector<cmSourceFile> > SourceMap;
@@ -463,8 +447,6 @@ protected:
std::vector<std::string> m_Utilities;
std::vector<std::string> m_UtilityDirectories;
std::vector<std::string> m_LinkLibraries;
- std::vector<std::string> m_LinkLibrariesWin32;
- std::vector<std::string> m_LinkLibrariesUnix;
std::string m_IncludeFileRegularExpression;
std::string m_DefineFlags;
std::vector<cmSourceGroup> m_SourceGroups;
diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx
index 589e4b1..08392f2 100644
--- a/Source/cmUnixMakefileGenerator.cxx
+++ b/Source/cmUnixMakefileGenerator.cxx
@@ -154,13 +154,6 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
// For executables, add these a second time so order does not matter
linkLibs += librariesLinked;
}
-
- std::vector<std::string>& libsUnix = m_Makefile->GetLinkLibrariesUnix();
- for(j = libsUnix.begin(); j != libsUnix.end(); ++j)
- {
- linkLibs += *j;
- linkLibs += " ";
- }
linkLibs += " ${LOCAL_LINK_FLAGS} ";
fout << linkLibs;
}