[CMake] CPack-NSIS component-based installer lacking components page...might I be forgetting something?

Patrick Ryan pryan at objectivity.ca
Mon Jan 16 11:21:55 EST 2012


Hi Eric,

Thanks for the response. I should clarify that the application we're
building is ParaView.

On Fri, Jan 13, 2012 at 5:13 PM, Eric Noulard <eric.noulard at gmail.com> wrote:
> 2012/1/13 Patrick Ryan <pryan at objectivity.ca>:
>> Hi,
>>
>> I'm using CMake 2.8.6 to generate an NSIS installer. We have two
>> separate projects; an application and a set of plugins to be used by
>> the application. The plugins are composed of four separate components
>> that can be selected during the installation (Filters, NonBSDPlugins,
>> Readers, Writers). When built on its own, the plugins installer
>> includes the 'Select Components' page as expected. When building the
>> application, which also includes the plugins project, no components
>> page appears.
>
> How does the application "includes" the plugins project?
>
We have the following line including our Plugins directory:

ADD_SUBDIRECTORY(PVGPlugins)
>
>> My CPackConfig.cmake file has the following:
>>
>> SET(CPACK_COMPONENTS_ALL
>> "BrandedRuntime;Development;Filters;NonBSDPlugins;Readers;Writers;Runtime;RuntimeLibraries;Unspecified")
>>
>> SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE")
>>
>> SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE")
>>
>> Am I missing anything blatantly obvious? I'm quite stuck and haven't
>> been able to find anyone who's had a similar problem.
>
> CPack does not work that well for
> "multiple project in one package" installer.
>
> see discussion here
> http://public.kitware.com/Bug/view.php?id=11808
>
>> I can provide more details if necessary...apologies if I haven't
>> included enough.
>
> Was your CPackConfig.cmake written by hand or generated
> with include(CPack) ?
>
It was generated.
>
> Did you include(CPack) twice?

>
> Like one time in the application project and one time in the plugins project?
> If yes tries to include it only once.
>
We include it in the Plugins project CMakeList but it is only called
if we are building the Plugins project. That said, we haven't been
able to find the 'other' include(CPack) in any of ParaView's
cmakelists.
>
> see related bugs with multiple CPack inclusion:
> http://public.kitware.com/Bug/view.php?id=10751
>
> --
> Erk
> Membre de l'April - « promouvoir et défendre le logiciel libre » -
> http://www.april.org

Our Plugins project's CMakeList has a conditional to look for
ParaView's source directory. If it's found (building the entire
application) this is all that's being called:

ADD_SUBDIRECTORY(Filters)
ADD_SUBDIRECTORY(Readers)
ADD_SUBDIRECTORY(Writers)
ADD_SUBDIRECTORY(NonBSDPlugins)
set(CPACK_COMPONENTS_ALL PVGFilters PVGReaders PVGWriters PVGNonBSDPlugins)

This is what's not working for us. Below is what is called when we
aren't building the entire application. This is working as we expect.

PROJECT(PVGPlugins)
FIND_PACKAGE(ParaView REQUIRED)
INCLUDE(${PARAVIEW_USE_FILE})

SET (PVGPlugins_VERSION_MAJOR 1)
SET (PVGPlugins_VERSION_MINOR 0)
SET (PVGPlugins_VERSION_PATCH 0)

SET(PVGPlugins_VERSION
"${PVGPlugins_VERSION_MAJOR}.${PVGPlugins_VERSION_MINOR}")
SET(PVGPlugins_VERSION_FULL "${PVGPlugins_VERSION}.${PVGPlugins_VERSION_PATCH}")

SET(PVGPlugins_INSTALL_BIN_DIR bin)

SET(QT_USE_QTUITOOLS TRUE)
SET(QT_USE_QTXML TRUE)  # uitools depends on xml
SET(QT_USE_QTSQL TRUE) # we need sql drivers
INCLUDE(${QT_USE_FILE})

INCLUDE_DIRECTORIES(${QT_QTSQL_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${QT_QTXML_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${QT_QTUITOOLS_INCLUDE_DIR})

OPTION(ParaViewGeo_Filters "Build ParaViewGeo Filters" ON)
OPTION(ParaViewGeo_Readers "Build ParaViewGeo Readers" ON)
OPTION(ParaViewGeo_Writers "Build ParaViewGeo Writers" ON)
OPTION(ParaViewGeo_NonBSDPlugins "Build ParaViewGeo Non-BSD Licensed
Plugins" OFF)

IF (ParaViewGeo_Filters)
	ADD_SUBDIRECTORY(Filters)
ENDIF(ParaViewGeo_Filters)

IF (ParaViewGeo_Readers)
	ADD_SUBDIRECTORY(Readers)
ENDIF(ParaViewGeo_Readers)

IF(ParaViewGeo_Writers)
	ADD_SUBDIRECTORY(Writers)
ENDIF(ParaViewGeo_Writers)

IF(ParaViewGeo_NonBSDPlugins)
	ADD_SUBDIRECTORY(NonBSDPlugins)
ENDIF(ParaViewGeo_NonBSDPlugins)

set(CPACK_COMPONENTS_ALL PVGFilters PVGReaders PVGWriters PVGNonBSDPlugins)
set(CPACK_PACKAGE_NAME "ParaViewGeo Plugins")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ParaViewGeo Plugins")
set(CPACK_PACKAGE_VERSION ${PVGPlugins_VERSION_FULL})
SET(CPACK_RESOURCE_FILE_LICENSE
"${PVGPlugins_SOURCE_DIR}/PVG_PLUGINS_LICENSE.txt")
include (CPack)

Thanks,

-- 
Patrick Ryan


More information about the CMake mailing list