cpack: Fix CPACK_PACKAGING_INSTALL_PREFIX handling for archives (#14677)

Fix the case when the archive generator is used to package components
with an install prefix.
This commit is contained in:
Clinton Stimpson 2015-03-25 22:36:38 -06:00 committed by Brad King
parent 51b4321e5f
commit e3f84fc504
5 changed files with 51 additions and 0 deletions

View File

@ -63,6 +63,14 @@ int cmCPackArchiveGenerator::addOneComponentToArchive(cmArchiveWrite& archive,
filePrefix = this->GetOption("CPACK_PACKAGE_FILE_NAME");
filePrefix += "/";
}
const char* installPrefix =
this->GetOption("CPACK_PACKAGING_INSTALL_PREFIX");
if(installPrefix && installPrefix[0] == '/' && installPrefix[1] != 0)
{
// add to file prefix and remove the leading '/'
filePrefix += installPrefix+1;
filePrefix += "/";
}
std::vector<std::string>::const_iterator fileIt;
for (fileIt = component->Files.begin(); fileIt != component->Files.end();
++fileIt )

View File

@ -862,6 +862,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
set(CTEST_RUN_CPackComponents ${CTEST_TEST_CPACK})
set(CTEST_package_X11_TEST ${CTEST_TEST_CPACK})
set(CTEST_RUN_CPackComponentsForAll ${CTEST_TEST_CPACK})
set(CTEST_RUN_CPackComponentsPrefix ${CTEST_TEST_CPACK})
# Do not try to build RPM
if (NOT RPMBUILD_EXECUTABLE)
@ -1035,6 +1036,33 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators")
endif()
if(CTEST_RUN_CPackComponentsPrefix)
set(CPackComponents_BUILD_OPTIONS)
if(APPLE)
set(CPackComponents_BUILD_OPTIONS -DCPACK_BINARY_DRAGNDROP:BOOL=ON)
endif()
if(NOT NSIS_MAKENSIS_EXECUTABLE)
set(CPackComponents_BUILD_OPTIONS ${CPackComponents_BUILD_OPTIONS}
-DCPACK_BINARY_NSIS:BOOL=OFF)
endif()
add_test(CPackComponentsPrefix ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/CPackComponentsPrefix"
"${CMake_BINARY_DIR}/Tests/CPackComponentsPrefix"
${build_generator_args}
--build-project CPackComponentsPrefix
--build-two-config
--build-target package
--build-options ${build_options}
-DCPACK_BINARY_DEB:BOOL=${CPACK_BINARY_DEB}
-DCPACK_BINARY_RPM:BOOL=${CPACK_BINARY_RPM}
-DCPACK_BINARY_ZIP:BOOL=ON
${CPackComponents_BUILD_OPTIONS}
)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackComponentsPrefix")
endif()
if(CTEST_package_X11_TEST)
set(X11_build_target_arg --build-target package)
else()

View File

@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.2)
project(CPackComponentsPrefix NONE)
install(FILES file-runtime.txt
DESTINATION bin COMPONENT Runtime)
install(FILES file-development.txt
DESTINATION lib COMPONENT Development)
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 1)
set(CPACK_COMPONENTS_ALL Development)
set(CPACK_ARCHIVE_COMPONENT_INSTALL 1)
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/My-1.0")
include(CPack)

View File

@ -0,0 +1 @@
This file is installed with the Development component.

View File

@ -0,0 +1 @@
This file is installed with the Runtime component.