ENH: Several CPack fixes. First, allow user to set CMAKE_MODULE_PATH for CPack; make SetOptionIfNotSet more robust to handle empty options; do test TGZ, STGZ, and TZ, Add handling (and test) of Install Script; set environment variable CMAKE_INSTALL_PREFIX

This commit is contained in:
Andy Cedilnik
2006-10-12 13:05:50 -04:00
parent 77a4227652
commit e31dc3abe5
6 changed files with 66 additions and 3 deletions
+53 -1
View File
@@ -184,6 +184,14 @@ int cmCPackGenericGenerator::InstallProject()
return 0;
}
// If the CPackConfig file sets CPACK_INSTALL_SCRIPT then run them
// as listed
if ( !this->InstallProjectViaInstallScript(
movable, tempInstallDirectory) )
{
return 0;
}
// If the CPackConfig file sets CPACK_INSTALLED_DIRECTORIES
// then glob it and copy it to CPACK_TEMPORARY_DIRECTORY
// This is used in Source packageing
@@ -258,6 +266,9 @@ int cmCPackGenericGenerator::InstallProjectViaInstallCommands(
const char* installCommands = this->GetOption("CPACK_INSTALL_COMMANDS");
if ( installCommands && *installCommands )
{
std::string tempInstallDirectoryEnv = "CMAKE_INSTALL_PREFIX=";
tempInstallDirectoryEnv += tempInstallDirectory;
cmSystemTools::PutEnv(tempInstallDirectoryEnv.c_str());
std::vector<std::string> installCommandsVector;
cmSystemTools::ExpandListArgument(installCommands,installCommandsVector);
std::vector<std::string>::iterator it;
@@ -390,6 +401,46 @@ int cmCPackGenericGenerator::InstallProjectViaInstalledDirectories(
return 1;
}
//----------------------------------------------------------------------
int cmCPackGenericGenerator::InstallProjectViaInstallScript(
bool movable, const char* tempInstallDirectory)
{
const char* cmakeScripts
= this->GetOption("CPACK_INSTALL_SCRIPT");
std::string currentWorkingDirectory =
cmSystemTools::GetCurrentWorkingDirectory();
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
"- Install scripts: " << cmakeScripts << std::endl);
if ( cmakeScripts && *cmakeScripts )
{
std::vector<std::string> cmakeScriptsVector;
cmSystemTools::ExpandListArgument(cmakeScripts,
cmakeScriptsVector);
std::vector<std::string>::iterator it;
for ( it = cmakeScriptsVector.begin();
it != cmakeScriptsVector.end();
++it )
{
std::string installScript = it->c_str();
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
"- Install script: " << installScript << std::endl);
if ( movable )
{
this->SetOption("CMAKE_INSTALL_PREFIX", tempInstallDirectory);
}
this->SetOptionIfNotSet("CMAKE_CURRENT_BINARY_DIR", tempInstallDirectory);
this->SetOptionIfNotSet("CMAKE_CURRENT_SOURCE_DIR", tempInstallDirectory);
int res = this->MakefileMap->ReadListFile(0, installScript.c_str());
if ( cmSystemTools::GetErrorOccuredFlag() || !res )
{
return 0;
}
}
}
return 1;
}
//----------------------------------------------------------------------
int cmCPackGenericGenerator::InstallProjectViaInstallCMakeProjects(
bool movable, const char* tempInstallDirectory)
@@ -535,7 +586,8 @@ int cmCPackGenericGenerator::InstallProjectViaInstallCMakeProjects(
void cmCPackGenericGenerator::SetOptionIfNotSet(const char* op,
const char* value)
{
if ( this->MakefileMap->GetDefinition(op) )
const char* def = this->MakefileMap->GetDefinition(op);
if ( def && *def )
{
return;
}
+2
View File
@@ -110,6 +110,8 @@ protected:
//! Run install commands if specified
virtual int InstallProjectViaInstallCommands(
bool movable, const char* tempInstallDirectory);
virtual int InstallProjectViaInstallScript(
bool movable, const char* tempInstallDirectory);
virtual int InstallProjectViaInstalledDirectories(
bool movable, const char* tempInstallDirectory);
virtual int InstallProjectViaInstallCMakeProjects(
+5
View File
@@ -301,6 +301,11 @@ int main (int argc, char *argv[])
globalMF->AddDefinition(cdit->first.c_str(), cdit->second.c_str());
}
const char* cpackModulesPath = globalMF->GetDefinition("CPACK_MODULE_PATH");
if ( cpackModulesPath )
{
globalMF->AddDefinition("CMAKE_MODULE_PATH", cpackModulesPath);
}
const char* genList = globalMF->GetDefinition("CPACK_GENERATOR");
if ( !genList )
{