From ed5f95cf230c5ccd4376ff6dcc8e57330611f256 Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Tue, 28 Mar 2006 13:16:15 -0500 Subject: ENH: Add proper support for installing bundles --- Source/cmFileCommand.cxx | 22 +++++++++++++++++++++- Source/cmInstallGenerator.cxx | 1 + Source/cmInstallTargetGenerator.cxx | 20 ++------------------ Source/cmTarget.h | 2 +- 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 }; -- cgit v0.12