diff options
author | Brad King <brad.king@kitware.com> | 2006-02-19 20:25:27 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2006-02-19 20:25:27 (GMT) |
commit | 96f0266228d8fdf7d420c4a562e6988830fa4996 (patch) | |
tree | 2525ae96a1752df9f6024ee4f08c84c480bbe0a6 /Source/cmInstallGenerator.cxx | |
parent | 90c8ea1c03dea51c87fc75a38e018e5f9ce11546 (diff) | |
download | CMake-96f0266228d8fdf7d420c4a562e6988830fa4996.zip CMake-96f0266228d8fdf7d420c4a562e6988830fa4996.tar.gz CMake-96f0266228d8fdf7d420c4a562e6988830fa4996.tar.bz2 |
ENH: Created new install script generation framework. The INSTALL command creates the generators which are later used by cmLocalGenerator to create the cmake_install.cmake files. A new target installation interface is provided by the INSTALL command which fixes several problems with the INSTALL_TARGETS command. See bug#2691. Bugs 1481 and 1695 are addressed by these changes.
Diffstat (limited to 'Source/cmInstallGenerator.cxx')
-rw-r--r-- | Source/cmInstallGenerator.cxx | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx new file mode 100644 index 0000000..5448383 --- /dev/null +++ b/Source/cmInstallGenerator.cxx @@ -0,0 +1,82 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "cmInstallGenerator.h" + +#include "cmSystemTools.h" +#include "cmTarget.h" + +//---------------------------------------------------------------------------- +cmInstallGenerator +::cmInstallGenerator() +{ + this->ConfigurationName = 0; + this->ConfigurationTypes = 0; +} + +//---------------------------------------------------------------------------- +cmInstallGenerator +::~cmInstallGenerator() +{ +} + +//---------------------------------------------------------------------------- +void +cmInstallGenerator +::Generate(std::ostream& os, const char* config, + std::vector<std::string> const& configurationTypes) +{ + this->ConfigurationName = config; + this->ConfigurationTypes = &configurationTypes; + this->GenerateScript(os); + this->ConfigurationName = 0; + this->ConfigurationTypes = 0; +} + +//---------------------------------------------------------------------------- +void cmInstallGenerator::AddInstallRule(std::ostream& os, + const char* dest, + int type, + const char* files, + bool optional /* = false */, + const char* properties /* = 0 */) +{ + // TODO: Make optional files use IF(EXISTS) to not report if not + // installing. + std::string sfiles = files; + std::string destination = dest; + std::string stype; + switch(type) + { + case cmTarget::INSTALL_PROGRAMS: stype = "PROGRAM"; break; + case cmTarget::EXECUTABLE: stype = "EXECUTABLE"; break; + case cmTarget::STATIC_LIBRARY: stype = "STATIC_LIBRARY"; break; + case cmTarget::SHARED_LIBRARY: stype = "SHARED_LIBRARY"; break; + case cmTarget::MODULE_LIBRARY: stype = "MODULE"; break; + case cmTarget::INSTALL_FILES: + default: stype = "FILE"; break; + } + std::string fname = cmSystemTools::GetFilenameName(sfiles.c_str()); + os << "MESSAGE(STATUS \"Installing " << destination.c_str() + << "/" << fname.c_str() << "\")\n" + << "FILE(INSTALL DESTINATION \"" << destination.c_str() + << "\" TYPE " << stype.c_str() << (optional?" OPTIONAL":"") ; + if(properties && *properties) + { + os << " PROPERTIES" << properties; + } + os << " FILES \"" << sfiles.c_str() << "\")\n"; +} |