1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #include "cmInstallFilesGenerator.h"
- #include "cmGeneratorExpression.h"
- #include "cmMakefile.h"
- #include "cmSystemTools.h"
- //----------------------------------------------------------------------------
- cmInstallFilesGenerator
- ::cmInstallFilesGenerator(cmMakefile* mf,
- std::vector<std::string> const& files,
- const char* dest, bool programs,
- const char* file_permissions,
- std::vector<std::string> const& configurations,
- const char* component,
- MessageLevel message,
- const char* rename,
- bool optional):
- cmInstallGenerator(dest, configurations, component, message),
- Makefile(mf),
- Files(files), Programs(programs),
- FilePermissions(file_permissions),
- Rename(rename), Optional(optional)
- {
- // We need per-config actions if any files have generator expressions.
- for(std::vector<std::string>::const_iterator i = files.begin();
- !this->ActionsPerConfig && i != files.end(); ++i)
- {
- if(cmGeneratorExpression::Find(*i) != std::string::npos)
- {
- this->ActionsPerConfig = true;
- }
- }
- }
- //----------------------------------------------------------------------------
- cmInstallFilesGenerator
- ::~cmInstallFilesGenerator()
- {
- }
- //----------------------------------------------------------------------------
- void cmInstallFilesGenerator::AddFilesInstallRule(
- std::ostream& os, Indent const& indent,
- std::vector<std::string> const& files)
- {
- // Write code to install the files.
- const char* no_dir_permissions = 0;
- this->AddInstallRule(os,
- (this->Programs
- ? cmInstallType_PROGRAMS
- : cmInstallType_FILES),
- files,
- this->Optional,
- this->FilePermissions.c_str(), no_dir_permissions,
- this->Rename.c_str(), 0, indent);
- }
- //----------------------------------------------------------------------------
- void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
- Indent const& indent)
- {
- if(this->ActionsPerConfig)
- {
- this->cmInstallGenerator::GenerateScriptActions(os, indent);
- }
- else
- {
- this->AddFilesInstallRule(os, indent, this->Files);
- }
- }
- //----------------------------------------------------------------------------
- void cmInstallFilesGenerator::GenerateScriptForConfig(std::ostream& os,
- const std::string& config,
- Indent const& indent)
- {
- std::vector<std::string> files;
- cmGeneratorExpression ge;
- for(std::vector<std::string>::const_iterator i = this->Files.begin();
- i != this->Files.end(); ++i)
- {
- cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(*i);
- cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile, config),
- files);
- }
- this->AddFilesInstallRule(os, indent, files);
- }
|