summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2006-03-28 18:16:15 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2006-03-28 18:16:15 (GMT)
commited5f95cf230c5ccd4376ff6dcc8e57330611f256 (patch)
tree77a16a0730fba3cf83ade11a8632e6272ada3e42 /Source
parent0d540b31e01b1c478636e35dfc8bb58405e77629 (diff)
downloadCMake-ed5f95cf230c5ccd4376ff6dcc8e57330611f256.zip
CMake-ed5f95cf230c5ccd4376ff6dcc8e57330611f256.tar.gz
CMake-ed5f95cf230c5ccd4376ff6dcc8e57330611f256.tar.bz2
ENH: Add proper support for installing bundles
Diffstat (limited to 'Source')
-rw-r--r--Source/cmFileCommand.cxx22
-rw-r--r--Source/cmInstallGenerator.cxx1
-rw-r--r--Source/cmInstallTargetGenerator.cxx20
-rw-r--r--Source/cmTarget.h2
4 files changed, 25 insertions, 20 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index dbb8799..0262bb5 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -571,6 +571,10 @@ bool cmFileCommand::HandleInstallCommand(
{
itype = cmTarget::MODULE_LIBRARY;
}
+ else if ( stype == "DIRECTORY" )
+ {
+ itype = cmTarget::INSTALL_DIRECTORY;
+ }
if ( !cmSystemTools::FileExists(destination.c_str()) )
{
@@ -775,7 +779,23 @@ bool cmFileCommand::HandleInstallCommand(
std::string message;
if(!cmSystemTools::SameFile(fromFile.c_str(), toFile.c_str()))
{
- if(cmSystemTools::FileExists(fromFile.c_str()))
+ if(itype == cmTarget::INSTALL_DIRECTORY &&
+ cmSystemTools::FileIsDirectory(fromFile.c_str()))
+ {
+ // We will install this file. Display the information.
+ message = "Installing ";
+ message += toFile.c_str();
+ this->Makefile->DisplayStatus(message.c_str(), -1);
+ if(!cmSystemTools::CopyADirectory(fromFile.c_str(), toFile.c_str()))
+ {
+ cmOStringStream e;
+ e << "INSTALL cannot copy directory \"" << fromFile
+ << "\" to \"" << toFile + "\".";
+ this->SetError(e.str().c_str());
+ return false;
+ }
+ }
+ else if(cmSystemTools::FileExists(fromFile.c_str()))
{
// We will install this file. Display the information.
message = "Installing ";
diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx
index 0cb3a51..3a7fd92 100644
--- a/Source/cmInstallGenerator.cxx
+++ b/Source/cmInstallGenerator.cxx
@@ -60,6 +60,7 @@ void cmInstallGenerator::AddInstallRule(std::ostream& os,
std::string stype;
switch(type)
{
+ case cmTarget::INSTALL_DIRECTORY:stype = "DIRECTORY"; break;
case cmTarget::INSTALL_PROGRAMS: stype = "PROGRAM"; break;
case cmTarget::EXECUTABLE: stype = "EXECUTABLE"; break;
case cmTarget::STATIC_LIBRARY: stype = "STATIC_LIBRARY"; break;
diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx
index be56e91..90b14a4 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -123,24 +123,8 @@ void cmInstallTargetGenerator::GenerateScript(std::ostream& os)
// Info.plist file.
this->PrepareScriptReference(os, this->Target, "INSTALL",
false, false);
- std::string plist = fromFile;
- plist += ".app/Contents/Info.plist";
- fromFile += ".app/Contents/MacOS/";
- fromFile += this->GetScriptReference(this->Target, "INSTALL",
- false);
-
- // Compute the destination locations of the bundle Info.plist file.
- destination += "/";
- destination += this->GetScriptReference(this->Target, "INSTALL",
- false);
- destination += ".app/Contents";
-
- // Install the Info.plist file.
- this->AddInstallRule(os, destination.c_str(), cmTarget::INSTALL_FILES,
- plist.c_str());
-
- // Compute the destination locations of the bundle executable file.
- destination += "/MacOS";
+ fromFile += ".app";
+ type = cmTarget::INSTALL_DIRECTORY;
}
}
break;
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 6ad4770..067619a 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -35,7 +35,7 @@ public:
cmTarget();
enum TargetType { EXECUTABLE, STATIC_LIBRARY,
SHARED_LIBRARY, MODULE_LIBRARY, UTILITY, GLOBAL_TARGET,
- INSTALL_FILES, INSTALL_PROGRAMS};
+ INSTALL_FILES, INSTALL_PROGRAMS, INSTALL_DIRECTORY};
enum CustomCommandType { PRE_BUILD, PRE_LINK, POST_BUILD };