BUG: fix for broken apple mkdir and general clean up of MakeDirectory command
This commit is contained in:
parent
98b4ea2609
commit
c7bd083549
@ -135,6 +135,10 @@ const char* cmSystemTools::GetExecutableExtension()
|
|||||||
|
|
||||||
bool cmSystemTools::MakeDirectory(const char* path)
|
bool cmSystemTools::MakeDirectory(const char* path)
|
||||||
{
|
{
|
||||||
|
if(cmSystemTools::FileExists(path))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
std::string dir = path;
|
std::string dir = path;
|
||||||
|
|
||||||
cmSystemTools::ConvertToUnixSlashes(dir);
|
cmSystemTools::ConvertToUnixSlashes(dir);
|
||||||
@ -144,29 +148,36 @@ bool cmSystemTools::MakeDirectory(const char* path)
|
|||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
}
|
}
|
||||||
|
std::string topdir;
|
||||||
while((pos = dir.find('/', pos)) != std::string::npos)
|
while((pos = dir.find('/', pos)) != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string topdir = dir.substr(0, pos);
|
topdir = dir.substr(0, pos);
|
||||||
Mkdir(topdir.c_str());
|
Mkdir(topdir.c_str());
|
||||||
pos++;
|
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
|
// There is a bug in the Borland Run time library which makes MKDIR
|
||||||
// return EACCES when it should return EEXISTS
|
// 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
|
// if it is some other error besides directory exists
|
||||||
// then return false
|
// then return false
|
||||||
if(errno != EEXIST)
|
if( (errno != EEXIST)
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
&& (errno != EACCES)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
cmSystemTools::Error("Faild to create directory:", path);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -59,26 +59,42 @@ void cmUnixMakefileGenerator::GenerateMakefile()
|
|||||||
if (m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH"))
|
if (m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH"))
|
||||||
{
|
{
|
||||||
m_LibraryOutputPath = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
|
m_LibraryOutputPath = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
|
||||||
if(m_LibraryOutputPath.size() &&
|
if(m_LibraryOutputPath.size())
|
||||||
m_LibraryOutputPath[m_LibraryOutputPath.size() -1] != '/')
|
|
||||||
{
|
{
|
||||||
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"))
|
if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"))
|
||||||
{
|
{
|
||||||
m_ExecutableOutputPath = m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
|
m_ExecutableOutputPath =
|
||||||
if(m_ExecutableOutputPath.size() &&
|
m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
|
||||||
m_ExecutableOutputPath[m_ExecutableOutputPath.size() -1] != '/')
|
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)
|
if(m_CacheOnly)
|
||||||
{
|
{
|
||||||
// Generate the cache only stuff
|
// Generate the cache only stuff
|
||||||
|
Loading…
x
Reference in New Issue
Block a user