ENH: better algorithm for looking for make and gcc on msys and mingw

This commit is contained in:
Bill Hoffman 2006-02-15 21:26:47 -05:00
parent 5288d61ede
commit 5042581f43
4 changed files with 29 additions and 29 deletions

View File

@ -1,2 +1,6 @@
FIND_PROGRAM(CMAKE_MAKE_PROGRAM make PATHS c:/msys/1.0/bin /msys/1.0/bin)
FIND_PROGRAM(CMAKE_MAKE_PROGRAM make
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MSYS-1.0_is1;Inno Setup: App Path]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin"
c:/msys/1.0/bin /msys/1.0/bin)
MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM)

View File

@ -1,8 +1,10 @@
FIND_PROGRAM(CMAKE_MAKE_PROGRAM mingw32-make.exe PATHS c:/MinGW/bin /MinGW/bin)
FIND_PROGRAM(CMAKE_MAKE_PROGRAM mingw32-make.exe PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin"
c:/MinGW/bin /MinGW/bin)
FIND_PROGRAM(CMAKE_SH sh.exe )
MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM CMAKE_SH)
IF(CMAKE_SH)
MESSAGE(FATAL_ERROR "sh.exe was found in your PATH, here:\n${CMAKE_SH}\nFor MinGW make to work correctly sh.exe must NOT be in your path.\nRun cmake from a shell that does not have sh.exe in your PATH.\nIf you want to use a UNIX shell, then use MSYS Makefiles.\n")
SET(CMAKE_MAKE_PROGRAM NOTFOUND)
ENDIF(CMAKE_SH)
MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM CMAKE_SH)

View File

@ -32,24 +32,21 @@ void cmGlobalMSYSMakefileGenerator::EnableLanguage(std::vector<std::string>const
std::string makeProgram = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
std::vector<std::string> locations;
locations.push_back(cmSystemTools::GetProgramPath(makeProgram.c_str()));
locations.push_back("c:/mingw/bin");
locations.push_back("/mingw/bin");
locations.push_back("/msys/1.0/bin");
locations.push_back("c:/mingw/bin");
locations.push_back("C:/msys/1.0/bin");
std::string tgcc = cmSystemTools::FindProgram("gcc", locations);
std::string gcc = "gcc.exe";
std::string gxx = "g++.exe";
std::string slash = "/";
for(std::vector<std::string>::iterator i = locations.begin();
i != locations.end(); ++i)
if(tgcc.size())
{
std::string tgcc = *i + slash + gcc;
std::string tgxx = *i + slash + gxx;
if(cmSystemTools::FileExists(tgcc.c_str()))
{
gcc = tgcc;
gxx = tgxx;
break;
}
gcc = tgcc;
}
std::string tgxx = cmSystemTools::FindProgram("g++", locations);
std::string gxx = "g++.exe";
if(tgxx.size())
{
gxx = tgxx;
}
mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());

View File

@ -32,22 +32,19 @@ void cmGlobalMinGWMakefileGenerator::EnableLanguage(std::vector<std::string>cons
std::string makeProgram = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
std::vector<std::string> locations;
locations.push_back(cmSystemTools::GetProgramPath(makeProgram.c_str()));
locations.push_back("c:/mingw/bin");
locations.push_back("/mingw/bin");
locations.push_back("c:/mingw/bin");
std::string tgcc = cmSystemTools::FindProgram("gcc", locations);
std::string gcc = "gcc.exe";
std::string gxx = "g++.exe";
std::string slash = "/";
for(std::vector<std::string>::iterator i = locations.begin();
i != locations.end(); ++i)
if(tgcc.size())
{
std::string tgcc = *i + slash + gcc;
std::string tgxx = *i + slash + gxx;
if(cmSystemTools::FileExists(tgcc.c_str()))
{
gcc = tgcc;
gxx = tgxx;
break;
}
gcc = tgcc;
}
std::string tgxx = cmSystemTools::FindProgram("g++", locations);
std::string gxx = "g++.exe";
if(tgxx.size())
{
gxx = tgxx;
}
mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());