summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmInstallCommand.cxx23
-rw-r--r--Source/cmInstallCommand.h12
-rw-r--r--Source/cmInstallScriptGenerator.cxx12
-rw-r--r--Source/cmInstallScriptGenerator.h3
4 files changed, 43 insertions, 7 deletions
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index f51fb28..0669b7f 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -35,6 +35,10 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args)
{
return this->HandleScriptMode(args);
}
+ else if(args[0] == "CODE")
+ {
+ return this->HandleScriptMode(args);
+ }
else if(args[0] == "TARGETS")
{
return this->HandleTargetsMode(args);
@@ -59,11 +63,18 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args)
bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
{
bool doing_script = false;
+ bool doing_code = false;
for(size_t i=0; i < args.size(); ++i)
{
if(args[i] == "SCRIPT")
{
doing_script = true;
+ doing_code = false;
+ }
+ else if(args[i] == "CODE")
+ {
+ doing_script = false;
+ doing_code = true;
}
else if(doing_script)
{
@@ -83,12 +94,24 @@ bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
this->Makefile->AddInstallGenerator(
new cmInstallScriptGenerator(script.c_str()));
}
+ else if(doing_code)
+ {
+ doing_code = false;
+ std::string code = args[i];
+ this->Makefile->AddInstallGenerator(
+ new cmInstallScriptGenerator(code.c_str(), true));
+ }
}
if(doing_script)
{
this->SetError("given no value for SCRIPT argument.");
return false;
}
+ if(doing_code)
+ {
+ this->SetError("given no value for CODE argument.");
+ return false;
+ }
return true;
}
diff --git a/Source/cmInstallCommand.h b/Source/cmInstallCommand.h
index ea5e201..4907b91 100644
--- a/Source/cmInstallCommand.h
+++ b/Source/cmInstallCommand.h
@@ -156,12 +156,16 @@ public:
"such as shell scripts. Use the TARGETS form to install targets "
"built within the project."
"\n"
- "The SCRIPT signature:\n"
- " INSTALL(SCRIPT <file1> [SCRIPT <file2> [...]])\n"
+ "The SCRIPT and CODE signature:\n"
+ " INSTALL([[SCRIPT <file>] [CODE <code>]] [...])\n"
"The SCRIPT form will invoke the given CMake script files during "
"installation. If the script file name is a relative path "
- "it will be interpreted with respect to the current source directory."
- "\n"
+ "it will be interpreted with respect to the current source directory. "
+ "The CODE form will invoke the given CMake code during installation. "
+ "Code is specified as a single argument inside a double-quoted string. "
+ "For example, the code\n"
+ " INSTALL(CODE \"MESSAGE(\\\"Sample install message.\\\")\")\n"
+ "will print a message during installation.\n"
"NOTE: This command supercedes the INSTALL_TARGETS command and the "
"target properties PRE_INSTALL_SCRIPT and POST_INSTALL_SCRIPT. "
"It also replaces the FILES forms of the INSTALL_FILES and "
diff --git a/Source/cmInstallScriptGenerator.cxx b/Source/cmInstallScriptGenerator.cxx
index 1322f72..8bcfbc3 100644
--- a/Source/cmInstallScriptGenerator.cxx
+++ b/Source/cmInstallScriptGenerator.cxx
@@ -18,7 +18,8 @@
//----------------------------------------------------------------------------
cmInstallScriptGenerator
-::cmInstallScriptGenerator(const char* script): Script(script)
+::cmInstallScriptGenerator(const char* script, bool code):
+ Script(script), Code(code)
{
}
@@ -31,5 +32,12 @@ cmInstallScriptGenerator
//----------------------------------------------------------------------------
void cmInstallScriptGenerator::GenerateScript(std::ostream& os)
{
- os << "INCLUDE(\"" << this->Script << "\")\n";
+ if(this->Code)
+ {
+ os << this->Script << "\n";
+ }
+ else
+ {
+ os << "INCLUDE(\"" << this->Script << "\")\n";
+ }
}
diff --git a/Source/cmInstallScriptGenerator.h b/Source/cmInstallScriptGenerator.h
index 6b3cdfc..2e9461a 100644
--- a/Source/cmInstallScriptGenerator.h
+++ b/Source/cmInstallScriptGenerator.h
@@ -25,12 +25,13 @@
class cmInstallScriptGenerator: public cmInstallGenerator
{
public:
- cmInstallScriptGenerator(const char* script);
+ cmInstallScriptGenerator(const char* script, bool code = false);
virtual ~cmInstallScriptGenerator();
protected:
virtual void GenerateScript(std::ostream& os);
std::string Script;
+ bool Code;
};
#endif