export files: rewrite the code for checking required targets

Instead of generating a whole bunch of repeated if-statements
now a foreach()-loop is generated in the targets-file.
Also now a comment is inserted in the generated file if no
targets from other export sets are used, so if somebody looks
at the file he can see whether the information about missing
imported targets has been generated or not.

Alex
This commit is contained in:
Alex Neundorf 2013-02-11 22:18:48 +01:00
parent f7029572ca
commit 11d0c66206
1 changed files with 30 additions and 13 deletions

View File

@ -754,29 +754,46 @@ void cmExportFileGenerator::GenerateMissingTargetsCheckCode(std::ostream& os,
{ {
if (missingTargets.empty()) if (missingTargets.empty())
{ {
os << "# This file does not depend on other imported targets which have\n"
"# been exported from the same project but in a separate "
"export set.\n\n";
return; return;
} }
os << "# Make sure the targets which have been exported in some other \n" os << "# Make sure the targets which have been exported in some other \n"
"# export set exist.\n"; "# export set exist.\n"
"unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)\n"
"foreach(_target ";
std::set<std::string> emitted; std::set<std::string> emitted;
for(unsigned int i=0; i<missingTargets.size(); ++i) for(unsigned int i=0; i<missingTargets.size(); ++i)
{ {
if (emitted.insert(missingTargets[i]).second) if (emitted.insert(missingTargets[i]).second)
{ {
os << "if(NOT TARGET \"" << missingTargets[i] << "\" )\n" os << "\"" << missingTargets[i] << "\" ";
<< " if(CMAKE_FIND_PACKAGE_NAME)\n"
<< " set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)\n"
<< " set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "
<< "\"Required imported target \\\"" << missingTargets[i]
<< "\\\" not found ! \")\n"
<< " else()\n"
<< " message(FATAL_ERROR \"Required imported target \\\""
<< missingTargets[i] << "\\\" not found ! \")\n"
<< " endif()\n"
<< "endif()\n";
} }
} }
os << "\n"; os << ")\n"
" if(NOT TARGET \"${_target}\" )\n"
" set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets \""
"${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}\")"
"\n"
" endif()\n"
"endforeach()\n"
"\n"
"if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)\n"
" if(CMAKE_FIND_PACKAGE_NAME)\n"
" set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)\n"
" set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "
"\"The following imported targets are "
"referenced, but are missing: "
"${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}\")\n"
" else()\n"
" message(FATAL_ERROR \"The following imported targets are "
"referenced, but are missing: "
"${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}\")\n"
" endif()\n"
"endif()\n"
"unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)\n"
"\n";
} }