[Cmake-commits] [cmake-commits] david.cole committed CPack.cmake 1.38 1.39 NSIS.template.in 1.27 1.28
cmake-commits at cmake.org
cmake-commits at cmake.org
Tue Jul 8 11:52:26 EDT 2008
Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv11595/Modules
Modified Files:
CPack.cmake NSIS.template.in
Log Message:
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)
Index: NSIS.template.in
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/NSIS.template.in,v
retrieving revision 1.27
retrieving revision 1.28
diff -C 2 -d -r1.27 -r1.28
*** NSIS.template.in 17 Jun 2008 15:39:25 -0000 1.27
--- NSIS.template.in 8 Jul 2008 15:52:23 -0000 1.28
***************
*** 38,41 ****
--- 38,43 ----
SetCompressor @CPACK_NSIS_COMPRESSOR@
+ @CPACK_NSIS_DEFINES@
+
!include Sections.nsh
***************
*** 61,64 ****
--- 63,71 ----
!macroend
+ ; Sets the value of a variable
+ !macro StoreVar VarName IntValue
+ IntOp $${VarName} 0 + ${IntValue}
+ !macroend
+
!macro InitSection SecName
; This macro reads component installed flag from the registry and
***************
*** 77,83 ****
IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit
;Writing modified flags
SectionSetFlags ${${SecName}} $AR_SecFlags
!
"default_${SecName}:"
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
--- 84,94 ----
IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit
+ ; Note whether this component was installed before
+ !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
+ IntOp $R0 $AR_RegFlags & $AR_RegFlags
+
;Writing modified flags
SectionSetFlags ${${SecName}} $AR_SecFlags
!
"default_${SecName}:"
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
***************
*** 462,465 ****
--- 473,503 ----
;--------------------------------
+
+ !ifdef CPACK_USES_DOWNLOAD
+ Function DownloadFile
+ IfFileExists $INSTDIR\* +2
+ CreateDirectory $INSTDIR
+ Pop $0
+
+ ; Skip if already downloaded
+ IfFileExists $INSTDIR\$0 0 +2
+ Return
+
+ StrCpy $1 "@CPACK_DOWNLOAD_SITE@"
+
+ try_again:
+ NSISdl::download "$1/$0" "$INSTDIR\$0"
+
+ Pop $1
+ StrCmp $1 "success" success
+ StrCmp $1 "Cancelled" cancel
+ MessageBox MB_OK "Download failed: $1"
+ cancel:
+ Return
+ success:
+ FunctionEnd
+ !endif
+
+ ;--------------------------------
; Installation types
@CPACK_NSIS_INSTALLATION_TYPES@
***************
*** 520,524 ****
SetOutPath "$INSTDIR"
@CPACK_NSIS_FULL_INSTALL@
!
;Store installation folder
WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
--- 558,562 ----
SetOutPath "$INSTDIR"
@CPACK_NSIS_FULL_INSTALL@
!
;Store installation folder
WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
***************
*** 538,542 ****
--- 576,593 ----
Push "$INSTDIR\Uninstall.exe"
Call ConditionalAddToRegisty
+ Push "NoRepair"
+ Push "1"
+ Call ConditionalAddToRegisty
+
+ !ifdef CPACK_NSIS_ADD_REMOVE
+ ;Create add/remove functionality
Push "ModifyPath"
+ Push "$INSTDIR\AddRemove.exe"
+ Call ConditionalAddToRegisty
+ !else
+ Push "NoModify"
+ Push "1"
+ Call ConditionalAddToRegisty
+ !endif
; Optional registration
***************
*** 641,644 ****
--- 692,712 ----
;Removes unselected components and writes component status to registry
!insertmacro SectionList "FinishSection"
+
+ !ifdef CPACK_NSIS_ADD_REMOVE
+ ; Get the name of the installer executable
+ System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+ StrCpy $R3 $R0
+
+ ; Strip off the last 13 characters, to see if we have AddRemove.exe
+ StrLen $R1 $R0
+ IntOp $R1 $R0 - 13
+ StrCpy $R2 $R0 13 $R1
+ StrCmp $R2 "AddRemove.exe" addremove_installed
+
+ ; We're not running AddRemove.exe, so install it
+ CopyFiles $R3 $INSTDIR\AddRemove.exe
+
+ addremove_installed:
+ !endif
SectionEnd
;--- End of Add/Remove callback functions ---
***************
*** 675,678 ****
--- 743,751 ----
@CPACK_NSIS_DELETE_DIRECTORIES@
+ !ifdef CPACK_NSIS_ADD_REMOVE
+ ;Remove the add/remove program
+ Delete "$INSTDIR\AddRemove.exe"
+ !endif
+
;Remove the uninstaller itself.
Delete "$INSTDIR\Uninstall.exe"
Index: CPack.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CPack.cmake,v
retrieving revision 1.38
retrieving revision 1.39
diff -C 2 -d -r1.38 -r1.39
*** CPack.cmake 18 Jun 2008 13:53:26 -0000 1.38
--- CPack.cmake 8 Jul 2008 15:52:22 -0000 1.39
***************
*** 1,5 ****
! # Default output files will be CPackConfig.cmake and CPackSourceConfig.cmake.
! # This can be overwritten with CPACK_OUTPUT_CONFIG_FILE and
! # CPACK_SOURCE_OUTPUT_CONFIG_FILE.
# Pick a configuration file
--- 1,369 ----
! # - Build binary and source package installers
! #
! # The CPack module generates binary and source installers in a variety
! # of formats using the cpack program. Inclusion of the CPack module
! # adds two new targets to the resulting makefiles, package and
! # package_source, which build the binary and source installers,
! # respectively. The generated binary installers contain everything
! # installed via CMake's INSTALL command (and the deprecated
! # INSTALL_FILES, INSTALL_PROGRAMS, and INSTALL_TARGETS commands).
! #
! # For certain kinds of binary installers (including the graphical
! # installers on Mac OS X and Windows), CPack generates installers that
! # allow users to select individual application components to
! # install. The contents of each of the components are identified by
! # the COMPONENT argument of CMake's INSTALL command. These components
! # can be annotated with user-friendly names and descriptions,
! # inter-component dependencies, etc., and grouped in various ways to
! # customize the resulting installer. See the cpack_add_* commands,
! # described below, for more information about component-specific
! # installations.
! #
! # Before including the CPack module, there are a variety of variables
! # that can be set to customize the resulting installers. The most
! # commonly-used variables are:
! #
! # CPACK_PACKAGE_NAME - The name of the package (or application). If
! # not specified, defaults to the project name.
! #
! # CPACK_PACKAGE_VENDOR - The name of the package vendor (e.g.,
! # "Kitware").
! #
! # CPACK_PACKAGE_VERSION_MAJOR - Package major Version
! #
! # CPACK_PACKAGE_VERSION_MINOR - Package minor Version
! #
! # CPACK_PACKAGE_VERSION_PATCH - Package patch Version
! #
! # CPACK_PACKAGE_DESCRIPTION_FILE - A text file used to describe the
! # project. Used, for example, the introduction screen of a
! # CPack-generated Windows installer to describe the project.
! #
! # CPACK_PACKAGE_DESCRIPTION_SUMMARY - Short description of the
! # project (only a few words).
! #
! # CPACK_PACKAGE_FILE_NAME - The name of the package file to generate,
! # not including the extension. For example, cmake-2.6.1-Linux-i686.
! #
! # CPACK_PACKAGE_INSTALL_DIRECTORY - Installation directory on the
! # target system, e.g., "CMake 2.5".
! #
! # CPACK_RESOURCE_FILE_LICENSE - License file for the project, which
! # will typically be displayed to the user (often with an explicit
! # "Accept" button, for graphical installers) prior to installation.
! #
! # CPACK_RESOURCE_FILE_README - ReadMe file for the project, which
! # typically describes in some detail
! #
! # CPACK_RESOURCE_FILE_WELCOME - Welcome file for the project, which
! # welcomes users to this installer. Typically used in the graphical
! # installers on Windows and Mac OS X.
! #
! # CPACK_MONOLITHIC_INSTALL - Disables the component-based
! # installation mechanism, so that all components are always installed.
! #
! # CPACK_GENERATOR - List of CPack generators to use. If not
! # specified, CPack will create a set of options (e.g.,
! # CPACK_BINARY_NSIS) allowing the user to enable/disable individual
! # generators.
! #
! # CPACK_OUTPUT_CONFIG_FILE - The name of the CPack configuration file
! # for binary installers that will be generated by the CPack
! # module. Defaults to CPackConfig.cmake.
! #
! # CPACK_PACKAGE_EXECUTABLES - Lists each of the executables along
! # with a text label, to be used to create Start Menu shortcuts on
! # Windows. For example, setting this to the list ccmake;CMake will
! # create a shortcut named "CMake" that will execute the installed
! # executable ccmake.
! #
! # CPACK_STRIP_FILES - List of files to be stripped. Starting with
! # CMake 2.6.0 CPACK_STRIP_FILES will be a boolean variable which
! # enables stripping of all files (a list of files evaluates to TRUE
! # in CMake, so this change is compatible).
! #
! # The following CPack variables are specific to source packages, and
! # will not affect binary packages:
! #
! # CPACK_SOURCE_PACKAGE_FILE_NAME - The name of the source package,
! # e.g., cmake-2.6.1
! #
! # CPACK_SOURCE_STRIP_FILES - List of files in the source tree that
! # will be stripped. Starting with CMake 2.6.0
! # CPACK_SOURCE_STRIP_FILES will be a boolean variable which enables
! # stripping of all files (a list of files evaluates to TRUE in CMake,
! # so this change is compatible).
! #
! # CPACK_SOURCE_GENERATOR - List of generators used for the source
! # packages. As with CPACK_GENERATOR, if this is not specified then
! # CPack will create a set of options (e.g., CPACK_SOURCE_ZIP)
! # allowing users to select which packages will be generated.
! #
! # CPACK_SOURCE_OUTPUT_CONFIG_FILE - The name of the CPack
! # configuration file for source installers that will be generated by
! # the CPack module. Defaults to CPackSourceConfig.cmake.
! #
! # CPACK_SOURCE_IGNORE_FILES - Pattern of files in the source tree
! # that won't be packaged when building a source package. This is a
! # list of patterns, e.g., /CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*
! #
! # The following variables are specific to the graphical installers build
! # on Windows using the Nullsoft Installation System.
! #
! # CPACK_PACKAGE_INSTALL_REGISTRY_KEY - Registry key used when
! # installing this project.
! #
! # CPACK_NSIS_MUI_ICON - The icon file (.ico) for the generated
! # install program.
! #
! # CPACK_NSIS_MUI_UNIICON - The icon file (.ico) for the generated
! # uninstall program.
! #
! # CPACK_PACKAGE_ICON - A branding image that will be displayed inside
! # the installer.
! #
! # CPACK_NSIS_EXTRA_INSTALL_COMMANDS - Extra NSIS commands that will
! # be added to the install Section.
! #
! # CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS - Extra NSIS commands that will
! # be added to the uninstall Section.
! #
! # CPACK_NSIS_COMPRESSOR - The arguments that will be passed to the
! # NSIS SetCompressor command.
! #
! # CPACK_NSIS_MODIFY_PATH - If this is set to "ON", then an extra page
! # will appear in the installer that will allow the user to choose
! # whether the program directory should be added to the system PATH
! # variable.
! #
! # CPACK_NSIS_DISPLAY_NAME - The title displayed at the top of the
! # installer.
! #
! # CPACK_NSIS_INSTALLED_ICON_NAME - A path to the executable that
! # contains the installer icon.
! #
! # CPACK_NSIS_HELP_LINK - URL to a web site providing assistance in
! # installing your application.
! #
! # CPACK_NSIS_URL_INFO_ABOUT - URL to a web site providing more
! # information about your application.
! #
! # CPACK_NSIS_CONTACT - Contact information for questions and comments
! # about the installation process.
! #
! # CPACK_NSIS_CREATE_ICONS_EXTRA - Additional NSIS commands for
! # creating start menu shortcuts.
! #
! # CPACK_NSIS_DELETE_ICONS_EXTRA -Additional NSIS commands to
! # uninstall start menu shortcuts.
! #
! # The following variables are for advanced uses of CPack:
! #
! # CPACK_CMAKE_GENERATOR - What CMake generator should be used if the
! # project is CMake project. Defaults to the value of CMAKE_GENERATOR;
! # few users will want to change this setting.
! #
! # CPACK_INSTALL_CMAKE_PROJECTS - List of four values that specify
! # what project to install. The four values are: Build directory,
! # Project Name, Project Component, Directory. If omitted, CPack will
! # build an installer that installers everything.
! #
! # CPACK_SYSTEM_NAME - System name, defaults to the value of
! # ${CMAKE_SYSTEM_NAME}.
! #
! # CPACK_PACKAGE_VERSION - Package full version, used internally. By
! # default, this is built from CPACK_PACKAGE_VERSION_MAJOR,
! # CPACK_PACKAGE_VERSION_MINOR, and CPACK_PACKAGE_VERSION_PATCH.
! #
! # CPACK_TOPLEVEL_TAG - Directory for the installed files.
! #
! # CPACK_INSTALL_COMMANDS - Extra commands to install components.
! #
! # CPACK_INSTALL_DIRECTORIES - Extra directories to install.
! #
! # Component-specific installation allows users to select specific sets
! # of components to install during the install process. Installation
! # components are identified by the COMPONENT argument of CMake's
! # INSTALL commands, and should be further described by the following
! # CPack commands:
! #
! # cpack_add_component - Describes a CPack installation component
! # named by the COMPONENT argument to a CMake INSTALL command.
! #
! # cpack_add_component(compname
! # [DISPLAY_NAME name]
! # [DESCRIPTION description]
! # [HIDDEN | REQUIRED | DISABLED ]
! # [GROUP group]
! # [DEPENDS comp1 comp2 ... ]
! # [INSTALL_TYPES type1 type2 ... ]
! # [DOWNLOADED]
! # [ARCHIVE_FILE filename])
! #
! # The cmake_add_component command describes an installation
! # component, which the user can opt to install or remove as part of
! # the graphical installation process. compname is the name of the
! # component, as provided to the COMPONENT argument of one or more
! # CMake INSTALL commands.
! #
! # DISPLAY_NAME is the displayed name of the component, used in
! # graphical installers to display the component name. This value can
! # be any string.
! #
! # DESCRIPTION is an extended description of the component, used in
! # graphical installers to give the user additional information about
! # the component. Descriptions can span multiple lines using "\n" as
! # the line separator. Typically, these descriptions should be no
! # more than a few lines long.
! #
! # HIDDEN indicates that this component will be hidden in the
! # graphical installer, so that the user cannot directly change
! # whether it is installed or not.
! #
! # REQUIRED indicates that this component is required, and therefore
! # will always be installed. It will be visible in the graphical
! # installer, but it cannot be unselected. (Typically, required
! # components are shown greyed out).
! #
! # DISABLED indicates that this component should be disabled
! # (unselected) by default. The user is free to select this component
! # for installation, unless it is also HIDDEN.
! #
! # DEPENDS lists the components on which this component depends. If
! # this component is selected, then each of the components listed
! # must also be selected. The dependency information is encoded
! # within the installer itself, so that users cannot install
! # inconsitent sets of components.
! #
! # GROUP names the component group of which this component is a
! # part. If not provided, the component will be a standalone
! # component, not part of any component group. Component groups are
! # described with the cpack_add_component_group command, detailed
! # below.
! #
! # INSTALL_TYPES lists the installation types of which this component
! # is a part. When one of these installations types is selected, this
! # component will automatically be selected. Installation types are
! # described with the cpack_add_install_type command, detailed below.
! #
! # DOWNLOADED indicates that this component should be downloaded
! # on-the-fly by the installer, rather than packaged in with the
! # installer itself. For more information, see the cpack_configure_downloads
! # command.
! #
! # ARCHIVE_FILE provides a name for the ZIP file created by CPack to
! # be used for downloaded components. If not supplied, CPack will
! # create ZIP file with some name based on CPACK_PACKAGE_FILE_NAME and
! # the name of the component. See cpack_configure_downloads for more
! # information.
! #
! # cpack_add_component_group - Describes a group of related CPack
! # installation components.
! #
! # cpack_add_component_group(groupname
! # [DISPLAY_NAME name]
! # [DESCRIPTION description]
! # [PARENT_GROUP parent]
! # [EXPANDED]
! # [BOLD_TITLE])
! #
! # The cpack_add_component_group describes a group of installation
! # components, which will be placed together within the listing of
! # options. Typically, component groups allow the user to
! # select/deselect all of the components within a single group via a
! # single group-level option. Use component groups to reduce the
! # complexity of installers with many options. groupname is an
! # arbitrary name used to identify the group in the GROUP argument of
! # the cpack_add_component command, which is used to place a
! # component in a group. The name of the group must not conflict with
! # the name of any component.
! #
! # DISPLAY_NAME is the displayed name of the component group, used in
! # graphical installers to display the component group name. This
! # value can be any string.
! #
! # DESCRIPTION is an extended description of the component group,
! # used in graphical installers to give the user additional
! # information about the components within that group. Descriptions
! # can span multiple lines using "\n" as the line
! # separator. Typically, these descriptions should be no more than a
! # few lines long.
! #
! # PARENT_GROUP, if supplied, names the parent group of this group.
! # Parent groups are used to establish a hierarchy of groups,
! # providing an arbitrary hierarchy of groups.
! #
! # EXPANDED indicates that, by default, the group should show up as
! # "expanded", so that the user immediately sees all of the
! # components within the group. Otherwise, the group will initially
! # show up as a single entry.
! #
! # BOLD_TITLE indicates that the group title should appear in bold,
! # to call the user's attention to the group.
! #
! # cpack_add_install_type - Add a new installation type containing a
! # set of predefined component selections to the graphical installer.
! #
! # cpack_add_install_type(typename
! # [DISPLAY_NAME name])
! #
! # The cpack_add_install_type command identifies a set of preselected
! # components that represents a common use case for an
! # application. For example, a "Developer" install type might include
! # an application along with its header and library files, while an
! # "End user" install type might just include the application's
! # executable. Each component identifies itself with one or more
! # install types via the INSTALL_TYPES argument to
! # cpack_add_component.
! #
! # DISPLAY_NAME is the displayed name of the install type, which will
! # typically show up in a drop-down box within a graphical
! # installer. This value can be any string.
! #
! # cpack_configure_downloads - Configure CPack to download selected
! # components on-the-fly as part of the installation process.
! #
! # cpack_configure_downloads(site
! # [UPLOAD_DIRECTORY dirname]
! # [ALL]
! # [ADD_REMOVE|NO_ADD_REMOVE])
! #
! # The cpack_configure_downloads command configures installation-time
! # downloads of selected components. For each downloadable component,
! # CPack will create a ZIP file containing the contents of that component,
! # which should be uploaded to the given site. When the user selects that
! # component for installation, the installer will download and extract
! # the component in place. This feature is useful for creating small
! # installers that only download the requested components, saving
! # bandwidth. Additionally, the installers are small enough that they
! # will be installed as part of the normal installation process, and the
! # "Change" button in Windows Add/Remove Programs control panel will
! # allow one to add or remove parts of the application after the original
! # installation. The downloaded-components functionality is currently
! # only available with the NSIS generator on Windows. It requires the
! # ZipDLL plug-in for NSIS, available at:
! #
! # http://nsis.sourceforge.net/ZipDLL_plug-in
! #
! # The site argument is a URL where the ZIP files for downloadable
! # components will reside, e.g., http://www.cmake.org/files/2.6.1/installer/
! # All of the ZIP files produced by CPack should be uploaded to that location.
! #
! # UPLOAD_DIRECTORY is the local directory where CPack will create the
! # various .ZIP archives for each of the components. The contents of this
! # directory should be uploaded to a location accessible by the URL given
! # in the site argument. If omitted, CPack will use the directory CPackUploads
! # inside the CMake binary directory to store the generated ZIP files.
! #
! # The ALL flag indicates that all components be downloaded. Otherwise, only
! # those components explicitly marked as DOWNLOADED or that have a specified
! # ARCHIVE_FILE will be downloaded. Additionally, the ALL option implies
! # ADD_REMOVE (unless NO_ADD_REMOVE is specified).
! #
! # ADD_REMOVE indicates that CPack should install a copy of the installer
! # that can be called from Windows' Add/Remove Programs dialog (via the
! # "Modify" button) to change the set of installed components. NO_ADD_REMOVE
! # turns off this behavior.
!
# Pick a configuration file
***************
*** 13,16 ****
--- 377,589 ----
ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in")
+ # Argument-parsing macro from http://www.cmake.org/Wiki/CMakeMacroParseArguments
+ MACRO(cpack_parse_arguments prefix arg_names option_names)
+ SET(${prefix}_DEFAULT_ARGS)
+ FOREACH(arg_name ${arg_names})
+ SET(${prefix}_${arg_name})
+ ENDFOREACH(arg_name)
+ FOREACH(option ${option_names})
+ SET(${prefix}_${option} FALSE)
+ ENDFOREACH(option)
+
+ SET(current_arg_name DEFAULT_ARGS)
+ SET(current_arg_list)
+ FOREACH(arg ${ARGN})
+ SET(larg_names ${arg_names})
+ LIST(FIND larg_names "${arg}" is_arg_name)
+ IF (is_arg_name GREATER -1)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ SET(current_arg_name ${arg})
+ SET(current_arg_list)
+ ELSE (is_arg_name GREATER -1)
+ SET(loption_names ${option_names})
+ LIST(FIND loption_names "${arg}" is_option)
+ IF (is_option GREATER -1)
+ SET(${prefix}_${arg} TRUE)
+ ELSE (is_option GREATER -1)
+ SET(current_arg_list ${current_arg_list} ${arg})
+ ENDIF (is_option GREATER -1)
+ ENDIF (is_arg_name GREATER -1)
+ ENDFOREACH(arg)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ ENDMACRO(cpack_parse_arguments)
+
+ # Macro that appends a SET command for the given variable name (var)
+ # to the macro named strvar, but only if the variable named "var"
+ # has been defined. The string will eventually be appended to a CPack
+ # configuration file.
+ MACRO(cpack_append_variable_set_command var strvar)
+ IF (DEFINED ${var})
+ SET(${strvar} "${${strvar}}SET(${var}")
+ FOREACH(APPENDVAL ${${var}})
+ SET(${strvar} "${${strvar}} ${APPENDVAL}")
+ ENDFOREACH(APPENDVAL)
+ SET(${strvar} "${${strvar}})\n")
+ ENDIF (DEFINED ${var})
+ ENDMACRO(cpack_append_variable_set_command)
+
+ # Macro that appends a SET command for the given variable name (var)
+ # to the macro named strvar, but only if the variable named "var"
+ # has been defined and is a string. The string will eventually be
+ # appended to a CPack configuration file.
+ MACRO(cpack_append_string_variable_set_command var strvar)
+ IF (DEFINED ${var})
+ LIST(LENGTH ${var} CPACK_APP_VALUE_LEN)
+ IF(${CPACK_APP_VALUE_LEN} EQUAL 1)
+ SET(${strvar} "${${strvar}}SET(${var} \"${${var}}\")\n")
+ ENDIF(${CPACK_APP_VALUE_LEN} EQUAL 1)
+ ENDIF (DEFINED ${var})
+ ENDMACRO(cpack_append_string_variable_set_command)
+
+ # Macro that appends a SET command for the given variable name (var)
+ # to the macro named strvar, but only if the variable named "var"
+ # has been set to true. The string will eventually be
+ # appended to a CPack configuration file.
+ MACRO(cpack_append_option_set_command var strvar)
+ IF (${var})
+ LIST(LENGTH ${var} CPACK_APP_VALUE_LEN)
+ IF(${CPACK_APP_VALUE_LEN} EQUAL 1)
+ SET(${strvar} "${${strvar}}SET(${var} TRUE)\n")
+ ENDIF(${CPACK_APP_VALUE_LEN} EQUAL 1)
+ ENDIF (${var})
+ ENDMACRO(cpack_append_option_set_command)
+
+ # Macro that adds a component to the CPack installer
+ MACRO(cpack_add_component compname)
+ STRING(TOUPPER ${compname} CPACK_ADDCOMP_UNAME)
+ cpack_parse_arguments(CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}
+ "DISPLAY_NAME;DESCRIPTION;GROUP;DEPENDS;INSTALL_TYPES;ARCHIVE_FILE"
+ "HIDDEN;REQUIRED;DISABLED;DOWNLOADED"
+ ${ARGN}
+ )
+
+ if (CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DOWNLOADED)
+ SET(CPACK_ADDCOMP_STR "\n# Configuration for downloaded component \"${compname}\"\n")
+ else ()
+ SET(CPACK_ADDCOMP_STR "\n# Configuration for component \"${compname}\"\n")
+ endif ()
+
+ IF(NOT CPACK_MONOLITHIC_INSTALL)
+ # If the user didn't set CPACK_COMPONENTS_ALL explicitly, update the
+ # value of CPACK_COMPONENTS_ALL in the configuration file. This will
+ # take care of any components that have been added after the CPack
+ # moduled was included.
+ IF(NOT CPACK_COMPONENTS_ALL_SET_BY_USER)
+ GET_CMAKE_PROPERTY(CPACK_ADDCOMP_COMPONENTS COMPONENTS)
+ SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR}\nSET(CPACK_COMPONENTS_ALL")
+ FOREACH(COMP ${CPACK_ADDCOMP_COMPONENTS})
+ SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR} ${COMP}")
+ ENDFOREACH(COMP)
+ SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR})\n")
+ ENDIF(NOT CPACK_COMPONENTS_ALL_SET_BY_USER)
+ ENDIF(NOT CPACK_MONOLITHIC_INSTALL)
+
+ cpack_append_string_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DISPLAY_NAME
+ CPACK_ADDCOMP_STR)
+ cpack_append_string_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DESCRIPTION
+ CPACK_ADDCOMP_STR)
+ cpack_append_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_GROUP
+ CPACK_ADDCOMP_STR)
+ cpack_append_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DEPENDS
+ CPACK_ADDCOMP_STR)
+ cpack_append_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_INSTALL_TYPES
+ CPACK_ADDCOMP_STR)
+ cpack_append_string_variable_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_ARCHIVE_FILE
+ CPACK_ADDCOMP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_HIDDEN
+ CPACK_ADDCOMP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_REQUIRED
+ CPACK_ADDCOMP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DISABLED
+ CPACK_ADDCOMP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DOWNLOADED
+ CPACK_ADDCOMP_STR)
+ FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_ADDCOMP_STR}")
+ ENDMACRO(cpack_add_component)
+
+ # Macro that adds a component group to the CPack installer
+ MACRO(cpack_add_component_group grpname)
+ STRING(TOUPPER ${grpname} CPACK_ADDGRP_UNAME)
+ cpack_parse_arguments(CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}
+ "DISPLAY_NAME;DESCRIPTION"
+ "EXPANDED;BOLD_TITLE"
+ ${ARGN}
+ )
+
+ SET(CPACK_ADDGRP_STR "\n# Configuration for component group \"${grpname}\"\n")
+ cpack_append_string_variable_set_command(
+ CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_DISPLAY_NAME
+ CPACK_ADDGRP_STR)
+ cpack_append_string_variable_set_command(
+ CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_DESCRIPTION
+ CPACK_ADDGRP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_EXPANDED
+ CPACK_ADDGRP_STR)
+ cpack_append_option_set_command(
+ CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_BOLD_TITLE
+ CPACK_ADDGRP_STR)
+ FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_ADDGRP_STR}")
+ ENDMACRO(cpack_add_component_group)
+
+ # Macro that adds an installation type to the CPack installer
+ MACRO(cpack_add_install_type insttype)
+ STRING(TOUPPER ${insttype} CPACK_INSTTYPE_UNAME)
+ cpack_parse_arguments(CPACK_INSTALL_TYPE_${CPACK_INSTTYPE_UNAME}
+ "DISPLAY_NAME"
+ ""
+ ${ARGN}
+ )
+
+ SET(CPACK_INSTTYPE_STR
+ "\n# Configuration for installation type \"${insttype}\"\n")
+ SET(CPACK_INSTTYPE_STR
+ "${CPACK_INSTTYPE_STR}LIST(APPEND CPACK_ALL_INSTALL_TYPES ${insttype})\n")
+ cpack_append_string_variable_set_command(
+ CPACK_INSTALL_TYPE_${CPACK_INSTTYPE_UNAME}_DISPLAY_NAME
+ CPACK_INSTTYPE_STR)
+ FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_INSTTYPE_STR}")
+ ENDMACRO(cpack_add_install_type)
+
+ MACRO(cpack_configure_downloads site)
+ cpack_parse_arguments(CPACK_DOWNLOAD
+ "UPLOAD_DIRECTORY"
+ "ALL;ADD_REMOVE;NO_ADD_REMOVE"
+ ${ARGN}
+ )
+
+ SET(CPACK_CONFIG_DL_STR
+ "\n# Downloaded components configuration\n")
+ SET(CPACK_UPLOAD_DIRECTORY ${CPACK_DOWNLOAD_UPLOAD_DIRECTORY})
+ SET(CPACK_DOWNLOAD_SITE ${site})
+ cpack_append_string_variable_set_command(
+ CPACK_DOWNLOAD_SITE
+ CPACK_CONFIG_DL_STR)
+ cpack_append_string_variable_set_command(
+ CPACK_UPLOAD_DIRECTORY
+ CPACK_CONFIG_DL_STR)
+ cpack_append_option_set_command(
+ CPACK_DOWNLOAD_ALL
+ CPACK_CONFIG_DL_STR)
+ IF (${CPACK_DOWNLOAD_ALL} AND NOT ${CPACK_DOWNLOAD_NO_ADD_REMOVE})
+ SET(CPACK_DOWNLOAD_ADD_REMOVE ON)
+ ENDIF (${CPACK_DOWNLOAD_ALL} AND NOT ${CPACK_DOWNLOAD_NO_ADD_REMOVE})
+ SET(CPACK_ADD_REMOVE ${CPACK_DOWNLOAD_ADD_REMOVE})
+ cpack_append_option_set_command(
+ CPACK_ADD_REMOVE
+ CPACK_CONFIG_DL_STR)
+ FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_CONFIG_DL_STR}")
+ ENDMACRO(cpack_configure_downloads)
+
# Macro for setting values if a user did not overwrite them
MACRO(cpack_set_if_not_set name value)
***************
*** 198,201 ****
--- 771,807 ----
cpack_set_if_not_set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
+ IF(DEFINED CPACK_COMPONENTS_ALL)
+ IF(CPACK_MONOLITHIC_INSTALL)
+ MESSAGE("CPack warning: both CPACK_COMPONENTS_ALL and CPACK_MONOLITHIC_INSTALL have been set.\nDefaulting to a monolithic installation.")
+ SET(CPACK_COMPONENTS_ALL)
+ ELSE(CPACK_MONOLITHIC_INSTALL)
+ # The user has provided the set of components to be installed as
+ # part of a component-based installation; trust her.
+ SET(CPACK_COMPONENTS_ALL_SET_BY_USER TRUE)
+ ENDIF(CPACK_MONOLITHIC_INSTALL)
+ ELSE(DEFINED CPACK_COMPONENTS_ALL)
+ # If the user has not specifically requested a monolithic installer
+ # but has specified components in various "install" commands, tell
+ # CPack about those components.
+ IF(NOT CPACK_MONOLITHIC_INSTALL)
+ GET_CMAKE_PROPERTY(CPACK_COMPONENTS_ALL COMPONENTS)
+ LIST(LENGTH CPACK_COMPONENTS_ALL CPACK_COMPONENTS_LEN)
+ IF(CPACK_COMPONENTS_LEN EQUAL 1)
+ # Only one component: this is not a component-based installation
+ # (at least, it isn't a component-based installation, but may
+ # become one later if the user uses the cpack_add_* commands).
+ SET(CPACK_COMPONENTS_ALL)
+ ENDIF(CPACK_COMPONENTS_LEN EQUAL 1)
+ SET(CPACK_COMPONENTS_LEN)
+ ENDIF(NOT CPACK_MONOLITHIC_INSTALL)
+ ENDIF(DEFINED CPACK_COMPONENTS_ALL)
+
+ # CMake always generates a component named "Unspecified", which is
+ # used to install everything that doesn't have an explicitly-provided
+ # component. Since these files should always be installed, we'll make
+ # them hidden and required.
+ set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE)
+ set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE)
+
cpack_encode_variables()
configure_file("${cpack_input_file}" "${CPACK_OUTPUT_CONFIG_FILE}" @ONLY IMMEDIATE)
More information about the Cmake-commits
mailing list