diff options
author | David Cole <david.cole@kitware.com> | 2008-07-08 15:52:25 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2008-07-08 15:52:25 (GMT) |
commit | 83ec8c35933439305895b8569b2125a7e091fc57 (patch) | |
tree | ee94a4f9cdd476a27a4ad466269c214dc1254d6c /Source/cmInstallCommand.cxx | |
parent | 75154920793c285cd00a4ff225654d693158b679 (diff) | |
download | CMake-83ec8c35933439305895b8569b2125a7e091fc57.zip CMake-83ec8c35933439305895b8569b2125a7e091fc57.tar.gz CMake-83ec8c35933439305895b8569b2125a7e091fc57.tar.bz2 |
ENH: Further refinement of the CPack components functionality from Doug Gregor.
Details:
==========
- New cpack_add_component, cpack_add_component_group, and
cpack_add_install_type "commands" defined as macros in the CPack
module.
- Documentation for all of the variables and commands in the CPack module.
- Added get_cmake_property(... COMPONENTS) to CMake to ask for the
names of all components. Used in the CPack module to automatically
build component-based installers. (Set CPACK_MONOLITHIC_INSTALL to
turn off component-based installation).
- A group can declare its PARENT_GROUP, to build an arbitrary
hierarchy of groups.
- New CPack command cpack_configure_downloads, which creates an
installer that downloads only the selected components on-the-fly.
Those components marked DOWNLOADED will be separate packages
downloaded on-the-fly (or, all packages can be marked as such with the
ALL option to cpack_configure_downloads). Individual components are
compressed with ZIP at installer-creation time and
downloaded/uncompressed by the installer as needed. This feature is
only available on Windows with NSIS at the moment.
- NSIS installers can install themselves and enable the "Change"
button in Add/Remove programs, allowing users to go back and install
or remove components. This can be disabled through
cpack_configure_downloads, because it's only really useful is most of
the application's functionality is in downloaded components.
- Bug fix: automatically install everything whose COMPONENT was not
specified (it's a hidden, required group)
- Bug fix: fixed removal of components when re-running the NSIS
installer and unchecking components
- Bug fix: NSIS installers now only install/remove the minimal
number of files when re-run to update the installation (or by clicking
"Change" in Add/Remove programs)
Diffstat (limited to 'Source/cmInstallCommand.cxx')
-rw-r--r-- | Source/cmInstallCommand.cxx | 77 |
1 files changed, 61 insertions, 16 deletions
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index 6ce7ae5..eb162f5 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -384,6 +384,17 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args) } } + // Keep track of whether we will be performing an installation of + // any files of the given type. + bool installsArchive = false; + bool installsLibrary = false; + bool installsRuntime = false; + bool installsFramework = false; + bool installsBundle = false; + bool installsPrivateHeader = false; + bool installsPublicHeader = false; + bool installsResource = false; + // Generate install script code to install the given targets. for(std::vector<cmTarget*>::iterator ti = targets.begin(); ti != targets.end(); ++ti) @@ -691,6 +702,16 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args) } } + // Keep track of whether we're installing anything in each category + installsArchive = installsArchive || archiveGenerator != 0; + installsLibrary = installsLibrary || libraryGenerator != 0; + installsRuntime = installsRuntime || runtimeGenerator != 0; + installsFramework = installsFramework || frameworkGenerator != 0; + installsBundle = installsBundle || bundleGenerator != 0; + installsPrivateHeader = installsPrivateHeader || privateHeaderGenerator != 0; + installsPublicHeader = installsPublicHeader || publicHeaderGenerator != 0; + installsResource = installsResource || resourceGenerator; + this->Makefile->AddInstallGenerator(archiveGenerator); this->Makefile->AddInstallGenerator(libraryGenerator); this->Makefile->AddInstallGenerator(runtimeGenerator); @@ -713,22 +734,46 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args) } // Tell the global generator about any installation component names specified - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(archiveArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(libraryArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(runtimeArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(frameworkArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(bundleArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(privateHeaderArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(publicHeaderArgs.GetComponent().c_str()); - this->Makefile->GetLocalGenerator()->GetGlobalGenerator() - ->AddInstallComponent(resourceArgs.GetComponent().c_str()); + if (installsArchive) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(archiveArgs.GetComponent().c_str()); + } + if (installsLibrary) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(libraryArgs.GetComponent().c_str()); + } + if (installsRuntime) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(runtimeArgs.GetComponent().c_str()); + } + if (installsFramework) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(frameworkArgs.GetComponent().c_str()); + } + if (installsBundle) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(bundleArgs.GetComponent().c_str()); + } + if (installsPrivateHeader) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(privateHeaderArgs.GetComponent().c_str()); + } + if (installsPublicHeader) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(publicHeaderArgs.GetComponent().c_str()); + } + if (installsResource) + { + this->Makefile->GetLocalGenerator()->GetGlobalGenerator() + ->AddInstallComponent(resourceArgs.GetComponent().c_str()); + } return true; } |