CPackWIX: Allow multiple patch files and diagnose if any are missing

CPACK_WIX_PATCH_FILE now accepts a list of patch files.
An error will now be produced if any of the patch files is missing.

Previously this would be silently ignored.
This commit is contained in:
Nils Gladitz 2015-12-14 23:04:41 +01:00
parent 38d723b37e
commit de77d4a741
4 changed files with 23 additions and 5 deletions

View File

@ -119,7 +119,8 @@
#
# .. variable:: CPACK_WIX_PATCH_FILE
#
# Optional XML file with fragments to be inserted into generated WiX sources
# Optional list of XML files with fragments to be inserted into
# generated WiX sources
#
# This optional variable can be used to specify an XML file that the
# WiX generator will use to inject fragments into its generated

View File

@ -242,7 +242,16 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration()
const char* patchFilePath = GetOption("CPACK_WIX_PATCH_FILE");
if(patchFilePath)
{
this->Patch->LoadFragments(patchFilePath);
std::vector<std::string> patchFilePaths;
cmSystemTools::ExpandListArgument(patchFilePath, patchFilePaths);
for(size_t i = 0; i < patchFilePaths.size(); ++i)
{
if(!this->Patch->LoadFragments(patchFilePaths[i]))
{
return false;
}
}
}
return true;

View File

@ -20,10 +20,18 @@ cmWIXPatch::cmWIXPatch(cmCPackLog* logger):
}
void cmWIXPatch::LoadFragments(std::string const& patchFilePath)
bool cmWIXPatch::LoadFragments(std::string const& patchFilePath)
{
cmWIXPatchParser parser(Fragments, Logger);
parser.ParseFile(patchFilePath.c_str());
if(!parser.ParseFile(patchFilePath.c_str()))
{
cmCPackLogger(cmCPackLog::LOG_ERROR,
"Failed parsing XML patch file: '" <<
patchFilePath << "'" << std::endl);
return false;
}
return true;
}
void cmWIXPatch::ApplyFragment(

View File

@ -26,7 +26,7 @@ class cmWIXPatch
public:
cmWIXPatch(cmCPackLog* logger);
void LoadFragments(std::string const& patchFilePath);
bool LoadFragments(std::string const& patchFilePath);
void ApplyFragment(std::string const& id, cmWIXSourceWriter& writer);