From 2e6cadde13690a80bc3919cec00e802208367f32 Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Sun, 13 Oct 2013 13:16:54 +0200 Subject: CPackWiX: allow user supplied extra sources, objects and libraries --- Modules/CPackWIX.cmake | 14 ++++++++++++++ Source/CPack/WiX/cmCPackWIXGenerator.cxx | 28 ++++++++++++++++++++++++++++ Source/CPack/WiX/cmCPackWIXGenerator.h | 4 ++++ 3 files changed, 46 insertions(+) diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index fce25f0..604eb37 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -102,6 +102,20 @@ # If this variable is not set, the default MSI template included with CMake will be used. # ##end +##variable +# CPACK_WIX_EXTRA_SOURCES - Extra WiX source files +# +# This variable provides an optional list of extra WiX source files (.wxs) +# that should be compiled and linked. The full path to source files is required. +# +##end +##variable +# CPACK_WIX_EXTRA_OBJECTS - Extra WiX object files or libraries +# +# This variable provides an optional list of extra WiX object (.wixobj) and/or +# WiX library (.wixlib) files. The full path to objects and libraries is required. +# +##end #============================================================================= # Copyright 2012 Kitware, Inc. diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index cc9dec7..888c29b 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -189,6 +189,8 @@ bool cmCPackWIXGenerator::PackageFilesImpl() return false; } + AppendUserSuppliedExtraSources(); + std::stringstream objectFiles; for(size_t i = 0; i < wixSources.size(); ++i) { @@ -205,9 +207,35 @@ bool cmCPackWIXGenerator::PackageFilesImpl() objectFiles << " " << QuotePath(objectFilename); } + AppendUserSuppliedExtraObjects(objectFiles); + return RunLightCommand(objectFiles.str()); } +void cmCPackWIXGenerator::AppendUserSuppliedExtraSources() +{ + const char *cpackWixExtraSources = GetOption("CPACK_WIX_EXTRA_SOURCES"); + if(!cpackWixExtraSources) return; + + cmSystemTools::ExpandListArgument(cpackWixExtraSources, wixSources); +} + +void cmCPackWIXGenerator::AppendUserSuppliedExtraObjects(std::ostream& stream) +{ + const char *cpackWixExtraObjects = GetOption("CPACK_WIX_EXTRA_OBJECTS"); + if(!cpackWixExtraObjects) return; + + std::vector expandedExtraObjects; + + cmSystemTools::ExpandListArgument( + cpackWixExtraObjects, expandedExtraObjects); + + for(size_t i = 0; i < expandedExtraObjects.size(); ++i) + { + stream << " " << QuotePath(expandedExtraObjects[i]); + } +} + bool cmCPackWIXGenerator::CreateWiXVariablesIncludeFile() { std::string cpackTopLevel; diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.h b/Source/CPack/WiX/cmCPackWIXGenerator.h index aaccf9d..d6376cf 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.h +++ b/Source/CPack/WiX/cmCPackWIXGenerator.h @@ -68,6 +68,10 @@ private: bool CreateWiXSourceFiles(); + void AppendUserSuppliedExtraSources(); + + void AppendUserSuppliedExtraObjects(std::ostream& stream); + bool CreateLicenseFile(); bool RunWiXCommand(const std::string& command); -- cgit v0.12