[cmake-developers] [CMake 0014522]: CPACK_NSIS_DEFINES doesn't work in component-based installer
Mantis Bug Tracker
mantis at public.kitware.com
Tue Oct 29 12:05:42 EDT 2013
The following issue has been SUBMITTED.
======================================================================
http://public.kitware.com/Bug/view.php?id=14522
======================================================================
Reported By: Mark Stijnman
Assigned To:
======================================================================
Project: CMake
Issue ID: 14522
Category: CPack
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2013-10-29 12:05 EDT
Last Modified: 2013-10-29 12:05 EDT
======================================================================
Summary: CPACK_NSIS_DEFINES doesn't work in component-based
installer
Description:
I need to add some options to my NSIS installer, and noticed in the
NSIS.template.in there is a variable CPACK_NSIS_DEFINES that looked suitable.
Even though it doesn't appear to be documented, I've found mentions online of
users who have used this variable for similar purposes (for example
http://www.cmake.org/pipermail/cmake/2009-April/028592.html and
http://public.kitware.com/Bug/view.php?id=5939), so apparently this used to
work. However, it doesn't use for my project. When I tried to create a minimal
example, it worked again. Turns out that the problem only shows up when you use
a component-based installer. In that case, the contents of the
CPACK_NSIS_DEFINES variable don't make it into the project.nsi file at all. If I
check the source code in cmCPackNSISGenerator.cxx, I see that its value is
overwritten in function PackageFiles when components are present.
Steps to Reproduce:
Use the following as a CMakeLists.txt file:
--- CMakeLists.txt begin
cmake_minimum_required(VERSION 2.8)
project(cpack_nsis_defines_test)
set(test_file "${CMAKE_CURRENT_BINARY_DIR}/test.txt")
file(WRITE ${test_file} "test")
install(FILES ${test_file} DESTINATION . COMPONENT test)
set(CPACK_COMPONENTS_ALL test)
set(CPACK_NSIS_DEFINES " !define MUI_WELCOMEPAGE_TITLE_3LINES")
include(CPack)
--- CMakeLists.txt end
If you build the PACKAGE target, and run the installer, you will notice that the
MUI_WELCOMEPAGE_TITLE_3LINES didn't have any effect. If you check the
project.nsi file that is generated, you see that the
MUI_WELCOMEPAGE_TITLE_3LINES option is not there. If you comment out the
"CPACK_COMPONENTS_ALL" line, it will work as expected.
Additional Information:
The issue can be fixed by modifying the PackageFile function such that any old
value of CPACK_NSIS_DEFINES is stored in the "defines" variable first, before
new values are appended to it. A patch is attached.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2013-10-29 12:05 Mark Stijnman New Issue
2013-10-29 12:05 Mark Stijnman File Added: cpack_nsis_defines_fix.patch
======================================================================
More information about the cmake-developers
mailing list