exports: accept a missing target if it is exported exactly once

If a target is exported, and a library it depends on is not part
of the same export set, before this patch cmake errored out.
With this patch, it now checks whether the missing target
is exported somewhere else exactly once, and accepts in this
case (because then it can determine the namespace for the
missing target and use this).

Alex
This commit is contained in:
Alex Neundorf
2012-09-15 21:55:24 +02:00
committed by Brad King
parent 999061a4c2
commit 87f4c01910
7 changed files with 111 additions and 22 deletions

View File

@@ -135,7 +135,8 @@ cmExportBuildFileGenerator
void
cmExportBuildFileGenerator
::ComplainAboutMissingTarget(cmTarget* depender,
cmTarget* dependee)
cmTarget* dependee,
int occurrences)
{
if(!this->ExportCommand || !this->ExportCommand->ErrorMessage.empty())
{
@@ -143,10 +144,20 @@ cmExportBuildFileGenerator
}
cmOStringStream e;
e << "called with target \"" << depender->GetName()
<< "\" which requires target \"" << dependee->GetName()
<< "\" that is not in the export list.\n"
<< "If the required target is not easy to reference in this call, "
<< "consider using the APPEND option with multiple separate calls.";
if (occurrences == 0)
{
e << "called with target \"" << depender->GetName()
<< "\" which requires target \"" << dependee->GetName()
<< "\" that is not in the export list.\n"
<< "If the required target is not easy to reference in this call, "
<< "consider using the APPEND option with multiple separate calls.";
}
else
{
e << "called with target \"" << depender->GetName()
<< "\" which requires target \"" << dependee->GetName()
<< "\" that is exported " << occurrences << " times in other "
<< "export ""lists.\n";
}
this->ExportCommand->ErrorMessage = e.str();
}