changed cache manager and registered generators to no longer be singletons
This commit is contained in:
parent
4855fe5c10
commit
d0be2896d7
|
@ -78,8 +78,6 @@ BOOL CMakeSetup::InitInstance()
|
||||||
|
|
||||||
// clean up globals
|
// clean up globals
|
||||||
cmListFileCache::GetInstance()->ClearCache();
|
cmListFileCache::GetInstance()->ClearCache();
|
||||||
cmMakefileGenerator::UnRegisterGenerators();
|
|
||||||
cmCacheManager::DeleteInstance();
|
|
||||||
// Since the dialog has been closed, return FALSE so that we exit the
|
// Since the dialog has been closed, return FALSE so that we exit the
|
||||||
// application, rather than start the application's message pump.
|
// application, rather than start the application's message pump.
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -110,6 +110,7 @@ CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
|
||||||
{
|
{
|
||||||
cmSystemTools::SetErrorCallback(MFCMessageCallback);
|
cmSystemTools::SetErrorCallback(MFCMessageCallback);
|
||||||
m_RegistryKey = "Software\\Kitware\\CMakeSetup\\Settings\\StartPath";
|
m_RegistryKey = "Software\\Kitware\\CMakeSetup\\Settings\\StartPath";
|
||||||
|
m_CacheEntriesList.m_CMakeSetupDialog = this;
|
||||||
|
|
||||||
//{{AFX_DATA_INIT(CMakeSetupDialog)
|
//{{AFX_DATA_INIT(CMakeSetupDialog)
|
||||||
// Get the parameters from the command line info
|
// Get the parameters from the command line info
|
||||||
|
@ -145,6 +146,7 @@ CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
|
||||||
|
|
||||||
m_oldCX = -1;
|
m_oldCX = -1;
|
||||||
m_deltaXRemainder = 0;
|
m_deltaXRemainder = 0;
|
||||||
|
m_CMakeInstance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX)
|
void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX)
|
||||||
|
@ -243,9 +245,9 @@ BOOL CMakeSetupDialog::OnInitDialog()
|
||||||
SetIcon(m_hIcon, FALSE); // Set small icon
|
SetIcon(m_hIcon, FALSE); // Set small icon
|
||||||
// Load source and build dirs from registry
|
// Load source and build dirs from registry
|
||||||
this->LoadFromRegistry();
|
this->LoadFromRegistry();
|
||||||
cmake m; // force a register of generators
|
this->m_CMakeInstance = new cmake;
|
||||||
std::vector<std::string> names;
|
std::vector<std::string> names;
|
||||||
cmMakefileGenerator::GetRegisteredGenerators(names);
|
this->m_CMakeInstance->GetRegisteredGenerators(names);
|
||||||
for(std::vector<std::string>::iterator i = names.begin();
|
for(std::vector<std::string>::iterator i = names.begin();
|
||||||
i != names.end(); ++i)
|
i != names.end(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -558,11 +560,16 @@ void CMakeSetupDialog::RunCMake(bool generateProjectFiles)
|
||||||
this->UpdateData();
|
this->UpdateData();
|
||||||
// always save the current gui values to disk
|
// always save the current gui values to disk
|
||||||
this->SaveCacheFromGUI();
|
this->SaveCacheFromGUI();
|
||||||
|
// free the old cmake and create a new one here
|
||||||
|
if (this->m_CMakeInstance)
|
||||||
|
{
|
||||||
|
delete this->m_CMakeInstance;
|
||||||
|
this->m_CMakeInstance = 0;
|
||||||
|
}
|
||||||
|
this->m_CMakeInstance = new cmake;
|
||||||
// Make sure we are working from the cache on disk
|
// Make sure we are working from the cache on disk
|
||||||
this->LoadCacheFromDiskToGUI();
|
this->LoadCacheFromDiskToGUI();
|
||||||
m_OKButton.EnableWindow(false);
|
m_OKButton.EnableWindow(false);
|
||||||
// create a cmake object
|
|
||||||
cmake make;
|
|
||||||
// create the arguments for the cmake object
|
// create the arguments for the cmake object
|
||||||
std::vector<std::string> args;
|
std::vector<std::string> args;
|
||||||
args.push_back((const char*)m_PathToExecutable);
|
args.push_back((const char*)m_PathToExecutable);
|
||||||
|
@ -577,7 +584,7 @@ void CMakeSetupDialog::RunCMake(bool generateProjectFiles)
|
||||||
arg += m_GeneratorChoiceString;
|
arg += m_GeneratorChoiceString;
|
||||||
args.push_back(arg);
|
args.push_back(arg);
|
||||||
// run the generate process
|
// run the generate process
|
||||||
if(make.Generate(args, generateProjectFiles) != 0)
|
if(this->m_CMakeInstance->Generate(args, generateProjectFiles) != 0)
|
||||||
{
|
{
|
||||||
cmSystemTools::Error(
|
cmSystemTools::Error(
|
||||||
"Error in generation process, project files may be invalid");
|
"Error in generation process, project files may be invalid");
|
||||||
|
@ -643,14 +650,14 @@ void CMakeSetupDialog::OnChangeWhereBuild()
|
||||||
std::string cache_file = path;
|
std::string cache_file = path;
|
||||||
cache_file += "/CMakeCache.txt";
|
cache_file += "/CMakeCache.txt";
|
||||||
|
|
||||||
cmCacheManager *cache = cmCacheManager::GetInstance();
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
|
|
||||||
if (cmSystemTools::FileExists(cache_file.c_str()) &&
|
if (cmSystemTools::FileExists(cache_file.c_str()) &&
|
||||||
cache->LoadCache(path.c_str()) &&
|
cachem->LoadCache(path.c_str()) &&
|
||||||
cache->GetCacheEntry("CMAKE_HOME_DIRECTORY"))
|
cachem->GetCacheEntry("CMAKE_HOME_DIRECTORY"))
|
||||||
{
|
{
|
||||||
path = ConvertToWindowsPath(
|
path = ConvertToWindowsPath(
|
||||||
cache->GetCacheEntry("CMAKE_HOME_DIRECTORY")->m_Value.c_str());
|
cachem->GetCacheEntry("CMAKE_HOME_DIRECTORY")->m_Value.c_str());
|
||||||
this->m_WhereSource = path.c_str();
|
this->m_WhereSource = path.c_str();
|
||||||
this->m_WhereSourceControl.SetWindowText(this->m_WhereSource);
|
this->m_WhereSourceControl.SetWindowText(this->m_WhereSource);
|
||||||
this->OnChangeWhereSource();
|
this->OnChangeWhereSource();
|
||||||
|
@ -666,6 +673,7 @@ void CMakeSetupDialog::OnChangeWhereBuild()
|
||||||
// copy from the cache manager to the cache edit list box
|
// copy from the cache manager to the cache edit list box
|
||||||
void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
||||||
{
|
{
|
||||||
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
size_t size = m_CacheEntriesList.GetItems().size();
|
size_t size = m_CacheEntriesList.GetItems().size();
|
||||||
bool reverseOrder = false;
|
bool reverseOrder = false;
|
||||||
// if there are already entries in the cache, then
|
// if there are already entries in the cache, then
|
||||||
|
@ -683,7 +691,7 @@ void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
||||||
CPropertyItem* item = *i;
|
CPropertyItem* item = *i;
|
||||||
item->m_NewValue = false;
|
item->m_NewValue = false;
|
||||||
}
|
}
|
||||||
for(cmCacheManager::CacheIterator i = cmCacheManager::GetInstance()->NewIterator();
|
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||||
!i.IsAtEnd(); i.Next())
|
!i.IsAtEnd(); i.Next())
|
||||||
{
|
{
|
||||||
const char* key = i.GetName();
|
const char* key = i.GetName();
|
||||||
|
@ -700,7 +708,7 @@ void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
||||||
|
|
||||||
if(!m_AdvancedValues)
|
if(!m_AdvancedValues)
|
||||||
{
|
{
|
||||||
if(cmCacheManager::GetInstance()->IsAdvanced(key))
|
if(cachem->IsAdvanced(key))
|
||||||
{
|
{
|
||||||
m_CacheEntriesList.RemoveProperty(key);
|
m_CacheEntriesList.RemoveProperty(key);
|
||||||
continue;
|
continue;
|
||||||
|
@ -758,7 +766,7 @@ void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_OKButton.EnableWindow(false);
|
m_OKButton.EnableWindow(false);
|
||||||
if(cmCacheManager::GetInstance()->GetSize() > 0 && !cmSystemTools::GetErrorOccuredFlag())
|
if(cachem->GetSize() > 0 && !cmSystemTools::GetErrorOccuredFlag())
|
||||||
{
|
{
|
||||||
bool enable = true;
|
bool enable = true;
|
||||||
items = m_CacheEntriesList.GetItems();
|
items = m_CacheEntriesList.GetItems();
|
||||||
|
@ -787,13 +795,13 @@ void CMakeSetupDialog::FillCacheGUIFromCacheManager()
|
||||||
// copy from the list box to the cache manager
|
// copy from the list box to the cache manager
|
||||||
void CMakeSetupDialog::FillCacheManagerFromCacheGUI()
|
void CMakeSetupDialog::FillCacheManagerFromCacheGUI()
|
||||||
{
|
{
|
||||||
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
std::set<CPropertyItem*> items = m_CacheEntriesList.GetItems();
|
std::set<CPropertyItem*> items = m_CacheEntriesList.GetItems();
|
||||||
for(std::set<CPropertyItem*>::iterator i = items.begin();
|
for(std::set<CPropertyItem*>::iterator i = items.begin();
|
||||||
i != items.end(); ++i)
|
i != items.end(); ++i)
|
||||||
{
|
{
|
||||||
CPropertyItem* item = *i;
|
CPropertyItem* item = *i;
|
||||||
cmCacheManager::CacheEntry *entry =
|
cmCacheManager::CacheEntry *entry = cachem->GetCacheEntry(
|
||||||
cmCacheManager::GetInstance()->GetCacheEntry(
|
|
||||||
(const char*)item->m_propName);
|
(const char*)item->m_propName);
|
||||||
if (entry)
|
if (entry)
|
||||||
{
|
{
|
||||||
|
@ -820,14 +828,15 @@ void CMakeSetupDialog::FillCacheManagerFromCacheGUI()
|
||||||
//! Load cache file from m_WhereBuild and display in GUI editor
|
//! Load cache file from m_WhereBuild and display in GUI editor
|
||||||
void CMakeSetupDialog::LoadCacheFromDiskToGUI()
|
void CMakeSetupDialog::LoadCacheFromDiskToGUI()
|
||||||
{
|
{
|
||||||
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
if(m_WhereBuild != "")
|
if(m_WhereBuild != "")
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->LoadCache(m_WhereBuild);
|
cachem->LoadCache(m_WhereBuild);
|
||||||
this->FillCacheGUIFromCacheManager();
|
this->FillCacheGUIFromCacheManager();
|
||||||
if(cmCacheManager::GetInstance()->GetCacheEntry("CMAKE_GENERATOR"))
|
if(cachem->GetCacheEntry("CMAKE_GENERATOR"))
|
||||||
{
|
{
|
||||||
std::string curGen =
|
std::string curGen =
|
||||||
cmCacheManager::GetInstance()->GetCacheEntry("CMAKE_GENERATOR")->m_Value;
|
cachem->GetCacheEntry("CMAKE_GENERATOR")->m_Value;
|
||||||
if(m_GeneratorChoiceString != curGen.c_str())
|
if(m_GeneratorChoiceString != curGen.c_str())
|
||||||
{
|
{
|
||||||
m_GeneratorChoiceString = curGen.c_str();
|
m_GeneratorChoiceString = curGen.c_str();
|
||||||
|
@ -840,10 +849,11 @@ void CMakeSetupDialog::LoadCacheFromDiskToGUI()
|
||||||
//! Save GUI values to cmCacheManager and then save to disk.
|
//! Save GUI values to cmCacheManager and then save to disk.
|
||||||
void CMakeSetupDialog::SaveCacheFromGUI()
|
void CMakeSetupDialog::SaveCacheFromGUI()
|
||||||
{
|
{
|
||||||
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
this->FillCacheManagerFromCacheGUI();
|
this->FillCacheManagerFromCacheGUI();
|
||||||
if(m_WhereBuild != "")
|
if(m_WhereBuild != "")
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->SaveCache(m_WhereBuild);
|
cachem->SaveCache(m_WhereBuild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,7 +968,6 @@ void CMakeSetupDialog::OnOk()
|
||||||
cmSystemTools::EnableMessages();
|
cmSystemTools::EnableMessages();
|
||||||
m_CacheEntriesList.ClearDirty();
|
m_CacheEntriesList.ClearDirty();
|
||||||
this->RunCMake(true);
|
this->RunCMake(true);
|
||||||
cmMakefileGenerator::UnRegisterGenerators();
|
|
||||||
if (!(::GetKeyState(VK_SHIFT) & 0x1000))
|
if (!(::GetKeyState(VK_SHIFT) & 0x1000))
|
||||||
{
|
{
|
||||||
CDialog::OnOK();
|
CDialog::OnOK();
|
||||||
|
@ -1111,12 +1120,13 @@ void CMakeSetupDialog::OnHelpButton()
|
||||||
|
|
||||||
void CMakeSetupDialog::ShowAdvancedValues()
|
void CMakeSetupDialog::ShowAdvancedValues()
|
||||||
{
|
{
|
||||||
for(cmCacheManager::CacheIterator i = cmCacheManager::GetInstance()->NewIterator();
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
|
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||||
!i.IsAtEnd(); i.Next())
|
!i.IsAtEnd(); i.Next())
|
||||||
{
|
{
|
||||||
const char* key = i.GetName();
|
const char* key = i.GetName();
|
||||||
const cmCacheManager::CacheEntry& value = i.GetEntry();
|
const cmCacheManager::CacheEntry& value = i.GetEntry();
|
||||||
if(!cmCacheManager::GetInstance()->IsAdvanced(key))
|
if(!cachem->IsAdvanced(key))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1175,12 +1185,14 @@ void CMakeSetupDialog::ShowAdvancedValues()
|
||||||
|
|
||||||
void CMakeSetupDialog::RemoveAdvancedValues()
|
void CMakeSetupDialog::RemoveAdvancedValues()
|
||||||
{
|
{
|
||||||
for(cmCacheManager::CacheIterator i = cmCacheManager::GetInstance()->NewIterator();
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
|
|
||||||
|
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||||
!i.IsAtEnd(); i.Next())
|
!i.IsAtEnd(); i.Next())
|
||||||
{
|
{
|
||||||
const char* key = i.GetName();
|
const char* key = i.GetName();
|
||||||
const cmCacheManager::CacheEntry& value = i.GetEntry();
|
const cmCacheManager::CacheEntry& value = i.GetEntry();
|
||||||
if(cmCacheManager::GetInstance()->IsAdvanced(key))
|
if(cachem->IsAdvanced(key))
|
||||||
{
|
{
|
||||||
m_CacheEntriesList.RemoveProperty(key);
|
m_CacheEntriesList.RemoveProperty(key);
|
||||||
}
|
}
|
||||||
|
@ -1229,17 +1241,17 @@ void CMakeSetupDialog::ChangeDirectoriesFromFile(const char* buffer)
|
||||||
std::string cache_file = path;
|
std::string cache_file = path;
|
||||||
cache_file += "/CMakeCache.txt";
|
cache_file += "/CMakeCache.txt";
|
||||||
|
|
||||||
cmCacheManager *cache = cmCacheManager::GetInstance();
|
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
|
||||||
|
|
||||||
if (cmSystemTools::FileExists(cache_file.c_str()) &&
|
if (cmSystemTools::FileExists(cache_file.c_str()) &&
|
||||||
cache->LoadCache(path.c_str()) &&
|
cachem->LoadCache(path.c_str()) &&
|
||||||
cache->GetCacheEntry("CMAKE_HOME_DIRECTORY"))
|
cachem->GetCacheEntry("CMAKE_HOME_DIRECTORY"))
|
||||||
{
|
{
|
||||||
path = ConvertToWindowsPath(path.c_str());
|
path = ConvertToWindowsPath(path.c_str());
|
||||||
this->m_WhereBuild = path.c_str();
|
this->m_WhereBuild = path.c_str();
|
||||||
|
|
||||||
path = ConvertToWindowsPath(
|
path = ConvertToWindowsPath(
|
||||||
cache->GetCacheEntry("CMAKE_HOME_DIRECTORY")->m_Value.c_str());
|
cachem->GetCacheEntry("CMAKE_HOME_DIRECTORY")->m_Value.c_str());
|
||||||
this->m_WhereSource = path.c_str();
|
this->m_WhereSource = path.c_str();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
// CMakeSetupDialog dialog
|
// CMakeSetupDialog dialog
|
||||||
|
|
||||||
class CMakeCommandLineInfo;
|
class CMakeCommandLineInfo;
|
||||||
|
class cmake;
|
||||||
|
|
||||||
class CMakeSetupDialog : public CDialog
|
class CMakeSetupDialog : public CDialog
|
||||||
{
|
{
|
||||||
|
@ -37,6 +38,9 @@ class CMakeSetupDialog : public CDialog
|
||||||
public:
|
public:
|
||||||
CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
|
CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
|
||||||
CWnd* pParent = NULL);
|
CWnd* pParent = NULL);
|
||||||
|
// return the cmake that is currently being used
|
||||||
|
cmake *GetCMakeInstance() {
|
||||||
|
return m_CMakeInstance; }
|
||||||
protected:
|
protected:
|
||||||
//! Load cache file from m_WhereBuild and display in GUI editor
|
//! Load cache file from m_WhereBuild and display in GUI editor
|
||||||
void LoadCacheFromDiskToGUI();
|
void LoadCacheFromDiskToGUI();
|
||||||
|
@ -119,8 +123,9 @@ protected:
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
int m_oldCX;
|
int m_oldCX;
|
||||||
int m_oldCY;
|
int m_oldCY;
|
||||||
float m_deltaXRemainder;
|
float m_deltaXRemainder;
|
||||||
|
cmake *m_CMakeInstance;
|
||||||
};
|
};
|
||||||
|
|
||||||
//{{AFX_INSERT_LOCATION}}
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "PropertyList.h"
|
#include "shellapi.h"
|
||||||
|
#include "CMakeSetup.h"
|
||||||
|
#include "CMakeSetupDialog.h"
|
||||||
#include "PathDialog.h"
|
#include "PathDialog.h"
|
||||||
#include "../cmCacheManager.h"
|
#include "../cmCacheManager.h"
|
||||||
#include "../cmSystemTools.h"
|
#include "../cmSystemTools.h"
|
||||||
|
#include "../cmake.h"
|
||||||
#define IDC_PROPCMBBOX 712
|
#define IDC_PROPCMBBOX 712
|
||||||
#define IDC_PROPEDITBOX 713
|
#define IDC_PROPEDITBOX 713
|
||||||
#define IDC_PROPBTNCTRL 714
|
#define IDC_PROPBTNCTRL 714
|
||||||
|
@ -655,7 +657,7 @@ void CPropertyList::OnDelete()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(m_curSel);
|
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(m_curSel);
|
||||||
cmCacheManager::GetInstance()->RemoveCacheEntry(pItem->m_propName);
|
m_CMakeSetupDialog->GetCMakeInstance()->GetCacheManager()->RemoveCacheEntry(pItem->m_propName);
|
||||||
m_PropertyItems.erase(pItem);
|
m_PropertyItems.erase(pItem);
|
||||||
delete pItem;
|
delete pItem;
|
||||||
this->DeleteString(m_curSel);
|
this->DeleteString(m_curSel);
|
||||||
|
@ -680,7 +682,8 @@ void CPropertyList::RemoveAll()
|
||||||
for(int i =0; i < c; ++i)
|
for(int i =0; i < c; ++i)
|
||||||
{
|
{
|
||||||
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(0);
|
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(0);
|
||||||
cmCacheManager::GetInstance()->RemoveCacheEntry(pItem->m_propName);
|
m_CMakeSetupDialog->GetCMakeInstance()->GetCacheManager()
|
||||||
|
->RemoveCacheEntry(pItem->m_propName);
|
||||||
m_PropertyItems.erase(pItem);
|
m_PropertyItems.erase(pItem);
|
||||||
delete pItem;
|
delete pItem;
|
||||||
this->DeleteString(0);
|
this->DeleteString(0);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "../cmStandardIncludes.h"
|
#include "../cmStandardIncludes.h"
|
||||||
|
class CMakeSetupDialog;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//CPropertyList Items
|
//CPropertyList Items
|
||||||
|
@ -34,6 +35,7 @@ public:
|
||||||
CString m_cmbItems;
|
CString m_cmbItems;
|
||||||
bool m_NewValue;
|
bool m_NewValue;
|
||||||
bool m_Removed;
|
bool m_Removed;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPropertyItem(CString propName, CString curValue,
|
CPropertyItem(CString propName, CString curValue,
|
||||||
CString helpString,
|
CString helpString,
|
||||||
|
@ -70,6 +72,7 @@ public:
|
||||||
|
|
||||||
// Attributes
|
// Attributes
|
||||||
public:
|
public:
|
||||||
|
CMakeSetupDialog *m_CMakeSetupDialog;
|
||||||
|
|
||||||
// Operations
|
// Operations
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -32,13 +32,15 @@ void cmSetClientData(void *info, void *cd)
|
||||||
((cmLoadedCommandInfo *)info)->ClientData = cd;
|
((cmLoadedCommandInfo *)info)->ClientData = cd;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int cmGetCacheMajorVersion(void *)
|
unsigned int cmGetCacheMajorVersion(void *arg)
|
||||||
{
|
{
|
||||||
return cmMakefile::GetCacheMajorVersion();
|
cmMakefile *mf = static_cast<cmMakefile *>(arg);
|
||||||
|
return mf->GetCacheMajorVersion();
|
||||||
}
|
}
|
||||||
unsigned int cmGetCacheMinorVersion(void *)
|
unsigned int cmGetCacheMinorVersion(void *arg)
|
||||||
{
|
{
|
||||||
return cmMakefile::GetCacheMinorVersion();
|
cmMakefile *mf = static_cast<cmMakefile *>(arg);
|
||||||
|
return mf->GetCacheMinorVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int cmGetMajorVersion(void *)
|
unsigned int cmGetMajorVersion(void *)
|
||||||
|
|
|
@ -50,27 +50,6 @@ cmCacheManager::CacheEntryType cmCacheManager::StringToType(const char* s)
|
||||||
return STRING;
|
return STRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCacheManager::DeleteInstance()
|
|
||||||
{
|
|
||||||
delete cmCacheManager::GetInstance();
|
|
||||||
cmCacheManager::s_Instance = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cmCacheManager* cmCacheManager::s_Instance = 0;
|
|
||||||
|
|
||||||
cmCacheManager* cmCacheManager::GetInstance()
|
|
||||||
{
|
|
||||||
if(!cmCacheManager::s_Instance)
|
|
||||||
{
|
|
||||||
cmCacheManager::s_Instance = new cmCacheManager;
|
|
||||||
}
|
|
||||||
return cmCacheManager::s_Instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cmCacheManager::LoadCache(cmMakefile* mf)
|
bool cmCacheManager::LoadCache(cmMakefile* mf)
|
||||||
{
|
{
|
||||||
return this->LoadCache(mf->GetHomeOutputDirectory());
|
return this->LoadCache(mf->GetHomeOutputDirectory());
|
||||||
|
@ -523,8 +502,7 @@ bool cmCacheManager::IsAdvanced(const char* key)
|
||||||
{
|
{
|
||||||
std::string advancedVar = key;
|
std::string advancedVar = key;
|
||||||
advancedVar += "-ADVANCED";
|
advancedVar += "-ADVANCED";
|
||||||
const char* value =
|
const char* value = this->GetCacheValue(advancedVar.c_str());
|
||||||
cmCacheManager::GetInstance()->GetCacheValue(advancedVar.c_str());
|
|
||||||
if(value)
|
if(value)
|
||||||
{
|
{
|
||||||
return cmSystemTools::IsOn(value);
|
return cmSystemTools::IsOn(value);
|
||||||
|
|
|
@ -69,9 +69,6 @@ public:
|
||||||
* can be different than just a path input
|
* can be different than just a path input
|
||||||
*/
|
*/
|
||||||
static CacheEntryType StringToType(const char*);
|
static CacheEntryType StringToType(const char*);
|
||||||
///! Singleton pattern get instance of the cmCacheManager.
|
|
||||||
static cmCacheManager* GetInstance();
|
|
||||||
static void DeleteInstance();
|
|
||||||
|
|
||||||
///! Load a cache for given makefile. Loads from ouput home.
|
///! Load a cache for given makefile. Loads from ouput home.
|
||||||
bool LoadCache(cmMakefile*);
|
bool LoadCache(cmMakefile*);
|
||||||
|
@ -122,7 +119,6 @@ protected:
|
||||||
private:
|
private:
|
||||||
static void OutputHelpString(std::ofstream& fout,
|
static void OutputHelpString(std::ofstream& fout,
|
||||||
const std::string& helpString);
|
const std::string& helpString);
|
||||||
static cmCacheManager* s_Instance;
|
|
||||||
CacheEntryMap m_Cache;
|
CacheEntryMap m_Cache;
|
||||||
// Only cmake and cmMakefile should be able to add cache values
|
// Only cmake and cmMakefile should be able to add cache values
|
||||||
// the commands should never use the cmCacheManager directly
|
// the commands should never use the cmCacheManager directly
|
||||||
|
|
|
@ -76,6 +76,7 @@
|
||||||
#include "cmSubdirCommand.cxx"
|
#include "cmSubdirCommand.cxx"
|
||||||
#include "cmSubdirDependsCommand.cxx"
|
#include "cmSubdirDependsCommand.cxx"
|
||||||
#include "cmTargetLinkLibrariesCommand.cxx"
|
#include "cmTargetLinkLibrariesCommand.cxx"
|
||||||
|
#include "cmTryCompileCommand.cxx"
|
||||||
#include "cmUseMangledMesaCommand.cxx"
|
#include "cmUseMangledMesaCommand.cxx"
|
||||||
#include "cmUtilitySourceCommand.cxx"
|
#include "cmUtilitySourceCommand.cxx"
|
||||||
#include "cmVariableRequiresCommand.cxx"
|
#include "cmVariableRequiresCommand.cxx"
|
||||||
|
@ -157,6 +158,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands)
|
||||||
commands.push_back(new cmSubdirCommand);
|
commands.push_back(new cmSubdirCommand);
|
||||||
commands.push_back(new cmSubdirDependsCommand);
|
commands.push_back(new cmSubdirDependsCommand);
|
||||||
commands.push_back(new cmTargetLinkLibrariesCommand);
|
commands.push_back(new cmTargetLinkLibrariesCommand);
|
||||||
|
commands.push_back(new cmTryCompileCommand);
|
||||||
commands.push_back(new cmUseMangledMesaCommand);
|
commands.push_back(new cmUseMangledMesaCommand);
|
||||||
commands.push_back(new cmUtilitySourceCommand);
|
commands.push_back(new cmUtilitySourceCommand);
|
||||||
commands.push_back(new cmVariableRequiresCommand);
|
commands.push_back(new cmVariableRequiresCommand);
|
||||||
|
|
|
@ -59,7 +59,7 @@ bool cmFindPathCommand::InitialPass(std::vector<std::string> const& argsIn)
|
||||||
if(cacheValue)
|
if(cacheValue)
|
||||||
{
|
{
|
||||||
cmCacheManager::CacheEntry* e =
|
cmCacheManager::CacheEntry* e =
|
||||||
cmCacheManager::GetInstance()->GetCacheEntry(args[0].c_str());
|
m_Makefile->GetCacheManager()->GetCacheEntry(args[0].c_str());
|
||||||
if(e)
|
if(e)
|
||||||
{
|
{
|
||||||
helpString = e->m_HelpString;
|
helpString = e->m_HelpString;
|
||||||
|
|
|
@ -65,7 +65,7 @@ bool cmFindProgramCommand::InitialPass(std::vector<std::string> const& argsIn)
|
||||||
if(cacheValue)
|
if(cacheValue)
|
||||||
{
|
{
|
||||||
cmCacheManager::CacheEntry* e =
|
cmCacheManager::CacheEntry* e =
|
||||||
cmCacheManager::GetInstance()->GetCacheEntry(args[0].c_str());
|
m_Makefile->GetCacheManager()->GetCacheEntry(args[0].c_str());
|
||||||
if(e)
|
if(e)
|
||||||
{
|
{
|
||||||
doc = e->m_HelpString;
|
doc = e->m_HelpString;
|
||||||
|
|
|
@ -80,7 +80,7 @@ bool cmLoadCacheCommand::InitialPass(std::vector<std::string> const& argsIn)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cmCacheManager::GetInstance()->LoadCache(args[i].c_str(), false,
|
m_Makefile->GetCacheManager()->LoadCache(args[i].c_str(), false,
|
||||||
excludes, includes);
|
excludes, includes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ bool cmLoadCommandCommand::InitialPass(std::vector<std::string> const& argsIn)
|
||||||
|
|
||||||
// the file must exist
|
// the file must exist
|
||||||
std::string fullPath = cmDynamicLoader::LibPrefix();
|
std::string fullPath = cmDynamicLoader::LibPrefix();
|
||||||
fullPath += argsIn[0] + cmDynamicLoader::LibExtension();
|
fullPath += "cm" + argsIn[0] + cmDynamicLoader::LibExtension();
|
||||||
|
|
||||||
std::vector<std::string> args;
|
std::vector<std::string> args;
|
||||||
cmSystemTools::ExpandListArguments(argsIn, args);
|
cmSystemTools::ExpandListArguments(argsIn, args);
|
||||||
|
|
|
@ -1380,3 +1380,50 @@ std::string cmMSDotNETGenerator::ConvertToXMLOutputPathSingle(const char* path)
|
||||||
cmSystemTools::ReplaceString(ret, "\"", "");
|
cmSystemTools::ReplaceString(ret, "\"", "");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int cmMSDotNETGenerator::TryCompile(const char *srcdir,
|
||||||
|
const char *bindir,
|
||||||
|
const char *projectName)
|
||||||
|
{
|
||||||
|
// now build the test
|
||||||
|
std::string makeCommand = m_Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
|
||||||
|
if(makeCommand.size() == 0)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"Generator cannot find the appropriate make command.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
|
||||||
|
std::string lowerCaseCommand = makeCommand;
|
||||||
|
cmSystemTools::LowerCase(lowerCaseCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an executable command and put the stdout in output.
|
||||||
|
*/
|
||||||
|
std::string output;
|
||||||
|
|
||||||
|
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||||
|
cmSystemTools::ChangeDirectory(bindir);
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
|
if(makeCommand.find(' ') != std::string::npos)
|
||||||
|
{
|
||||||
|
cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
makeCommand += " ";
|
||||||
|
makeCommand += projectName;
|
||||||
|
makeCommand += ".sln /rebuild Debug /project ALL_BUILD";
|
||||||
|
|
||||||
|
if (!cmSystemTools::RunCommand(makeCommand.c_str(), output))
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Generator: execution of devenv failed.");
|
||||||
|
// return to the original directory
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,16 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void EnableLanguage(const char*);
|
virtual void EnableLanguage(const char*);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try running cmake and building a file. This is used for dynalically
|
||||||
|
* loaded commands, not as part of the usual build process. For the
|
||||||
|
* generator, it can assume that cmake has been run on the srcdir/bindir
|
||||||
|
* and it just needs to be compiled.
|
||||||
|
*/
|
||||||
|
virtual int TryCompile(const char *srcdir, const char *bindir,
|
||||||
|
const char *projectName);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Return array of created VCProj names in a STL vector.
|
* Return array of created VCProj names in a STL vector.
|
||||||
|
|
|
@ -75,3 +75,51 @@ void cmMSProjectGenerator::EnableLanguage(const char*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cmMSProjectGenerator::TryCompile(const char *srcdir,
|
||||||
|
const char *bindir,
|
||||||
|
const char *projectName)
|
||||||
|
{
|
||||||
|
// now build the test
|
||||||
|
std::string makeCommand = m_Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
|
||||||
|
if(makeCommand.size() == 0)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"Generator cannot find the appropriate make command.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
|
||||||
|
std::string lowerCaseCommand = makeCommand;
|
||||||
|
cmSystemTools::LowerCase(lowerCaseCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an executable command and put the stdout in output.
|
||||||
|
*/
|
||||||
|
std::string output;
|
||||||
|
|
||||||
|
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||||
|
cmSystemTools::ChangeDirectory(bindir);
|
||||||
|
|
||||||
|
// if there are spaces in the makeCommand, assume a full path
|
||||||
|
// and convert it to a path with no spaces in it as the
|
||||||
|
// RunCommand does not like spaces
|
||||||
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
|
if(makeCommand.find(' ') != std::string::npos)
|
||||||
|
{
|
||||||
|
cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
makeCommand += " ";
|
||||||
|
makeCommand += projectName;
|
||||||
|
makeCommand += ".dsw /MAKE \"ALL_BUILD - Debug\" /REBUILD";
|
||||||
|
|
||||||
|
if (!cmSystemTools::RunCommand(makeCommand.c_str(), output))
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Generator: execution of msdev failed.");
|
||||||
|
// return to the original directory
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,15 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void EnableLanguage(const char*);
|
virtual void EnableLanguage(const char*);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try running cmake and building a file. This is used for dynalically
|
||||||
|
* loaded commands, not as part of the usual build process. For the
|
||||||
|
* generator, it can assume that cmake has been run on the srcdir/bindir
|
||||||
|
* and it just needs to be compiled.
|
||||||
|
*/
|
||||||
|
virtual int TryCompile(const char *srcdir, const char *bindir,
|
||||||
|
const char *projectName);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cmDSWWriter* m_DSWWriter;
|
cmDSWWriter* m_DSWWriter;
|
||||||
cmDSPWriter* m_DSPWriter;
|
cmDSPWriter* m_DSPWriter;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "cmCacheManager.h"
|
#include "cmCacheManager.h"
|
||||||
#include "cmFunctionBlocker.h"
|
#include "cmFunctionBlocker.h"
|
||||||
#include "cmListFileCache.h"
|
#include "cmListFileCache.h"
|
||||||
|
#include "cmake.h"
|
||||||
#include <stdio.h> // required for sprintf
|
#include <stdio.h> // required for sprintf
|
||||||
|
|
||||||
// default is not to be building executables
|
// default is not to be building executables
|
||||||
|
@ -48,6 +49,7 @@ cmMakefile::cmMakefile()
|
||||||
|
|
||||||
m_DefineFlags = " ";
|
m_DefineFlags = " ";
|
||||||
m_MakefileGenerator = 0;
|
m_MakefileGenerator = 0;
|
||||||
|
m_CacheManager = 0;
|
||||||
this->AddSourceGroup("", "^.*$");
|
this->AddSourceGroup("", "^.*$");
|
||||||
this->AddSourceGroup("Source Files", "\\.(cpp|C|c|cxx|rc|def|r|odl|idl|hpj|bat)$");
|
this->AddSourceGroup("Source Files", "\\.(cpp|C|c|cxx|rc|def|r|odl|idl|hpj|bat)$");
|
||||||
this->AddSourceGroup("Header Files", "\\.(h|hh|hpp|hxx|hm|inl)$");
|
this->AddSourceGroup("Header Files", "\\.(h|hh|hpp|hxx|hm|inl)$");
|
||||||
|
@ -57,24 +59,20 @@ cmMakefile::cmMakefile()
|
||||||
|
|
||||||
unsigned int cmMakefile::GetCacheMajorVersion()
|
unsigned int cmMakefile::GetCacheMajorVersion()
|
||||||
{
|
{
|
||||||
if(!cmCacheManager::GetInstance()->
|
if(!this->m_CacheManager->GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"))
|
||||||
GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"))
|
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return atoi(cmCacheManager::GetInstance()->
|
return atoi(this->m_CacheManager->GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"));
|
||||||
GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int cmMakefile::GetCacheMinorVersion()
|
unsigned int cmMakefile::GetCacheMinorVersion()
|
||||||
{
|
{
|
||||||
if(!cmCacheManager::GetInstance()->
|
if(!this->m_CacheManager->GetCacheValue("Cmake_Cache_MINOR_VERSION"))
|
||||||
GetCacheValue("Cmake_Cache_MINOR_VERSION"))
|
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return atoi(cmCacheManager::GetInstance()->
|
return atoi(this->m_CacheManager->GetCacheValue("CMAKE_CACHE_MINOR_VERSION"));
|
||||||
GetCacheValue("CMAKE_CACHE_MINOR_VERSION"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -464,10 +462,10 @@ void cmMakefile::AddCustomCommand(const char* source,
|
||||||
m_Targets[target].GetCustomCommands().push_back(cc);
|
m_Targets[target].GetCustomCommands().push_back(cc);
|
||||||
std::string cacheCommand = command;
|
std::string cacheCommand = command;
|
||||||
this->ExpandVariablesInString(cacheCommand);
|
this->ExpandVariablesInString(cacheCommand);
|
||||||
if(cmCacheManager::GetInstance()->GetCacheValue(cacheCommand.c_str()))
|
if(this->m_CacheManager->GetCacheValue(cacheCommand.c_str()))
|
||||||
{
|
{
|
||||||
m_Targets[target].AddUtility(
|
m_Targets[target].AddUtility(
|
||||||
cmCacheManager::GetInstance()->GetCacheValue(cacheCommand.c_str()));
|
this->m_CacheManager->GetCacheValue(cacheCommand.c_str()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -598,7 +596,7 @@ void cmMakefile::AddCacheDefinition(const char* name, const char* value,
|
||||||
const char* doc,
|
const char* doc,
|
||||||
cmCacheManager::CacheEntryType type)
|
cmCacheManager::CacheEntryType type)
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry(name, value, doc, type);
|
this->m_CacheManager->AddCacheEntry(name, value, doc, type);
|
||||||
this->AddDefinition(name, value);
|
this->AddDefinition(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -620,7 +618,7 @@ void cmMakefile::AddDefinition(const char* name, bool value)
|
||||||
|
|
||||||
void cmMakefile::AddCacheDefinition(const char* name, bool value, const char* doc)
|
void cmMakefile::AddCacheDefinition(const char* name, bool value, const char* doc)
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry(name, value, doc);
|
this->m_CacheManager->AddCacheEntry(name, value, doc);
|
||||||
this->AddDefinition(name, value);
|
this->AddDefinition(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -673,7 +671,7 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
|
||||||
// hence useless.
|
// hence useless.
|
||||||
std::string depname = lname;
|
std::string depname = lname;
|
||||||
depname += "_LIB_DEPENDS";
|
depname += "_LIB_DEPENDS";
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(depname.c_str(), "",
|
AddCacheEntry(depname.c_str(), "",
|
||||||
"Dependencies for target", cmCacheManager::STATIC);
|
"Dependencies for target", cmCacheManager::STATIC);
|
||||||
|
|
||||||
|
@ -686,7 +684,7 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
|
||||||
// Add an entry into the cache
|
// Add an entry into the cache
|
||||||
std::string libPath = lname;
|
std::string libPath = lname;
|
||||||
libPath += "_CMAKE_PATH";
|
libPath += "_CMAKE_PATH";
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(libPath.c_str(),
|
AddCacheEntry(libPath.c_str(),
|
||||||
this->GetCurrentOutputDirectory(),
|
this->GetCurrentOutputDirectory(),
|
||||||
"Path to a library", cmCacheManager::INTERNAL);
|
"Path to a library", cmCacheManager::INTERNAL);
|
||||||
|
@ -697,28 +695,26 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
|
||||||
switch (shared)
|
switch (shared)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->AddCacheEntry(ltname.c_str(),"STATIC",
|
||||||
AddCacheEntry(ltname.c_str(),
|
|
||||||
"STATIC",
|
|
||||||
"Whether a library is static, shared or module.",
|
"Whether a library is static, shared or module.",
|
||||||
cmCacheManager::INTERNAL);
|
cmCacheManager::INTERNAL);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(ltname.c_str(),
|
AddCacheEntry(ltname.c_str(),
|
||||||
"SHARED",
|
"SHARED",
|
||||||
"Whether a library is static, shared or module.",
|
"Whether a library is static, shared or module.",
|
||||||
cmCacheManager::INTERNAL);
|
cmCacheManager::INTERNAL);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(ltname.c_str(),
|
AddCacheEntry(ltname.c_str(),
|
||||||
"MODULE",
|
"MODULE",
|
||||||
"Whether a library is static, shared or module.",
|
"Whether a library is static, shared or module.",
|
||||||
cmCacheManager::INTERNAL);
|
cmCacheManager::INTERNAL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(ltname.c_str(),
|
AddCacheEntry(ltname.c_str(),
|
||||||
"STATIC",
|
"STATIC",
|
||||||
"Whether a library is static, shared or module.",
|
"Whether a library is static, shared or module.",
|
||||||
|
@ -755,7 +751,7 @@ void cmMakefile::AddExecutable(const char *exeName,
|
||||||
// Add an entry into the cache
|
// Add an entry into the cache
|
||||||
std::string exePath = exeName;
|
std::string exePath = exeName;
|
||||||
exePath += "_CMAKE_PATH";
|
exePath += "_CMAKE_PATH";
|
||||||
cmCacheManager::GetInstance()->
|
this->m_CacheManager->
|
||||||
AddCacheEntry(exePath.c_str(),
|
AddCacheEntry(exePath.c_str(),
|
||||||
this->GetCurrentOutputDirectory(),
|
this->GetCurrentOutputDirectory(),
|
||||||
"Path to an executable", cmCacheManager::INTERNAL);
|
"Path to an executable", cmCacheManager::INTERNAL);
|
||||||
|
@ -908,7 +904,7 @@ const char* cmMakefile::GetDefinition(const char* name) const
|
||||||
{
|
{
|
||||||
return (*pos).second.c_str();
|
return (*pos).second.c_str();
|
||||||
}
|
}
|
||||||
return cmCacheManager::GetInstance()->GetCacheValue(name);
|
return this->m_CacheManager->GetCacheValue(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmMakefile::DumpDocumentationToFile(std::ostream& f)
|
int cmMakefile::DumpDocumentationToFile(std::ostream& f)
|
||||||
|
@ -1157,6 +1153,7 @@ cmMakefile::FindSubDirectoryCMakeListsFiles(std::vector<cmMakefile*>& makefiles)
|
||||||
{
|
{
|
||||||
cmMakefile* mf = new cmMakefile;
|
cmMakefile* mf = new cmMakefile;
|
||||||
mf->SetMakefileGenerator(m_MakefileGenerator->CreateObject());
|
mf->SetMakefileGenerator(m_MakefileGenerator->CreateObject());
|
||||||
|
mf->SetCacheManager(this->m_CacheManager);
|
||||||
makefiles.push_back(mf);
|
makefiles.push_back(mf);
|
||||||
// initialize new makefile
|
// initialize new makefile
|
||||||
mf->SetHomeOutputDirectory(this->GetHomeOutputDirectory());
|
mf->SetHomeOutputDirectory(this->GetHomeOutputDirectory());
|
||||||
|
@ -1436,3 +1433,64 @@ void cmMakefile::ExpandSourceListArguments(
|
||||||
}
|
}
|
||||||
cmSystemTools::ExpandListArguments(tmpArgs, newargs);
|
cmSystemTools::ExpandListArguments(tmpArgs, newargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
|
||||||
|
const char *projectName)
|
||||||
|
{
|
||||||
|
if (!m_MakefileGenerator)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Internal CMake error, Attempt to call Try Compile without the generator being set");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// does the binary directory exist ? If not create it...
|
||||||
|
if (!cmSystemTools::FileIsDirectory(bindir))
|
||||||
|
{
|
||||||
|
cmSystemTools::MakeDirectory(bindir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// change to the tests directory and run cmake
|
||||||
|
// use the cmake object instead of calling cmake
|
||||||
|
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||||
|
cmSystemTools::ChangeDirectory(bindir);
|
||||||
|
|
||||||
|
std::vector<std::string> args;
|
||||||
|
|
||||||
|
// make sure the same generator is used
|
||||||
|
// use this program as the cmake to be run, it should not
|
||||||
|
// be run that way but the cmake object requires a vailid path
|
||||||
|
std::string cmakeCommand = this->GetDefinition("CMAKE_COMMAND");
|
||||||
|
args.push_back(cmakeCommand.c_str());
|
||||||
|
args.push_back(srcdir);
|
||||||
|
|
||||||
|
std::string generator = "-G";
|
||||||
|
generator += this->GetDefinition("CMAKE_GENERATOR");
|
||||||
|
args.push_back(generator);
|
||||||
|
|
||||||
|
cmake cm;
|
||||||
|
if (cm.Generate(args) != 0)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"Internal CMake error, TryCompile execution of cmake failed");
|
||||||
|
// return to the original directory
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmake cm2;
|
||||||
|
if (cm2.Generate(args) != 0)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"Internal CMake error, TryCompile execution of cmake failed");
|
||||||
|
// return to the original directory
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally call the generator to actually build the resulting project
|
||||||
|
m_MakefileGenerator->TryCompile(srcdir,bindir,projectName);
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,8 +52,8 @@ public:
|
||||||
* was used to write the currently loaded cache, note
|
* was used to write the currently loaded cache, note
|
||||||
* this method will not work before the cache is loaded.
|
* this method will not work before the cache is loaded.
|
||||||
*/
|
*/
|
||||||
static unsigned int GetCacheMajorVersion();
|
unsigned int GetCacheMajorVersion();
|
||||||
static unsigned int GetCacheMinorVersion();
|
unsigned int GetCacheMinorVersion();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an empty makefile.
|
* Construct an empty makefile.
|
||||||
|
@ -84,6 +84,13 @@ public:
|
||||||
{ m_FunctionBlockers.remove(fb);}
|
{ m_FunctionBlockers.remove(fb);}
|
||||||
void RemoveFunctionBlocker(const char *name, const std::vector<std::string> &args);
|
void RemoveFunctionBlocker(const char *name, const std::vector<std::string> &args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try running cmake and building a file. This is used for dynalically
|
||||||
|
* loaded commands, not as part of the usual build process.
|
||||||
|
*/
|
||||||
|
int TryCompile(const char *srcdir, const char *bindir,
|
||||||
|
const char *projectName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify the makefile generator. This is platform/compiler
|
* Specify the makefile generator. This is platform/compiler
|
||||||
* dependent, although the interface is through a generic
|
* dependent, although the interface is through a generic
|
||||||
|
@ -508,7 +515,18 @@ public:
|
||||||
///! Enable support for the named language, if null then all languages are enabled.
|
///! Enable support for the named language, if null then all languages are enabled.
|
||||||
void EnableLanguage(const char* );
|
void EnableLanguage(const char* );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set/Get the name of the parent directories CMakeLists file
|
||||||
|
* given a current CMakeLists file name
|
||||||
|
*/
|
||||||
|
void SetCacheManager(cmCacheManager *cm) {
|
||||||
|
this->m_CacheManager = cm; }
|
||||||
|
cmCacheManager *GetCacheManager() {
|
||||||
|
return m_CacheManager; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
cmCacheManager *m_CacheManager;
|
||||||
|
|
||||||
// add link libraries and directories to the target
|
// add link libraries and directories to the target
|
||||||
void AddGlobalLinkInformation(const char* name, cmTarget& target);
|
void AddGlobalLinkInformation(const char* name, cmTarget& target);
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,6 @@
|
||||||
#include "cmMakefileGenerator.h"
|
#include "cmMakefileGenerator.h"
|
||||||
|
|
||||||
// static list of registered generators
|
// static list of registered generators
|
||||||
std::map<cmStdString, cmMakefileGenerator*>
|
|
||||||
cmMakefileGenerator::s_RegisteredGenerators;
|
|
||||||
std::map<cmStdString, bool> cmMakefileGenerator::s_LanguageEnabled;
|
std::map<cmStdString, bool> cmMakefileGenerator::s_LanguageEnabled;
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,60 +25,6 @@ void cmMakefileGenerator::SetMakefile(cmMakefile* mf)
|
||||||
m_Makefile = mf;
|
m_Makefile = mf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmMakefileGenerator::UnRegisterGenerators()
|
|
||||||
{
|
|
||||||
for(std::map<cmStdString, cmMakefileGenerator*>::iterator i
|
|
||||||
= s_RegisteredGenerators.begin();
|
|
||||||
i != s_RegisteredGenerators.end(); ++i)
|
|
||||||
{
|
|
||||||
delete i->second;
|
|
||||||
}
|
|
||||||
s_RegisteredGenerators = std::map<cmStdString, cmMakefileGenerator*>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmMakefileGenerator::GetRegisteredGenerators(std::vector<std::string>& names)
|
|
||||||
{
|
|
||||||
for(std::map<cmStdString, cmMakefileGenerator*>::iterator i
|
|
||||||
= s_RegisteredGenerators.begin();
|
|
||||||
i != s_RegisteredGenerators.end(); ++i)
|
|
||||||
{
|
|
||||||
names.push_back(i->first);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cmMakefileGenerator::RegisterGenerator(cmMakefileGenerator* mg)
|
|
||||||
{
|
|
||||||
std::map<cmStdString, cmMakefileGenerator*>::iterator i =
|
|
||||||
s_RegisteredGenerators.find(mg->GetName());
|
|
||||||
// delete re-registered objects
|
|
||||||
if(i != s_RegisteredGenerators.end())
|
|
||||||
{
|
|
||||||
delete i->second;
|
|
||||||
}
|
|
||||||
s_RegisteredGenerators[mg->GetName()] = mg;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cmMakefileGenerator*
|
|
||||||
cmMakefileGenerator::CreateGenerator(const char* name)
|
|
||||||
{
|
|
||||||
std::map<cmStdString, cmMakefileGenerator*>::iterator i;
|
|
||||||
for(i = s_RegisteredGenerators.begin();
|
|
||||||
i != s_RegisteredGenerators.end(); ++i)
|
|
||||||
{
|
|
||||||
cmMakefileGenerator* gen = i->second;
|
|
||||||
if(strcmp(name, gen->GetName()) == 0)
|
|
||||||
{
|
|
||||||
return gen->CreateObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cmMakefileGenerator::SetLanguageEnabled(const char* l)
|
void cmMakefileGenerator::SetLanguageEnabled(const char* l)
|
||||||
{
|
{
|
||||||
s_LanguageEnabled[l] = true;
|
s_LanguageEnabled[l] = true;
|
||||||
|
|
|
@ -31,15 +31,13 @@ class cmClassFile;
|
||||||
class cmMakefileGenerator
|
class cmMakefileGenerator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///! Create a named generator
|
/**
|
||||||
static cmMakefileGenerator* CreateGenerator(const char* name);
|
* Try running cmake and building a file. This is used for dynalically
|
||||||
///! Register a generator
|
* loaded commands, not as part of the usual build process.
|
||||||
static void RegisterGenerator(cmMakefileGenerator*);
|
*/
|
||||||
///! delete all registered generators, useful for clean up
|
virtual int TryCompile(const char *srcdir, const char *bindir,
|
||||||
static void UnRegisterGenerators();
|
const char *projectName) = 0;
|
||||||
///! Get the names of the current registered generators
|
|
||||||
static void GetRegisteredGenerators(std::vector<std::string>& names);
|
|
||||||
|
|
||||||
///! Get the name for the generator.
|
///! Get the name for the generator.
|
||||||
virtual const char* GetName() = 0;
|
virtual const char* GetName() = 0;
|
||||||
|
|
||||||
|
@ -82,7 +80,6 @@ public:
|
||||||
protected:
|
protected:
|
||||||
cmMakefile* m_Makefile;
|
cmMakefile* m_Makefile;
|
||||||
private:
|
private:
|
||||||
static std::map<cmStdString, cmMakefileGenerator*> s_RegisteredGenerators;
|
|
||||||
static std::map<cmStdString, bool> s_LanguageEnabled;
|
static std::map<cmStdString, bool> s_LanguageEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -738,4 +738,3 @@ std::string cmNMakeMakefileGenerator::LowerCasePath(const char* path)
|
||||||
{
|
{
|
||||||
return cmSystemTools::LowerCase(path);
|
return cmSystemTools::LowerCase(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
|
|
||||||
///! figure out about the current system information
|
///! figure out about the current system information
|
||||||
virtual void EnableLanguage(const char*);
|
virtual void EnableLanguage(const char*);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string ShortPath(const char* path);
|
std::string ShortPath(const char* path);
|
||||||
std::string ShortPathCommand(const char* command);
|
std::string ShortPathCommand(const char* command);
|
||||||
|
|
|
@ -2202,3 +2202,40 @@ void cmUnixMakefileGenerator::EnableLanguage(const char* lang)
|
||||||
m_Makefile->AddDefinition("RUN_CONFIGURE", true);
|
m_Makefile->AddDefinition("RUN_CONFIGURE", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cmUnixMakefileGenerator::TryCompile(const char *srcdir,
|
||||||
|
const char *bindir,
|
||||||
|
const char *)
|
||||||
|
{
|
||||||
|
// now build the test
|
||||||
|
std::string makeCommand = m_Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
|
||||||
|
if(makeCommand.size() == 0)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"Generator cannot find the appropriate make command.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an executable command and put the stdout in output.
|
||||||
|
*/
|
||||||
|
std::string output;
|
||||||
|
|
||||||
|
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||||
|
cmSystemTools::ChangeDirectory(bindir);
|
||||||
|
|
||||||
|
// now build
|
||||||
|
makeCommand += " all";
|
||||||
|
|
||||||
|
if (!cmSystemTools::RunCommand(makeCommand.c_str(), output))
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Generator: execution of make failed.");
|
||||||
|
// return to the original directory
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -172,6 +172,14 @@ protected:
|
||||||
return std::string(path);
|
return std::string(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try running cmake and building a file. This is used for dynalically
|
||||||
|
* loaded commands, not as part of the usual build process. For the
|
||||||
|
* generator, it can assume that cmake has been run on the srcdir/bindir
|
||||||
|
* and it just needs to be compiled.
|
||||||
|
*/
|
||||||
|
virtual int TryCompile(const char *srcdir, const char *bindir,
|
||||||
|
const char *projectName);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string m_ExecutableOutputPath;
|
std::string m_ExecutableOutputPath;
|
||||||
|
|
|
@ -47,7 +47,7 @@ void cmVariableRequiresCommand::FinalPass()
|
||||||
requirementsMet = false;
|
requirementsMet = false;
|
||||||
notSet += m_Arguments[i];
|
notSet += m_Arguments[i];
|
||||||
notSet += "\n";
|
notSet += "\n";
|
||||||
if(cmCacheManager::GetInstance()->IsAdvanced(m_Arguments[i].c_str()))
|
if(m_Makefile->GetCacheManager()->IsAdvanced(m_Arguments[i].c_str()))
|
||||||
{
|
{
|
||||||
hasAdvanced = true;
|
hasAdvanced = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,17 +32,24 @@ cmake::cmake()
|
||||||
{
|
{
|
||||||
m_Verbose = false;
|
m_Verbose = false;
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
cmMakefileGenerator::RegisterGenerator(new cmMSProjectGenerator);
|
this->RegisterGenerator(new cmMSProjectGenerator);
|
||||||
cmMakefileGenerator::RegisterGenerator(new cmMSDotNETGenerator);
|
this->RegisterGenerator(new cmMSDotNETGenerator);
|
||||||
cmMakefileGenerator::RegisterGenerator(new cmNMakeMakefileGenerator);
|
this->RegisterGenerator(new cmNMakeMakefileGenerator);
|
||||||
cmMakefileGenerator::RegisterGenerator(new cmBorlandMakefileGenerator);
|
this->RegisterGenerator(new cmBorlandMakefileGenerator);
|
||||||
#else
|
#else
|
||||||
cmMakefileGenerator::RegisterGenerator(new cmUnixMakefileGenerator);
|
this->RegisterGenerator(new cmUnixMakefileGenerator);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
cmake::~cmake()
|
cmake::~cmake()
|
||||||
{
|
{
|
||||||
|
for(std::map<cmStdString, cmMakefileGenerator*>::iterator i
|
||||||
|
= m_RegisteredGenerators.begin();
|
||||||
|
i != m_RegisteredGenerators.end(); ++i)
|
||||||
|
{
|
||||||
|
delete i->second;
|
||||||
|
}
|
||||||
|
m_RegisteredGenerators = std::map<cmStdString, cmMakefileGenerator*>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,7 +67,7 @@ void cmake::Usage(const char* program)
|
||||||
errorStream << "\n-Cpath_to_initial_cache (a cmake list file that is used to pre-load the cache with values.)\n";
|
errorStream << "\n-Cpath_to_initial_cache (a cmake list file that is used to pre-load the cache with values.)\n";
|
||||||
errorStream << "\n[-GgeneratorName] (where generator name can be one of these: ";
|
errorStream << "\n[-GgeneratorName] (where generator name can be one of these: ";
|
||||||
std::vector<std::string> names;
|
std::vector<std::string> names;
|
||||||
cmMakefileGenerator::GetRegisteredGenerators(names);
|
this->GetRegisteredGenerators(names);
|
||||||
for(std::vector<std::string>::iterator i =names.begin();
|
for(std::vector<std::string>::iterator i =names.begin();
|
||||||
i != names.end(); ++i)
|
i != names.end(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -85,7 +92,7 @@ void cmake::SetCacheArgs(cmMakefile& builder,
|
||||||
cmCacheManager::CacheEntryType type;
|
cmCacheManager::CacheEntryType type;
|
||||||
if(cmCacheManager::ParseEntry(entry.c_str(), var, value, type))
|
if(cmCacheManager::ParseEntry(entry.c_str(), var, value, type))
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry(
|
this->m_CacheManager.AddCacheEntry(
|
||||||
var.c_str(),
|
var.c_str(),
|
||||||
value.c_str(),
|
value.c_str(),
|
||||||
"No help, variable specified on the command line.",
|
"No help, variable specified on the command line.",
|
||||||
|
@ -183,7 +190,7 @@ void cmake::SetArgs(cmMakefile& builder, const std::vector<std::string>& args)
|
||||||
{
|
{
|
||||||
std::string value = arg.substr(2);
|
std::string value = arg.substr(2);
|
||||||
cmMakefileGenerator* gen =
|
cmMakefileGenerator* gen =
|
||||||
cmMakefileGenerator::CreateGenerator(value.c_str());
|
this->CreateGenerator(value.c_str());
|
||||||
if(!gen)
|
if(!gen)
|
||||||
{
|
{
|
||||||
cmSystemTools::Error("Could not create named generator ",
|
cmSystemTools::Error("Could not create named generator ",
|
||||||
|
@ -272,7 +279,7 @@ int cmake::AddCMakePaths(const std::vector<std::string>& args)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// Save the value in the cache
|
// Save the value in the cache
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry
|
this->m_CacheManager.AddCacheEntry
|
||||||
("CMAKE_COMMAND",cMakeSelf.c_str(), "Path to CMake executable.",
|
("CMAKE_COMMAND",cMakeSelf.c_str(), "Path to CMake executable.",
|
||||||
cmCacheManager::INTERNAL);
|
cmCacheManager::INTERNAL);
|
||||||
|
|
||||||
|
@ -286,7 +293,7 @@ int cmake::AddCMakePaths(const std::vector<std::string>& args)
|
||||||
}
|
}
|
||||||
if(cmSystemTools::FileExists(editCacheCommand.c_str()))
|
if(cmSystemTools::FileExists(editCacheCommand.c_str()))
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry
|
this->m_CacheManager.AddCacheEntry
|
||||||
("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(),
|
("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(),
|
||||||
"Path to cache edit program executable.", cmCacheManager::INTERNAL);
|
"Path to cache edit program executable.", cmCacheManager::INTERNAL);
|
||||||
}
|
}
|
||||||
|
@ -356,7 +363,7 @@ int cmake::AddCMakePaths(const std::vector<std::string>& args)
|
||||||
modules.c_str());
|
modules.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry
|
this->m_CacheManager.AddCacheEntry
|
||||||
("CMAKE_ROOT", cMakeRoot.c_str(),
|
("CMAKE_ROOT", cMakeRoot.c_str(),
|
||||||
"Path to CMake installation.", cmCacheManager::INTERNAL);
|
"Path to CMake installation.", cmCacheManager::INTERNAL);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -386,11 +393,13 @@ int cmake::Generate(const std::vector<std::string>& args, bool buildMakefiles)
|
||||||
}
|
}
|
||||||
// Create a makefile
|
// Create a makefile
|
||||||
cmMakefile mf;
|
cmMakefile mf;
|
||||||
|
mf.SetCacheManager(&this->m_CacheManager);
|
||||||
|
|
||||||
// extract the directory arguments, could create a Generator
|
// extract the directory arguments, could create a Generator
|
||||||
this->SetArgs(mf, args);
|
this->SetArgs(mf, args);
|
||||||
// Read and parse the input makefile
|
// Read and parse the input makefile
|
||||||
mf.MakeStartDirectoriesCurrent();
|
mf.MakeStartDirectoriesCurrent();
|
||||||
cmCacheManager::GetInstance()->LoadCache(&mf);
|
this->m_CacheManager.LoadCache(&mf);
|
||||||
if(mf.GetDefinition("CMAKE_HOME_DIRECTORY"))
|
if(mf.GetDefinition("CMAKE_HOME_DIRECTORY"))
|
||||||
{
|
{
|
||||||
std::string cacheStart = mf.GetDefinition("CMAKE_HOME_DIRECTORY");
|
std::string cacheStart = mf.GetDefinition("CMAKE_HOME_DIRECTORY");
|
||||||
|
@ -422,7 +431,7 @@ int cmake::Generate(const std::vector<std::string>& args, bool buildMakefiles)
|
||||||
const char* genName = mf.GetDefinition("CMAKE_GENERATOR");
|
const char* genName = mf.GetDefinition("CMAKE_GENERATOR");
|
||||||
if(genName)
|
if(genName)
|
||||||
{
|
{
|
||||||
gen = cmMakefileGenerator::CreateGenerator(genName);
|
gen = this->CreateGenerator(genName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -510,24 +519,24 @@ int cmake::Generate(const std::vector<std::string>& args, bool buildMakefiles)
|
||||||
// so users can edit the values in the cache:
|
// so users can edit the values in the cache:
|
||||||
// LIBRARY_OUTPUT_PATH
|
// LIBRARY_OUTPUT_PATH
|
||||||
// EXECUTABLE_OUTPUT_PATH
|
// EXECUTABLE_OUTPUT_PATH
|
||||||
if(!cmCacheManager::GetInstance()->GetCacheValue("LIBRARY_OUTPUT_PATH"))
|
if(!this->m_CacheManager.GetCacheValue("LIBRARY_OUTPUT_PATH"))
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry("LIBRARY_OUTPUT_PATH", "",
|
this->m_CacheManager.AddCacheEntry("LIBRARY_OUTPUT_PATH", "",
|
||||||
"Single output directory for building all libraries.",
|
"Single output directory for building all libraries.",
|
||||||
cmCacheManager::PATH);
|
cmCacheManager::PATH);
|
||||||
}
|
}
|
||||||
if(!cmCacheManager::GetInstance()->GetCacheValue("EXECUTABLE_OUTPUT_PATH"))
|
if(!this->m_CacheManager.GetCacheValue("EXECUTABLE_OUTPUT_PATH"))
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->AddCacheEntry("EXECUTABLE_OUTPUT_PATH", "",
|
this->m_CacheManager.AddCacheEntry("EXECUTABLE_OUTPUT_PATH", "",
|
||||||
"Single output directory for building all executables.",
|
"Single output directory for building all executables.",
|
||||||
cmCacheManager::PATH);
|
cmCacheManager::PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmCacheManager::GetInstance()->SaveCache(&mf);
|
this->m_CacheManager.SaveCache(&mf);
|
||||||
|
|
||||||
if(m_Verbose)
|
if(m_Verbose)
|
||||||
{
|
{
|
||||||
cmCacheManager::GetInstance()->PrintCache(std::cout);
|
this->m_CacheManager.PrintCache(std::cout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cmSystemTools::GetErrorOccuredFlag())
|
if(cmSystemTools::GetErrorOccuredFlag())
|
||||||
|
@ -666,3 +675,42 @@ int cmake::CMakeCommand(std::vector<std::string>& args)
|
||||||
::CMakeCommandUsage(args[0].c_str());
|
::CMakeCommandUsage(args[0].c_str());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmake::GetRegisteredGenerators(std::vector<std::string>& names)
|
||||||
|
{
|
||||||
|
for(std::map<cmStdString, cmMakefileGenerator*>::iterator i
|
||||||
|
= this->m_RegisteredGenerators.begin();
|
||||||
|
i != this->m_RegisteredGenerators.end(); ++i)
|
||||||
|
{
|
||||||
|
names.push_back(i->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cmake::RegisterGenerator(cmMakefileGenerator* mg)
|
||||||
|
{
|
||||||
|
std::map<cmStdString, cmMakefileGenerator*>::iterator i =
|
||||||
|
this->m_RegisteredGenerators.find(mg->GetName());
|
||||||
|
// delete re-registered objects
|
||||||
|
if(i != this->m_RegisteredGenerators.end())
|
||||||
|
{
|
||||||
|
delete i->second;
|
||||||
|
}
|
||||||
|
this->m_RegisteredGenerators[mg->GetName()] = mg;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmMakefileGenerator* cmake::CreateGenerator(const char* name)
|
||||||
|
{
|
||||||
|
std::map<cmStdString, cmMakefileGenerator*>::iterator i;
|
||||||
|
for(i = this->m_RegisteredGenerators.begin();
|
||||||
|
i != this->m_RegisteredGenerators.end(); ++i)
|
||||||
|
{
|
||||||
|
cmMakefileGenerator* gen = i->second;
|
||||||
|
if(strcmp(name, gen->GetName()) == 0)
|
||||||
|
{
|
||||||
|
return gen->CreateObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,9 @@
|
||||||
PURPOSE. See the above copyright notices for more information.
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
=========================================================================*/
|
=========================================================================*/
|
||||||
|
// This class represents a cmake invocation. It is the top level class when
|
||||||
|
// running cmake. Most cmake based GUIS should primarily create an instance
|
||||||
|
// of this class and communicate with it.
|
||||||
|
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmStandardIncludes.h"
|
#include "cmStandardIncludes.h"
|
||||||
|
@ -62,6 +64,21 @@ class cmake
|
||||||
*/
|
*/
|
||||||
cmake();
|
cmake();
|
||||||
~cmake();
|
~cmake();
|
||||||
|
|
||||||
|
///! Create a named generator
|
||||||
|
cmMakefileGenerator* CreateGenerator(const char* name);
|
||||||
|
///! Register a generator
|
||||||
|
void RegisterGenerator(cmMakefileGenerator*);
|
||||||
|
///! Get the names of the current registered generators
|
||||||
|
void GetRegisteredGenerators(std::vector<std::string>& names);
|
||||||
|
|
||||||
|
///! get the cmCachemManager used by this invocation of cmake
|
||||||
|
cmCacheManager *GetCacheManager() {
|
||||||
|
return &m_CacheManager; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::map<cmStdString, cmMakefileGenerator*> m_RegisteredGenerators;
|
||||||
|
cmCacheManager m_CacheManager;
|
||||||
private:
|
private:
|
||||||
bool m_Verbose;
|
bool m_Verbose;
|
||||||
bool m_Local;
|
bool m_Local;
|
||||||
|
|
|
@ -52,13 +52,9 @@ int main(int ac, char** av)
|
||||||
{
|
{
|
||||||
cmakewizard wizard;
|
cmakewizard wizard;
|
||||||
wizard.RunWizard(args);
|
wizard.RunWizard(args);
|
||||||
cmMakefileGenerator::UnRegisterGenerators();
|
|
||||||
cmCacheManager::DeleteInstance();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
cmake cm;
|
cmake cm;
|
||||||
int ret = cm.Generate(args);
|
int ret = cm.Generate(args);
|
||||||
cmMakefileGenerator::UnRegisterGenerators();
|
|
||||||
cmCacheManager::DeleteInstance();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,8 @@ cmakewizard::cmakewizard()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cmakewizard::AskUser(const char* key, cmCacheManager::CacheEntry & entry)
|
void cmakewizard::AskUser(const char* key, cmCacheManager::CacheEntry & entry,
|
||||||
|
cmCacheManager *cacheManager)
|
||||||
{
|
{
|
||||||
std::cout << "Variable Name: " << key << "\n";
|
std::cout << "Variable Name: " << key << "\n";
|
||||||
std::cout << "Description: " << entry.m_HelpString << "\n";
|
std::cout << "Description: " << entry.m_HelpString << "\n";
|
||||||
|
@ -35,8 +36,7 @@ void cmakewizard::AskUser(const char* key, cmCacheManager::CacheEntry & entry)
|
||||||
std::cin.getline(buffer, sizeof(buffer));
|
std::cin.getline(buffer, sizeof(buffer));
|
||||||
if(buffer[0])
|
if(buffer[0])
|
||||||
{
|
{
|
||||||
cmCacheManager::CacheEntry *entry =
|
cmCacheManager::CacheEntry *entry = cacheManager->GetCacheEntry(key);
|
||||||
cmCacheManager::GetInstance()->GetCacheEntry(key);
|
|
||||||
if(entry)
|
if(entry)
|
||||||
{
|
{
|
||||||
entry->m_Value = buffer;
|
entry->m_Value = buffer;
|
||||||
|
@ -101,7 +101,7 @@ void cmakewizard::RunWizard(std::vector<std::string> const& args)
|
||||||
make.Generate(args);
|
make.Generate(args);
|
||||||
this->ShowMessage("\n");
|
this->ShowMessage("\n");
|
||||||
// load the cache from disk
|
// load the cache from disk
|
||||||
cmCacheManager *cachem = cmCacheManager::GetInstance();
|
cmCacheManager *cachem = make.GetCacheManager();
|
||||||
cachem->
|
cachem->
|
||||||
LoadCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
|
LoadCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
|
||||||
cmCacheManager::CacheIterator i = cachem->NewIterator();
|
cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||||
|
@ -120,25 +120,24 @@ void cmakewizard::RunWizard(std::vector<std::string> const& args)
|
||||||
cmCacheManager::CacheEntry& e = askedCache.find(key)->second;
|
cmCacheManager::CacheEntry& e = askedCache.find(key)->second;
|
||||||
if(e.m_Value != ce.m_Value)
|
if(e.m_Value != ce.m_Value)
|
||||||
{
|
{
|
||||||
if(m_ShowAdvanced || !cmCacheManager::GetInstance()->IsAdvanced(key.c_str()))
|
if(m_ShowAdvanced || !cachem->IsAdvanced(key.c_str()))
|
||||||
{
|
{
|
||||||
this->AskUser(key.c_str(), ce);
|
this->AskUser(key.c_str(), ce, cachem);
|
||||||
asked = true;
|
asked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(m_ShowAdvanced || !cmCacheManager::GetInstance()->IsAdvanced(key.c_str()))
|
if(m_ShowAdvanced || !cachem->IsAdvanced(key.c_str()))
|
||||||
{
|
{
|
||||||
this->AskUser(key.c_str(), ce);
|
this->AskUser(key.c_str(), ce, cachem);
|
||||||
asked = true;
|
asked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
askedCache[key] = i.GetEntry();
|
askedCache[key] = i.GetEntry();
|
||||||
}
|
}
|
||||||
cmCacheManager::GetInstance()->
|
cachem->SaveCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
|
||||||
SaveCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
|
|
||||||
}
|
}
|
||||||
while(asked);
|
while(asked);
|
||||||
this->ShowMessage("CMake complete, run make to build project.\n");
|
this->ShowMessage("CMake complete, run make to build project.\n");
|
||||||
|
|
|
@ -31,7 +31,8 @@ public:
|
||||||
/**
|
/**
|
||||||
* Prompt the User for a new value for key, the answer is put in entry.
|
* Prompt the User for a new value for key, the answer is put in entry.
|
||||||
*/
|
*/
|
||||||
virtual void AskUser(const char* key, cmCacheManager::CacheEntry & entry);
|
virtual void AskUser(const char* key, cmCacheManager::CacheEntry & entry,
|
||||||
|
cmCacheManager *cm);
|
||||||
///! Show a message to wait for cmake to run.
|
///! Show a message to wait for cmake to run.
|
||||||
virtual void ShowMessage(const char*);
|
virtual void ShowMessage(const char*);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue