|
|
@@ -167,7 +167,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
|
|
cmCAStringVector frameworkArgVector (&argHelper, "FRAMEWORK", &group);
|
|
|
cmCAStringVector bundleArgVector (&argHelper, "BUNDLE", &group);
|
|
|
cmCAStringVector resourcesArgVector (&argHelper, "RESOURCE", &group);
|
|
|
- cmCAStringVector publicHeaderArgVector(&argHelper, "PUBLIC_HEADER ", &group);
|
|
|
+ cmCAStringVector publicHeaderArgVector(&argHelper, "PUBLIC_HEADER", &group);
|
|
|
cmCAStringVector privateHeaderArgVector(&argHelper,"PRIVATE_HEADER", &group);
|
|
|
genericArgVector.Follows(0);
|
|
|
group.Follows(&genericArgVector);
|
|
|
@@ -200,7 +200,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
|
|
resourcesArgs.Parse (&resourcesArgVector.GetVector(), &unknownArgs);
|
|
|
publicHeaderArgs.Parse (&publicHeaderArgVector.GetVector(), &unknownArgs);
|
|
|
privateHeaderArgs.Parse(&privateHeaderArgVector.GetVector(), &unknownArgs);
|
|
|
-
|
|
|
+
|
|
|
if(!unknownArgs.empty())
|
|
|
{
|
|
|
// Unknown argument.
|
|
|
@@ -290,9 +290,9 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
|
|
cmInstallTargetGenerator* runtimeGenerator = 0;
|
|
|
cmInstallTargetGenerator* frameworkGenerator = 0;
|
|
|
cmInstallTargetGenerator* bundleGenerator = 0;
|
|
|
- cmInstallTargetGenerator* resourcesGenerator = 0;
|
|
|
- cmInstallTargetGenerator* publicHeaderGenerator = 0;
|
|
|
- cmInstallTargetGenerator* privateHeaderGenerator = 0;
|
|
|
+ cmInstallFilesGenerator* resourcesGenerator = 0;
|
|
|
+ cmInstallFilesGenerator* publicHeaderGenerator = 0;
|
|
|
+ cmInstallFilesGenerator* privateHeaderGenerator = 0;
|
|
|
|
|
|
switch(target.GetType())
|
|
|
{
|
|
|
@@ -362,13 +362,6 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-/* if(target.GetPropertyAsBool("FRAMEWORK"))
|
|
|
- {
|
|
|
- // Create the files install generator.
|
|
|
- this->Makefile->AddInstallGenerator(CreateInstallFilesGenerator(
|
|
|
- absFiles, publicHeaderArgs, false);
|
|
|
- }*/
|
|
|
}
|
|
|
break;
|
|
|
case cmTarget::STATIC_LIBRARY:
|
|
|
@@ -460,25 +453,106 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
|
|
// Ignore the case.
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+// if(target.GetProperty("ASSOCIATED_FILES");
|
|
|
+
|
|
|
+ const char* files = target.GetProperty("PUBLIC_HEADER");
|
|
|
+ if ((files) && (*files))
|
|
|
+ {
|
|
|
+ std::vector<std::string> relFiles;
|
|
|
+ cmSystemTools::ExpandListArgument(files, relFiles);
|
|
|
+ std::vector<std::string> absFiles;
|
|
|
+ if (!this->MakeFilesFullPath("PUBLIC_HEADER", relFiles, absFiles))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Create the files install generator.
|
|
|
+ if (!publicHeaderArgs.GetDestination().empty())
|
|
|
+ {
|
|
|
+ publicHeaderGenerator = CreateInstallFilesGenerator(absFiles,
|
|
|
+ publicHeaderArgs, false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << "TARGETS given no PUBLIC_HEADER DESTINATION for header files\""
|
|
|
+ << target.GetName() << "\".";
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ files = target.GetProperty("PRIVATE_HEADER");
|
|
|
+ if ((files) && (*files))
|
|
|
+ {
|
|
|
+ std::vector<std::string> relFiles;
|
|
|
+ cmSystemTools::ExpandListArgument(files, relFiles);
|
|
|
+ std::vector<std::string> absFiles;
|
|
|
+ if (!this->MakeFilesFullPath("PRIVATE_HEADER", relFiles, absFiles))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Create the files install generator.
|
|
|
+ if (!privateHeaderArgs.GetDestination().empty())
|
|
|
+ {
|
|
|
+ privateHeaderGenerator = CreateInstallFilesGenerator(absFiles,
|
|
|
+ privateHeaderArgs, false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << "TARGETS given no PRIVATE_HEADER DESTINATION for header files\""
|
|
|
+ << target.GetName() << "\".";
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ files = target.GetProperty("RESOURCE_FILES");
|
|
|
+ if ((files) && (*files))
|
|
|
+ {
|
|
|
+ std::vector<std::string> relFiles;
|
|
|
+ cmSystemTools::ExpandListArgument(files, relFiles);
|
|
|
+ std::vector<std::string> absFiles;
|
|
|
+ if (!this->MakeFilesFullPath("RESOURCE_FILES", relFiles, absFiles))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Create the files install generator.
|
|
|
+ if (!privateHeaderArgs.GetDestination().empty())
|
|
|
+ {
|
|
|
+ resourcesGenerator = CreateInstallFilesGenerator(absFiles,
|
|
|
+ resourcesArgs, false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << "TARGETS given no RESOURCES DESTINATION for resource files\""
|
|
|
+ << target.GetName() << "\".";
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
this->Makefile->AddInstallGenerator(archiveGenerator);
|
|
|
this->Makefile->AddInstallGenerator(libraryGenerator);
|
|
|
this->Makefile->AddInstallGenerator(runtimeGenerator);
|
|
|
this->Makefile->AddInstallGenerator(frameworkGenerator);
|
|
|
this->Makefile->AddInstallGenerator(bundleGenerator);
|
|
|
- this->Makefile->AddInstallGenerator(resourcesGenerator);
|
|
|
this->Makefile->AddInstallGenerator(publicHeaderGenerator);
|
|
|
this->Makefile->AddInstallGenerator(privateHeaderGenerator);
|
|
|
+ this->Makefile->AddInstallGenerator(resourcesGenerator);
|
|
|
|
|
|
if (!exports.GetString().empty())
|
|
|
{
|
|
|
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
|
|
|
- ->AddTargetToExports(exports.GetCString(),
|
|
|
- &target,
|
|
|
- archiveGenerator,
|
|
|
- runtimeGenerator,
|
|
|
- libraryGenerator,
|
|
|
- frameworkGenerator,
|
|
|
- bundleGenerator);
|
|
|
+ ->AddTargetToExports(exports.GetCString(), &target,
|
|
|
+ archiveGenerator, runtimeGenerator,
|
|
|
+ libraryGenerator, frameworkGenerator,
|
|
|
+ bundleGenerator, publicHeaderGenerator);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -540,29 +614,9 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args)
|
|
|
}
|
|
|
|
|
|
std::vector<std::string> absFiles;
|
|
|
- for(std::vector<std::string>::const_iterator
|
|
|
- fileIt = files.GetVector().begin(); fileIt != files.GetVector().end();
|
|
|
- ++fileIt)
|
|
|
+ if (!this->MakeFilesFullPath(args[0].c_str(), files.GetVector(), absFiles))
|
|
|
{
|
|
|
- // Convert this file to a full path.
|
|
|
- std::string file = *fileIt;
|
|
|
- if(!cmSystemTools::FileIsFullPath(file.c_str()))
|
|
|
- {
|
|
|
- file = this->Makefile->GetCurrentDirectory();
|
|
|
- file += "/";
|
|
|
- file += *fileIt;
|
|
|
- }
|
|
|
-
|
|
|
- // Make sure the file is not a directory.
|
|
|
- if(cmSystemTools::FileIsDirectory(file.c_str()))
|
|
|
- {
|
|
|
- cmOStringStream e;
|
|
|
- e << args[0] << " given directory \"" << (*fileIt) << "\" to install.";
|
|
|
- this->SetError(e.str().c_str());
|
|
|
- return false;
|
|
|
- }
|
|
|
- // Store the file for installation.
|
|
|
- absFiles.push_back(file);
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
if (!ica.Finalize())
|
|
|
@@ -1011,3 +1065,33 @@ bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+bool cmInstallCommand::MakeFilesFullPath(const char* modeName,
|
|
|
+ const std::vector<std::string>& relFiles,
|
|
|
+ std::vector<std::string>& absFiles)
|
|
|
+{
|
|
|
+ for(std::vector<std::string>::const_iterator fileIt = relFiles.begin();
|
|
|
+ fileIt != relFiles.end();
|
|
|
+ ++fileIt)
|
|
|
+ {
|
|
|
+ std::string file = (*fileIt);
|
|
|
+ if(!cmSystemTools::FileIsFullPath(file.c_str()))
|
|
|
+ {
|
|
|
+ file = this->Makefile->GetCurrentDirectory();
|
|
|
+ file += "/";
|
|
|
+ file += *fileIt;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Make sure the file is not a directory.
|
|
|
+ if(cmSystemTools::FileIsDirectory(file.c_str()))
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << modeName << " given directory \"" << (*fileIt) << "\" to install.";
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // Store the file for installation.
|
|
|
+ absFiles.push_back(file);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|