Use CPACK_xxx and CMAKE_xxx in a consistent way.

CMAKE_xxx vars are now used in the CMake-generated cmake_install.cmake
script while CPACK_xxx equivalent vars are used from within CPack.
CPack is responsible for getting/forwarding definitions of
CPACK_xxxx var corresponding to CMAKE_xxxx when invoking
CMake-generated install scripts.
As a consequence:
CMAKE_ABSOLUTE_DESTINATION_FILES
CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
may be used from outside CPack as well.
e.g.
cmake -DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=1 -P cmake_install.cmake
works as expected.
This commit is contained in:
Eric NOULARD 2012-05-20 17:28:54 +02:00
parent f90223cafc
commit 4986d525af
4 changed files with 66 additions and 13 deletions

View File

@ -78,19 +78,34 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm)
" The script is not called by e.g.: make install.", false, " The script is not called by e.g.: make install.", false,
"Variables common to all CPack generators"); "Variables common to all CPack generators");
cm->DefineProperty
("CPACK_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
"List of files which have been installed using "
" an ABSOLUTE DESTINATION path.",
"This variable is a Read-Only variable which is set internally"
" by CPack during installation and before packaging using"
" CMAKE_ABSOLUTE_DESTINATION_FILES defined in cmake_install.cmake "
"scripts. The value can be used within CPack project configuration"
" file and/or CPack<GEN>.cmake file of <GEN> generator.", false,
"Variables common to all CPack generators");
cm->DefineProperty cm->DefineProperty
("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE, ("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
"Ask CPack to warn each time a file with absolute INSTALL" "Ask CPack to warn each time a file with absolute INSTALL"
" DESTINATION is encountered.", " DESTINATION is encountered.",
"", false, "This variable triggers the definition of "
"CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
" cmake_install.cmake scripts.", false,
"Variables common to all CPack generators"); "Variables common to all CPack generators");
cm->DefineProperty cm->DefineProperty
("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE, ("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
"Ask CPack to error out as soon as a file with absolute INSTALL" "Ask CPack to error out as soon as a file with absolute INSTALL"
" DESTINATION is encountered", " DESTINATION is encountered.",
"The fatal error is emitted before the installation of " "The fatal error is emitted before the installation of "
"the offending file takes place. Some CPack generators, like NSIS," "the offending file takes place. Some CPack generators, like NSIS,"
"enforce this internally.", false, "enforce this internally. "
"This variable triggers the definition of"
"CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
"Variables common to all CPack generators"); "Variables common to all CPack generators");
} }

View File

@ -854,7 +854,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
// then forward request to cmake_install.cmake script // then forward request to cmake_install.cmake script
if (this->GetOption("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION")) if (this->GetOption("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION"))
{ {
mf->AddDefinition("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", mf->AddDefinition("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION",
"1"); "1");
} }
// If current CPack generator does support // If current CPack generator does support
@ -864,11 +864,19 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
if (!SupportsAbsoluteDestination() || if (!SupportsAbsoluteDestination() ||
this->GetOption("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION")) this->GetOption("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION"))
{ {
mf->AddDefinition("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", mf->AddDefinition("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION",
"1"); "1");
} }
// do installation // do installation
int res = mf->ReadListFile(0, installFile.c_str()); int res = mf->ReadListFile(0, installFile.c_str());
// forward definition of CMAKE_ABSOLUTE_DESTINATION_FILES
// to CPack (may be used by generators like CPack RPM or DEB)
// in order to transparently handle ABSOLUTE PATH
if (mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"))
{
mf->AddDefinition("CPACK_ABSOLUTE_DESTINATION_FILES",
mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"));
}
// Now rebuild the list of files after installation // Now rebuild the list of files after installation
// of the current component (if we are in component install) // of the current component (if we are in component install)

View File

@ -833,6 +833,36 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Default is ON.",false, "Default is ON.",false,
"Variables That Change Behavior"); "Variables That Change Behavior");
cm->DefineProperty
("CMAKE_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
"List of files which have been installed using "
" an ABSOLUTE DESTINATION path.",
"This variable is defined by CMake-generated cmake_install.cmake "
"scripts."
" It can be used (read-only) by program or script that source those"
" install scripts. This is used by some CPack generators (e.g. RPM).",
false,
"Variables That Change Behavior");
cm->DefineProperty
("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
"Ask cmake_install.cmake script to warn each time a file with "
"absolute INSTALL DESTINATION is encountered.",
"This variable is used by CMake-generated cmake_install.cmake"
" scripts. If ones set this variable to ON while running the"
" script, it may get warning messages from the script.", false,
"Variables That Change Behavior");
cm->DefineProperty
("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
"Ask cmake_install.cmake script to error out as soon as "
"a file with absolute INSTALL DESTINATION is encountered.",
"The fatal error is emitted before the installation of "
"the offending file takes place."
" This variable is used by CMake-generated cmake_install.cmake"
" scripts. If ones set this variable to ON while running the"
" script, it may get fatal error messages from the script.",false,
"Variables That Change Behavior");
// Variables defined by CMake that describe the system // Variables defined by CMake that describe the system

View File

@ -60,7 +60,7 @@ void cmInstallGenerator
std::string dest = this->GetInstallDestination(); std::string dest = this->GetInstallDestination();
if (cmSystemTools::FileIsFullPath(dest.c_str())) if (cmSystemTools::FileIsFullPath(dest.c_str()))
{ {
os << "list(APPEND CPACK_ABSOLUTE_DESTINATION_FILES\n"; os << "list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES\n";
os << indent << " \""; os << indent << " \"";
for(std::vector<std::string>::const_iterator fi = files.begin(); for(std::vector<std::string>::const_iterator fi = files.begin();
fi != files.end(); ++fi) fi != files.end(); ++fi)
@ -80,16 +80,16 @@ void cmInstallGenerator
} }
} }
os << "\")\n"; os << "\")\n";
os << indent << "IF (CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n"; os << indent << "IF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
os << indent << indent << "message(WARNING \"ABSOLUTE path INSTALL " os << indent << indent << "message(WARNING \"ABSOLUTE path INSTALL "
<< "DESTINATION : ${CPACK_ABSOLUTE_DESTINATION_FILES}\")\n"; << "DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
os << indent << "ENDIF (CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n"; os << indent << "ENDIF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
os << indent << "IF (CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n"; os << indent << "IF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
os << indent << indent << "message(FATAL_ERROR \"ABSOLUTE path INSTALL " os << indent << indent << "message(FATAL_ERROR \"ABSOLUTE path INSTALL "
<< "DESTINATION forbidden (by CPack): " << "DESTINATION forbidden (by caller): "
<< "${CPACK_ABSOLUTE_DESTINATION_FILES}\")\n"; << "${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
os << indent << "ENDIF (CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n"; os << indent << "ENDIF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
} }
os << "FILE(INSTALL DESTINATION \"" << dest << "\" TYPE " << stype.c_str(); os << "FILE(INSTALL DESTINATION \"" << dest << "\" TYPE " << stype.c_str();
if(optional) if(optional)