summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2001-08-28 14:57:25 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2001-08-28 14:57:25 (GMT)
commitc7bd083549ab5ff7c14884dd6fd309ea9ccaa16b (patch)
tree221266788410d300793798901b6985f91d1001cd /Source
parent98b4ea2609793d57e0fe8ea68d7e8b97bb4802e4 (diff)
downloadCMake-c7bd083549ab5ff7c14884dd6fd309ea9ccaa16b.zip
CMake-c7bd083549ab5ff7c14884dd6fd309ea9ccaa16b.tar.gz
CMake-c7bd083549ab5ff7c14884dd6fd309ea9ccaa16b.tar.bz2
BUG: fix for broken apple mkdir and general clean up of MakeDirectory command
Diffstat (limited to 'Source')
-rw-r--r--Source/cmSystemTools.cxx31
-rw-r--r--Source/cmUnixMakefileGenerator.cxx38
2 files changed, 48 insertions, 21 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 5020969..72ffca0 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -135,6 +135,10 @@ const char* cmSystemTools::GetExecutableExtension()
bool cmSystemTools::MakeDirectory(const char* path)
{
+ if(cmSystemTools::FileExists(path))
+ {
+ return true;
+ }
std::string dir = path;
cmSystemTools::ConvertToUnixSlashes(dir);
@@ -144,29 +148,36 @@ bool cmSystemTools::MakeDirectory(const char* path)
{
pos = 0;
}
+ std::string topdir;
while((pos = dir.find('/', pos)) != std::string::npos)
{
- std::string topdir = dir.substr(0, pos);
+ topdir = dir.substr(0, pos);
Mkdir(topdir.c_str());
pos++;
}
- if(Mkdir(path) != 0)
+ if(topdir[dir.size()] == '/')
+ {
+ topdir = dir.substr(0, dir.size());
+ }
+ else
+ {
+ topdir = dir;
+ }
+ if(Mkdir(topdir.c_str()) != 0)
{
// There is a bug in the Borland Run time library which makes MKDIR
// return EACCES when it should return EEXISTS
- #ifdef __BORLANDC__
- if( (errno != EEXIST) && (errno != EACCES) )
- {
- return false;
- }
- #else
// if it is some other error besides directory exists
// then return false
- if(errno != EEXIST)
+ if( (errno != EEXIST)
+#ifdef __BORLANDC__
+ && (errno != EACCES)
+#endif
+ )
{
+ cmSystemTools::Error("Faild to create directory:", path);
return false;
}
- #endif
}
return true;
}
diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx
index d93b803..eb985e1 100644
--- a/Source/cmUnixMakefileGenerator.cxx
+++ b/Source/cmUnixMakefileGenerator.cxx
@@ -59,25 +59,41 @@ void cmUnixMakefileGenerator::GenerateMakefile()
if (m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH"))
{
m_LibraryOutputPath = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
- if(m_LibraryOutputPath.size() &&
- m_LibraryOutputPath[m_LibraryOutputPath.size() -1] != '/')
+ if(m_LibraryOutputPath.size())
{
- m_LibraryOutputPath += "/";
+ if(m_LibraryOutputPath[m_LibraryOutputPath.size() -1] != '/')
+ {
+ m_LibraryOutputPath += "/";
+ }
+ if(!cmSystemTools::MakeDirectory(m_LibraryOutputPath.c_str()))
+ {
+ cmSystemTools::Error("Error failed create "
+ "LIBRARY_OUTPUT_PATH directory:",
+ m_LibraryOutputPath.c_str());
+ }
+ m_Makefile->AddLinkDirectory(m_LibraryOutputPath.c_str());
}
- cmSystemTools::MakeDirectory(m_LibraryOutputPath.c_str());
- m_Makefile->AddLinkDirectory(m_LibraryOutputPath.c_str());
}
if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"))
{
- m_ExecutableOutputPath = m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
- if(m_ExecutableOutputPath.size() &&
- m_ExecutableOutputPath[m_ExecutableOutputPath.size() -1] != '/')
+ m_ExecutableOutputPath =
+ m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
+ if(m_ExecutableOutputPath.size())
{
- m_ExecutableOutputPath += "/";
+ if(m_ExecutableOutputPath[m_ExecutableOutputPath.size() -1] != '/')
+ {
+ m_ExecutableOutputPath += "/";
+ }
+ if(!cmSystemTools::MakeDirectory(m_ExecutableOutputPath.c_str()))
+ {
+ cmSystemTools::Error("Error failed to create "
+ "EXECUTABLE_OUTPUT_PATH directory:",
+ m_ExecutableOutputPath.c_str());
+ }
+ m_Makefile->AddLinkDirectory(m_ExecutableOutputPath.c_str());
}
- cmSystemTools::MakeDirectory(m_ExecutableOutputPath.c_str());
- m_Makefile->AddLinkDirectory(m_ExecutableOutputPath.c_str());
}
+
if(m_CacheOnly)
{