ENH: Add support for preinstall for cmake generated projects when packaging them
This commit is contained in:
parent
e4f3568099
commit
bad1215a85
|
@ -12,7 +12,7 @@ MACRO(cpack_set_if_not_set name value)
|
||||||
ENDMACRO(cpack_set_if_not_set)
|
ENDMACRO(cpack_set_if_not_set)
|
||||||
|
|
||||||
# Set the package name
|
# Set the package name
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
|
cpack_set_if_not_set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MAJOR "0")
|
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MAJOR "0")
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MINOR "1")
|
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MINOR "1")
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_PATCH "1")
|
cpack_set_if_not_set(CPACK_PACKAGE_VERSION_PATCH "1")
|
||||||
|
@ -20,7 +20,7 @@ cpack_set_if_not_set(CPACK_PACKAGE_VERSION
|
||||||
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_VENDOR "Humanity")
|
cpack_set_if_not_set(CPACK_PACKAGE_VENDOR "Humanity")
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
||||||
"${PROJECT_NAME} built using CMake")
|
"${CMAKE_PROJECT_NAME} built using CMake")
|
||||||
|
|
||||||
cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_FILE
|
cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_FILE
|
||||||
"${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
|
"${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
|
||||||
|
@ -70,6 +70,7 @@ ENDIF(NOT CPACK_GENERATOR)
|
||||||
cpack_set_if_not_set(CPACK_BINARY_DIR "${CMAKE_BINARY_DIR}")
|
cpack_set_if_not_set(CPACK_BINARY_DIR "${CMAKE_BINARY_DIR}")
|
||||||
cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS
|
cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS
|
||||||
"${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME}")
|
"${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME}")
|
||||||
|
cpack_set_if_not_set(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
|
||||||
|
|
||||||
SET(_CPACK_UNUSED_VARIABLES_)
|
SET(_CPACK_UNUSED_VARIABLES_)
|
||||||
GET_CMAKE_PROPERTY(res VARIABLES)
|
GET_CMAKE_PROPERTY(res VARIABLES)
|
||||||
|
|
|
@ -225,14 +225,25 @@ int cmCPackGenericGenerator::InstallProject()
|
||||||
{
|
{
|
||||||
cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying file: "
|
cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying file: "
|
||||||
<< inFile.c_str() << " -> " << filePath.c_str() << std::endl);
|
<< inFile.c_str() << " -> " << filePath.c_str() << std::endl);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const char* cmakeProjects
|
const char* cmakeProjects
|
||||||
= this->GetOption("CPACK_INSTALL_CMAKE_PROJECTS");
|
= this->GetOption("CPACK_INSTALL_CMAKE_PROJECTS");
|
||||||
|
const char* cmakeGenerator
|
||||||
|
= this->GetOption("CPACK_CMAKE_GENERATOR");
|
||||||
if ( cmakeProjects )
|
if ( cmakeProjects )
|
||||||
{
|
{
|
||||||
|
if ( !cmakeGenerator )
|
||||||
|
{
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
"CPACK_INSTALL_CMAKE_PROJECTS is specified, but CPACK_CMAKE_GENERATOR "
|
||||||
|
"is not. CPACK_CMAKE_GENERATOR is required to install the project."
|
||||||
|
<< std::endl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
std::vector<std::string> cmakeProjectsVector;
|
std::vector<std::string> cmakeProjectsVector;
|
||||||
cmSystemTools::ExpandListArgument(cmakeProjects,
|
cmSystemTools::ExpandListArgument(cmakeProjects,
|
||||||
cmakeProjectsVector);
|
cmakeProjectsVector);
|
||||||
|
@ -244,9 +255,53 @@ int cmCPackGenericGenerator::InstallProject()
|
||||||
std::string installDirectory = it->c_str();
|
std::string installDirectory = it->c_str();
|
||||||
++it;
|
++it;
|
||||||
std::string installProjectName = it->c_str();
|
std::string installProjectName = it->c_str();
|
||||||
|
std::string installFile = installDirectory + "/cmake_install.cmake";
|
||||||
|
|
||||||
|
const char* buildConfig = this->GetOption("CPACK_BUILD_CONFIG");
|
||||||
|
cmGlobalGenerator* globalGenerator
|
||||||
|
= this->MakefileMap->GetCMakeInstance()->CreateGlobalGenerator(
|
||||||
|
cmakeGenerator);
|
||||||
|
|
||||||
|
// Does this generator require pre-install?
|
||||||
|
if ( globalGenerator->GetPreinstallTargetName() )
|
||||||
|
{
|
||||||
|
globalGenerator->FindMakeProgram(this->MakefileMap);
|
||||||
|
const char* cmakeMakeProgram
|
||||||
|
= this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM");
|
||||||
|
std::string buildCommand
|
||||||
|
= globalGenerator->GenerateBuildCommand(cmakeMakeProgram,
|
||||||
|
installProjectName.c_str(), 0,
|
||||||
|
globalGenerator->GetPreinstallTargetName(),
|
||||||
|
buildConfig, false);
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_DEBUG,
|
||||||
|
"- Install command: " << buildCommand << std::endl);
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
|
||||||
|
"- Run preinstall target for: " << installProjectName << std::endl);
|
||||||
|
std::string output;
|
||||||
|
int retVal = 1;
|
||||||
|
bool resB = cmSystemTools::RunSingleCommand(buildCommand.c_str(), &output,
|
||||||
|
&retVal, installDirectory.c_str(), this->GeneratorVerbose, 0);
|
||||||
|
if ( !resB || retVal )
|
||||||
|
{
|
||||||
|
std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
|
||||||
|
tmpFile += "/PreinstallOutput.log";
|
||||||
|
cmGeneratedFileStream ofs(tmpFile.c_str());
|
||||||
|
ofs << "# Run command: " << buildCommand.c_str() << std::endl
|
||||||
|
<< "# Directory: " << installDirectory.c_str() << std::endl
|
||||||
|
<< "# Output:" << std::endl
|
||||||
|
<< output.c_str() << std::endl;
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
"Problem running install command: " << buildCommand.c_str()
|
||||||
|
<< std::endl
|
||||||
|
<< "Please check " << tmpFile.c_str() << " for errors"
|
||||||
|
<< std::endl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete globalGenerator;
|
||||||
|
|
||||||
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
|
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
|
||||||
"- Install project: " << installProjectName << std::endl);
|
"- Install project: " << installProjectName << std::endl);
|
||||||
std::string installFile = installDirectory + "/cmake_install.cmake";
|
|
||||||
cmake cm;
|
cmake cm;
|
||||||
cmGlobalGenerator gg;
|
cmGlobalGenerator gg;
|
||||||
gg.SetCMakeInstance(&cm);
|
gg.SetCMakeInstance(&cm);
|
||||||
|
@ -257,7 +312,6 @@ int cmCPackGenericGenerator::InstallProject()
|
||||||
{
|
{
|
||||||
mf->AddDefinition("CMAKE_INSTALL_PREFIX", tempInstallDirectory);
|
mf->AddDefinition("CMAKE_INSTALL_PREFIX", tempInstallDirectory);
|
||||||
}
|
}
|
||||||
const char* buildConfig = this->GetOption("CPACK_BUILD_CONFIG");
|
|
||||||
if ( buildConfig && *buildConfig )
|
if ( buildConfig && *buildConfig )
|
||||||
{
|
{
|
||||||
mf->AddDefinition("BUILD_TYPE", buildConfig);
|
mf->AddDefinition("BUILD_TYPE", buildConfig);
|
||||||
|
|
|
@ -175,6 +175,14 @@ public:
|
||||||
configuration. This is valid during generation only. */
|
configuration. This is valid during generation only. */
|
||||||
cmTargetManifest const& GetTargetManifest() { return this->TargetManifest; }
|
cmTargetManifest const& GetTargetManifest() { return this->TargetManifest; }
|
||||||
|
|
||||||
|
virtual const char* GetAllTargetName() { return "ALL_BUILD"; }
|
||||||
|
virtual const char* GetInstallTargetName() { return "INSTALL"; }
|
||||||
|
virtual const char* GetPreinstallTargetName() { return 0; }
|
||||||
|
virtual const char* GetTestTargetName() { return "RUN_TESTS"; }
|
||||||
|
virtual const char* GetPackageTargetName() { return "PACKAGE"; }
|
||||||
|
virtual const char* GetEditCacheTargetName() { return 0; }
|
||||||
|
virtual const char* GetRebuildCacheTargetName() { return 0; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Fill the ProjectMap, this must be called after LocalGenerators
|
// Fill the ProjectMap, this must be called after LocalGenerators
|
||||||
// has been populated.
|
// has been populated.
|
||||||
|
@ -189,14 +197,6 @@ protected:
|
||||||
const cmCustomCommandLines* commandLines,
|
const cmCustomCommandLines* commandLines,
|
||||||
std::vector<std::string> depends, bool depends_on_all = false);
|
std::vector<std::string> depends, bool depends_on_all = false);
|
||||||
|
|
||||||
virtual const char* GetAllTargetName() { return "ALL_BUILD"; }
|
|
||||||
virtual const char* GetInstallTargetName() { return "INSTALL"; }
|
|
||||||
virtual const char* GetPreinstallTargetName() { return 0; }
|
|
||||||
virtual const char* GetTestTargetName() { return "RUN_TESTS"; }
|
|
||||||
virtual const char* GetPackageTargetName() { return "PACKAGE"; }
|
|
||||||
virtual const char* GetEditCacheTargetName() { return 0; }
|
|
||||||
virtual const char* GetRebuildCacheTargetName() { return 0; }
|
|
||||||
|
|
||||||
bool ForceUnixPaths;
|
bool ForceUnixPaths;
|
||||||
bool ToolSupportsColorVT100;
|
bool ToolSupportsColorVT100;
|
||||||
cmStdString FindMakeProgramFile;
|
cmStdString FindMakeProgramFile;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "cmake.h"
|
#include "cmake.h"
|
||||||
#include "cmDocumentation.h"
|
#include "cmDocumentation.h"
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
static const cmDocumentationEntry cmDocumentationName[] =
|
static const cmDocumentationEntry cmDocumentationName[] =
|
||||||
{
|
{
|
||||||
|
@ -207,8 +208,6 @@ int main (int argc, char *argv[])
|
||||||
nocwd = 1;
|
nocwd = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// If there is a testing input file, check for documentation options
|
// If there is a testing input file, check for documentation options
|
||||||
// only if there are actually arguments. We want running without
|
// only if there are actually arguments. We want running without
|
||||||
// arguments to run tests.
|
// arguments to run tests.
|
||||||
|
|
Loading…
Reference in New Issue