Merge topic 'cpack-deb-improvements'
4461e8bb
CPack/Deb cpack-deb-improvements release notes7e940bf7
CPack/Deb test changes due to breaking changes3b648894
CPack/Deb package release number in file name316dd613
CPack/Deb proper package file naming271e03f0
CPack/Deb per-component package architecture23baaf8d
CPack/Deb inter package dependencies3a55a0e7
CPack/Deb proper component packages file namingc7f388e7
CPack/Deb generation of postinst and postrm ldconfig files2d589653
CPack/Deb generation of DEBIAN/shlibs control file
This commit is contained in:
commit
2b25174da6
|
@ -0,0 +1,27 @@
|
||||||
|
cpack-deb-imporvements
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/shlibs``
|
||||||
|
contorl file when package contains shared libraries.
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/postinst`` and
|
||||||
|
``DEBIAN/postrm`` files if the package installs libraries in
|
||||||
|
ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module learned how to generate dependencies between
|
||||||
|
Debian packages if multi-component setup is used and
|
||||||
|
:variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
|
||||||
|
This breaks compatibility with previous versions.
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module learned how to set the package release number
|
||||||
|
(``DebianRevisionNumber`` in package file name). See
|
||||||
|
:variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module now generates properly-named Debian packages::
|
||||||
|
|
||||||
|
<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
|
||||||
|
|
||||||
|
This breaks compatibility with previous versions.
|
||||||
|
|
||||||
|
* The :module:`CPackDeb` module learned how to set the package architecture
|
||||||
|
per-component. See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
|
|
@ -50,8 +50,21 @@
|
||||||
# * Mandatory : YES
|
# * Mandatory : YES
|
||||||
# * Default : :variable:`CPACK_PACKAGE_VERSION`
|
# * Default : :variable:`CPACK_PACKAGE_VERSION`
|
||||||
#
|
#
|
||||||
|
# .. variable:: CPACK_DEBIAN_PACKAGE_RELEASE
|
||||||
|
#
|
||||||
|
# The Debian package release - Debian revision number.
|
||||||
|
#
|
||||||
|
# * Mandatory : YES
|
||||||
|
# * Default : 1
|
||||||
|
#
|
||||||
|
# This is the numbering of the DEB package itself, i.e. the version of the
|
||||||
|
# packaging and not the version of the content (see
|
||||||
|
# :variable:`CPACK_DEBIAN_PACKAGE_VERSION`). One may change the default value
|
||||||
|
# if the previous packaging was buggy and/or you want to put here a fancy Linux
|
||||||
|
# distro specific numbering.
|
||||||
#
|
#
|
||||||
# .. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
# .. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
||||||
|
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
|
||||||
#
|
#
|
||||||
# The Debian package architecture
|
# The Debian package architecture
|
||||||
#
|
#
|
||||||
|
@ -331,6 +344,32 @@
|
||||||
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
|
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS
|
||||||
|
#
|
||||||
|
# * Mandatory : NO
|
||||||
|
# * Default : OFF
|
||||||
|
#
|
||||||
|
# Allows to generate shlibs control file automatically. Compatibility is defined by
|
||||||
|
# CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY variable value.
|
||||||
|
#
|
||||||
|
# .. note::
|
||||||
|
#
|
||||||
|
# Libraries are only considered if they have both library name and version
|
||||||
|
# set. This can be done by setting SOVERSION property with
|
||||||
|
# :command:`set_target_properties` command.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY
|
||||||
|
#
|
||||||
|
# * Mandatory : NO
|
||||||
|
# * Default : "="
|
||||||
|
#
|
||||||
|
# Defines compatibility policy for auto-generated shlibs control file.
|
||||||
|
# Possible values: "=", ">="
|
||||||
|
#
|
||||||
|
# See https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps
|
||||||
|
#
|
||||||
|
#
|
||||||
# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||||
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
|
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
|
||||||
#
|
#
|
||||||
|
@ -399,6 +438,10 @@
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2007-2009 Kitware, Inc.
|
# Copyright 2007-2009 Kitware, Inc.
|
||||||
# Copyright 2007-2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
# Copyright 2007-2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
||||||
|
# Copyright 2014-2016 Alexander Smorkalov <alexander.smorkalov@itseez.com>
|
||||||
|
# Copyright 2014-2016 Roman Donchenko <roman.donchenko@itseez.com>
|
||||||
|
# Copyright 2014-2016 Roman Kharitonov <roman.kharitonov@itseez.com>
|
||||||
|
# Copyright 2014-2016 Ilya Lavrenov <ilya.lavrenov@itseez.com>
|
||||||
#
|
#
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
# see accompanying file Copyright.txt for details.
|
# see accompanying file Copyright.txt for details.
|
||||||
|
@ -423,6 +466,38 @@ if(NOT UNIX)
|
||||||
message(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.")
|
message(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
function(get_component_package_name var component)
|
||||||
|
string(TOUPPER "${component}" component_upcase)
|
||||||
|
if(CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME)
|
||||||
|
string(TOLOWER "${CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME}" package_name)
|
||||||
|
else()
|
||||||
|
string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${component}" package_name)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set("${var}" "${package_name}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
#extract library name and version for given shared object
|
||||||
|
function(extract_so_info shared_object libname version)
|
||||||
|
if(READELF_EXECUTABLE)
|
||||||
|
execute_process(COMMAND "${READELF_EXECUTABLE}" -d "${shared_object}"
|
||||||
|
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(result EQUAL 0)
|
||||||
|
string(REGEX MATCH "\\(SONAME\\)[^\n]*\\[([^\n]+)\\.so\\.([^\n]*)\\]" soname "${output}")
|
||||||
|
set(${libname} "${CMAKE_MATCH_1}" PARENT_SCOPE)
|
||||||
|
set(${version} "${CMAKE_MATCH_2}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
message(WARNING "Error running readelf for \"${shared_object}\"")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Readelf utility is not available.")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(cpack_deb_prepare_package_vars)
|
function(cpack_deb_prepare_package_vars)
|
||||||
# CPACK_DEBIAN_PACKAGE_SHLIBDEPS
|
# CPACK_DEBIAN_PACKAGE_SHLIBDEPS
|
||||||
# If specify OFF, only user depends are used
|
# If specify OFF, only user depends are used
|
||||||
|
@ -447,6 +522,39 @@ function(cpack_deb_prepare_package_vars)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
|
||||||
|
# Generating binary list - Get type of all install files
|
||||||
|
cmake_policy(PUSH)
|
||||||
|
# Tell file(GLOB_RECURSE) not to follow directory symlinks
|
||||||
|
# even if the project does not set this policy to NEW.
|
||||||
|
cmake_policy(SET CMP0009 NEW)
|
||||||
|
file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*")
|
||||||
|
cmake_policy(POP)
|
||||||
|
|
||||||
|
# get file info so that we can determine if file is executable or not
|
||||||
|
unset(CPACK_DEB_INSTALL_FILES)
|
||||||
|
foreach(FILE_ IN LISTS FILE_PATHS_)
|
||||||
|
execute_process(COMMAND file "./${FILE_}"
|
||||||
|
WORKING_DIRECTORY "${WDIR}"
|
||||||
|
OUTPUT_VARIABLE INSTALL_FILE_)
|
||||||
|
list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Only dynamically linked ELF files are included
|
||||||
|
# Extract only file name infront of ":"
|
||||||
|
foreach(_FILE IN LISTS CPACK_DEB_INSTALL_FILES)
|
||||||
|
if(_FILE MATCHES "ELF.*dynamically linked")
|
||||||
|
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||||
|
list(APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}")
|
||||||
|
set(CONTAINS_EXECUTABLE_FILES_ TRUE)
|
||||||
|
endif()
|
||||||
|
if(_FILE MATCHES "ELF.*shared object")
|
||||||
|
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||||
|
list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
|
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
|
||||||
# dpkg-shlibdeps is a Debian utility for generating dependency list
|
# dpkg-shlibdeps is a Debian utility for generating dependency list
|
||||||
find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)
|
find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)
|
||||||
|
@ -468,33 +576,6 @@ function(cpack_deb_prepare_package_vars)
|
||||||
message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
|
message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Generating binary list - Get type of all install files
|
|
||||||
cmake_policy(PUSH)
|
|
||||||
# Tell file(GLOB_RECURSE) not to follow directory symlinks
|
|
||||||
# even if the project does not set this policy to NEW.
|
|
||||||
cmake_policy(SET CMP0009 NEW)
|
|
||||||
file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*")
|
|
||||||
cmake_policy(POP)
|
|
||||||
|
|
||||||
# get file info so that we can determine if file is executable or not
|
|
||||||
unset(CPACK_DEB_INSTALL_FILES)
|
|
||||||
foreach(FILE_ IN LISTS FILE_PATHS_)
|
|
||||||
execute_process(COMMAND file "./${FILE_}"
|
|
||||||
WORKING_DIRECTORY "${WDIR}"
|
|
||||||
OUTPUT_VARIABLE INSTALL_FILE_)
|
|
||||||
list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Only dynamically linked ELF files are included
|
|
||||||
# Extract only file name infront of ":"
|
|
||||||
foreach(_FILE ${CPACK_DEB_INSTALL_FILES})
|
|
||||||
if( ${_FILE} MATCHES "ELF.*dynamically linked")
|
|
||||||
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
|
||||||
list(APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}")
|
|
||||||
set(CONTAINS_EXECUTABLE_FILES_ TRUE)
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
if(CONTAINS_EXECUTABLE_FILES_)
|
if(CONTAINS_EXECUTABLE_FILES_)
|
||||||
message("CPackDeb: - Generating dependency list")
|
message("CPackDeb: - Generating dependency list")
|
||||||
|
|
||||||
|
@ -586,7 +667,9 @@ function(cpack_deb_prepare_package_vars)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Architecture: (mandatory)
|
# Architecture: (mandatory)
|
||||||
if(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
|
if(CPACK_DEB_PACKAGE_COMPONENT AND CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE}")
|
||||||
|
elseif(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
|
||||||
# There is no such thing as i686 architecture on debian, you should use i386 instead
|
# There is no such thing as i686 architecture on debian, you should use i386 instead
|
||||||
# $ dpkg --print-architecture
|
# $ dpkg --print-architecture
|
||||||
find_program(DPKG_CMD dpkg)
|
find_program(DPKG_CMD dpkg)
|
||||||
|
@ -630,6 +713,22 @@ function(cpack_deb_prepare_package_vars)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
set(COMPONENT_DEPENDS "")
|
||||||
|
foreach (_PACK ${CPACK_COMPONENT_${_local_component_name}_DEPENDS})
|
||||||
|
get_component_package_name(_PACK_NAME "${_PACK}")
|
||||||
|
if(COMPONENT_DEPENDS)
|
||||||
|
set(COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION}), ${COMPONENT_DEPENDS}")
|
||||||
|
else()
|
||||||
|
set(COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION})")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(COMPONENT_DEPENDS)
|
||||||
|
if(CPACK_DEBIAN_PACKAGE_DEPENDS)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${COMPONENT_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}")
|
||||||
|
else()
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${COMPONENT_DEPENDS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
|
# at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
|
||||||
|
@ -637,7 +736,7 @@ function(cpack_deb_prepare_package_vars)
|
||||||
# Append automatically discovered dependencies .
|
# Append automatically discovered dependencies .
|
||||||
if(NOT "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}" STREQUAL "")
|
if(NOT "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}" STREQUAL "")
|
||||||
if (CPACK_DEBIAN_PACKAGE_DEPENDS)
|
if (CPACK_DEBIAN_PACKAGE_DEPENDS)
|
||||||
set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}")
|
set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
|
||||||
else ()
|
else ()
|
||||||
set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
|
set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -718,14 +817,75 @@ function(cpack_deb_prepare_package_vars)
|
||||||
set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
|
set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
get_component_package_name(CPACK_DEBIAN_PACKAGE_NAME ${_local_component_name})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CPACK_DEBIAN_${_local_component_name}_PACKAGE_NAME)
|
set(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "")
|
||||||
string(TOLOWER "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
|
|
||||||
|
if (NOT CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||||
|
|
||||||
|
if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
|
||||||
|
if(READELF_EXECUTABLE)
|
||||||
|
foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
|
||||||
|
extract_so_info("${_FILE}" libname soversion)
|
||||||
|
if(libname AND soversion)
|
||||||
|
list(APPEND CPACK_DEBIAN_PACKAGE_SHLIBS_LIST
|
||||||
|
"${libname} ${soversion} ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY} ${CPACK_PACKAGE_VERSION})")
|
||||||
|
else()
|
||||||
|
message(AUTHOR_WARNING "Shared library '${_FILE}' is missing soname or soversion. Library will not be added to DEBIAN/shlibs control file.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if (CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
|
||||||
|
string(REPLACE ";" "\n" CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_DEB_PACKAGE_COMPONENT}" CPACK_DEBIAN_PACKAGE_NAME)
|
message(FATAL_ERROR "Readelf utility is not available. CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS option is not available.")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# add ldconfig call in default postrm and postint
|
||||||
|
set(CPACK_ADD_LDCONFIG_CALL 0)
|
||||||
|
foreach(_FILE ${CPACK_DEB_SHARED_OBJECT_FILES})
|
||||||
|
get_filename_component(_DIR ${_FILE} DIRECTORY)
|
||||||
|
# all files in CPACK_DEB_SHARED_OBJECT_FILES have dot at the beginning
|
||||||
|
if(_DIR STREQUAL "./lib" OR _DIR STREQUAL "./usr/lib")
|
||||||
|
set(CPACK_ADD_LDCONFIG_CALL 1)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(CPACK_ADD_LDCONFIG_CALL)
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTINST 1)
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTRM 1)
|
||||||
|
foreach(f ${PACKAGE_CONTROL_EXTRA})
|
||||||
|
get_filename_component(n "${f}" NAME)
|
||||||
|
if("${n}" STREQUAL "postinst")
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTINST 0)
|
||||||
|
endif()
|
||||||
|
if("${n}" STREQUAL "postrm")
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTRM 0)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTINST 0)
|
||||||
|
set(CPACK_DEBIAN_GENERATE_POSTRM 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CPACK_DEBIAN_PACKAGE_RELEASE)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_RELEASE 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Patch package file name to be in corrent debian format:
|
||||||
|
# <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
|
||||||
|
set(CPACK_OUTPUT_FILE_NAME
|
||||||
|
"${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
|
||||||
|
set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}")
|
||||||
|
get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY)
|
||||||
|
set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}")
|
||||||
|
|
||||||
# Print out some debug information if we were asked for that
|
# Print out some debug information if we were asked for that
|
||||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||||
message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY = '${CPACK_TOPLEVEL_DIRECTORY}'")
|
message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY = '${CPACK_TOPLEVEL_DIRECTORY}'")
|
||||||
|
@ -755,6 +915,8 @@ function(cpack_deb_prepare_package_vars)
|
||||||
#endif()
|
#endif()
|
||||||
|
|
||||||
# move variables to parent scope so that they may be used to create debian package
|
# move variables to parent scope so that they may be used to create debian package
|
||||||
|
set(GEN_CPACK_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}" PARENT_SCOPE)
|
||||||
|
set(GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE)
|
||||||
|
@ -773,11 +935,14 @@ function(cpack_deb_prepare_package_vars)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE)
|
||||||
|
set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
|
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
|
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
|
||||||
"${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
|
"${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
|
||||||
set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
|
set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
|
||||||
"${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
|
"${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
|
||||||
|
set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE)
|
||||||
|
set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE)
|
||||||
set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
|
set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,10 @@ int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel,
|
||||||
cmSystemTools::GetParentDirectory(toplevel)
|
cmSystemTools::GetParentDirectory(toplevel)
|
||||||
);
|
);
|
||||||
std::string outputFileName(
|
std::string outputFileName(
|
||||||
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME"))
|
cmsys::SystemTools::LowerCase(
|
||||||
+"-"+packageName + this->GetOutputExtension()
|
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")))
|
||||||
);
|
+"-"+packageName + this->GetOutputExtension()
|
||||||
|
);
|
||||||
|
|
||||||
localToplevel += "/"+ packageName;
|
localToplevel += "/"+ packageName;
|
||||||
/* replace the TEMP DIRECTORY with the component one */
|
/* replace the TEMP DIRECTORY with the component one */
|
||||||
|
@ -107,6 +108,9 @@ int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel,
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
// add the generated package to package file names list
|
// add the generated package to package file names list
|
||||||
|
packageFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
|
||||||
|
packageFileName += "/";
|
||||||
|
packageFileName += this->GetOption("GEN_CPACK_OUTPUT_FILE_NAME");
|
||||||
packageFileNames.push_back(packageFileName);
|
packageFileNames.push_back(packageFileName);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -165,17 +169,16 @@ int cmCPackDebGenerator::PackageComponents(bool ignoreGroup)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmCPackDebGenerator::PackageComponentsAllInOne()
|
//----------------------------------------------------------------------
|
||||||
|
int cmCPackDebGenerator::PackageComponentsAllInOne(
|
||||||
|
const std::string& compInstDirName)
|
||||||
{
|
{
|
||||||
int retval = 1;
|
int retval = 1;
|
||||||
std::string compInstDirName;
|
|
||||||
/* Reset package file name list it will be populated during the
|
/* Reset package file name list it will be populated during the
|
||||||
* component packaging run*/
|
* component packaging run*/
|
||||||
packageFileNames.clear();
|
packageFileNames.clear();
|
||||||
std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY"));
|
std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY"));
|
||||||
|
|
||||||
compInstDirName = "ALL_COMPONENTS_IN_ONE";
|
|
||||||
|
|
||||||
cmCPackLogger(cmCPackLog::LOG_VERBOSE,
|
cmCPackLogger(cmCPackLog::LOG_VERBOSE,
|
||||||
"Packaging all groups in one package..."
|
"Packaging all groups in one package..."
|
||||||
"(CPACK_COMPONENTS_ALL_[GROUPS_]IN_ONE_PACKAGE is set)"
|
"(CPACK_COMPONENTS_ALL_[GROUPS_]IN_ONE_PACKAGE is set)"
|
||||||
|
@ -187,7 +190,8 @@ int cmCPackDebGenerator::PackageComponentsAllInOne()
|
||||||
cmSystemTools::GetParentDirectory(toplevel)
|
cmSystemTools::GetParentDirectory(toplevel)
|
||||||
);
|
);
|
||||||
std::string outputFileName(
|
std::string outputFileName(
|
||||||
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME"))
|
cmsys::SystemTools::LowerCase(
|
||||||
|
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")))
|
||||||
+ this->GetOutputExtension()
|
+ this->GetOutputExtension()
|
||||||
);
|
);
|
||||||
// all GROUP in one vs all COMPONENT in one
|
// all GROUP in one vs all COMPONENT in one
|
||||||
|
@ -201,11 +205,15 @@ int cmCPackDebGenerator::PackageComponentsAllInOne()
|
||||||
/* replace the TEMPORARY package file name */
|
/* replace the TEMPORARY package file name */
|
||||||
this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
|
this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
|
||||||
packageFileName.c_str());
|
packageFileName.c_str());
|
||||||
// Tell CPackDeb.cmake the path where the component is.
|
|
||||||
std::string component_path = "/";
|
if(!compInstDirName.empty())
|
||||||
component_path += compInstDirName;
|
{
|
||||||
this->SetOption("CPACK_DEB_PACKAGE_COMPONENT_PART_PATH",
|
// Tell CPackDeb.cmake the path where the component is.
|
||||||
component_path.c_str());
|
std::string component_path = "/";
|
||||||
|
component_path += compInstDirName;
|
||||||
|
this->SetOption("CPACK_DEB_PACKAGE_COMPONENT_PART_PATH",
|
||||||
|
component_path.c_str());
|
||||||
|
}
|
||||||
if (!this->ReadListFile("CPackDeb.cmake"))
|
if (!this->ReadListFile("CPackDeb.cmake"))
|
||||||
{
|
{
|
||||||
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
@ -227,20 +235,22 @@ int cmCPackDebGenerator::PackageComponentsAllInOne()
|
||||||
}
|
}
|
||||||
packageFiles = gl.GetFiles();
|
packageFiles = gl.GetFiles();
|
||||||
|
|
||||||
|
|
||||||
int res = createDeb();
|
int res = createDeb();
|
||||||
if (res != 1)
|
if (res != 1)
|
||||||
{
|
{
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
// add the generated package to package file names list
|
// add the generated package to package file names list
|
||||||
|
packageFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
|
||||||
|
packageFileName += "/";
|
||||||
|
packageFileName += this->GetOption("GEN_CPACK_OUTPUT_FILE_NAME");
|
||||||
packageFileNames.push_back(packageFileName);
|
packageFileNames.push_back(packageFileName);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmCPackDebGenerator::PackageFiles()
|
int cmCPackDebGenerator::PackageFiles()
|
||||||
{
|
{
|
||||||
int retval = -1;
|
|
||||||
|
|
||||||
/* Are we in the component packaging case */
|
/* Are we in the component packaging case */
|
||||||
if (WantsComponentInstallation()) {
|
if (WantsComponentInstallation()) {
|
||||||
// CASE 1 : COMPONENT ALL-IN-ONE package
|
// CASE 1 : COMPONENT ALL-IN-ONE package
|
||||||
|
@ -248,7 +258,7 @@ int cmCPackDebGenerator::PackageFiles()
|
||||||
// then the package file is unique and should be open here.
|
// then the package file is unique and should be open here.
|
||||||
if (componentPackageMethod == ONE_PACKAGE)
|
if (componentPackageMethod == ONE_PACKAGE)
|
||||||
{
|
{
|
||||||
return PackageComponentsAllInOne();
|
return PackageComponentsAllInOne("ALL_COMPONENTS_IN_ONE");
|
||||||
}
|
}
|
||||||
// CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one)
|
// CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one)
|
||||||
// There will be 1 package for each component group
|
// There will be 1 package for each component group
|
||||||
|
@ -263,27 +273,15 @@ int cmCPackDebGenerator::PackageFiles()
|
||||||
// CASE 3 : NON COMPONENT package.
|
// CASE 3 : NON COMPONENT package.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!this->ReadListFile("CPackDeb.cmake"))
|
return PackageComponentsAllInOne("");
|
||||||
{
|
|
||||||
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
|
||||||
"Error while execution CPackDeb.cmake" << std::endl);
|
|
||||||
retval = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
packageFiles = files;
|
|
||||||
return createDeb();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmCPackDebGenerator::createDeb()
|
int cmCPackDebGenerator::createDeb()
|
||||||
{
|
{
|
||||||
// debian-binary file
|
// debian-binary file
|
||||||
std::string dbfilename;
|
const std::string strGenWDIR(this->GetOption("GEN_WDIR"));
|
||||||
dbfilename += this->GetOption("GEN_WDIR");
|
const std::string dbfilename = strGenWDIR + "/debian-binary";
|
||||||
dbfilename += "/debian-binary";
|
|
||||||
{ // the scope is needed for cmGeneratedFileStream
|
{ // the scope is needed for cmGeneratedFileStream
|
||||||
cmGeneratedFileStream out(dbfilename.c_str());
|
cmGeneratedFileStream out(dbfilename.c_str());
|
||||||
out << "2.0";
|
out << "2.0";
|
||||||
|
@ -291,9 +289,7 @@ int cmCPackDebGenerator::createDeb()
|
||||||
}
|
}
|
||||||
|
|
||||||
// control file
|
// control file
|
||||||
std::string ctlfilename;
|
std::string ctlfilename = strGenWDIR + "/control";
|
||||||
ctlfilename = this->GetOption("GEN_WDIR");
|
|
||||||
ctlfilename += "/control";
|
|
||||||
|
|
||||||
// debian policy enforce lower case for package name
|
// debian policy enforce lower case for package name
|
||||||
// mandatory entries:
|
// mandatory entries:
|
||||||
|
@ -405,7 +401,41 @@ int cmCPackDebGenerator::createDeb()
|
||||||
out << std::endl;
|
out << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string strGenWDIR(this->GetOption("GEN_WDIR"));
|
const std::string shlibsfilename = strGenWDIR + "/shlibs";
|
||||||
|
|
||||||
|
const char* debian_pkg_shlibs = this->GetOption(
|
||||||
|
"GEN_CPACK_DEBIAN_PACKAGE_SHLIBS");
|
||||||
|
const bool gen_shibs = this->IsOn("CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS")
|
||||||
|
&& debian_pkg_shlibs && *debian_pkg_shlibs;
|
||||||
|
if( gen_shibs )
|
||||||
|
{
|
||||||
|
cmGeneratedFileStream out(shlibsfilename.c_str());
|
||||||
|
out << debian_pkg_shlibs;
|
||||||
|
out << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string postinst = strGenWDIR + "/postinst";
|
||||||
|
const std::string postrm = strGenWDIR + "/postrm";
|
||||||
|
if(this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTINST"))
|
||||||
|
{
|
||||||
|
cmGeneratedFileStream out(postinst.c_str());
|
||||||
|
out <<
|
||||||
|
"#!/bin/sh\n\n"
|
||||||
|
"set -e\n\n"
|
||||||
|
"if [ \"$1\" = \"configure\" ]; then\n"
|
||||||
|
"\tldconfig\n"
|
||||||
|
"fi\n";
|
||||||
|
}
|
||||||
|
if(this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTRM"))
|
||||||
|
{
|
||||||
|
cmGeneratedFileStream out(postrm.c_str());
|
||||||
|
out <<
|
||||||
|
"#!/bin/sh\n\n"
|
||||||
|
"set -e\n\n"
|
||||||
|
"if [ \"$1\" = \"remove\" ]; then\n"
|
||||||
|
"\tldconfig\n"
|
||||||
|
"fi\n";
|
||||||
|
}
|
||||||
|
|
||||||
cmArchiveWrite::Compress tar_compression_type = cmArchiveWrite::CompressGZip;
|
cmArchiveWrite::Compress tar_compression_type = cmArchiveWrite::CompressGZip;
|
||||||
const char* debian_compression_type =
|
const char* debian_compression_type =
|
||||||
|
@ -605,6 +635,54 @@ int cmCPackDebGenerator::createDeb()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// adds generated shlibs file
|
||||||
|
if( gen_shibs )
|
||||||
|
{
|
||||||
|
if( !control_tar.Add(shlibsfilename, strGenWDIR.length(), ".") )
|
||||||
|
{
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
"Error adding file to tar:" << std::endl
|
||||||
|
<< "#top level directory: "
|
||||||
|
<< strGenWDIR << std::endl
|
||||||
|
<< "#file: \"shlibs\"" << std::endl
|
||||||
|
<< "#error:" << control_tar.GetError() << std::endl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// adds LDCONFIG related files
|
||||||
|
if(this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTINST"))
|
||||||
|
{
|
||||||
|
control_tar.SetPermissions(permission755);
|
||||||
|
if(!control_tar.Add(postinst, strGenWDIR.length(), "."))
|
||||||
|
{
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
"Error adding file to tar:" << std::endl
|
||||||
|
<< "#top level directory: "
|
||||||
|
<< strGenWDIR << std::endl
|
||||||
|
<< "#file: \"postinst\"" << std::endl
|
||||||
|
<< "#error:" << control_tar.GetError() << std::endl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
control_tar.SetPermissions(permission644);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTRM"))
|
||||||
|
{
|
||||||
|
control_tar.SetPermissions(permission755);
|
||||||
|
if(!control_tar.Add(postrm, strGenWDIR.length(), "."))
|
||||||
|
{
|
||||||
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
|
"Error adding file to tar:" << std::endl
|
||||||
|
<< "#top level directory: "
|
||||||
|
<< strGenWDIR << std::endl
|
||||||
|
<< "#file: \"postinst\"" << std::endl
|
||||||
|
<< "#error:" << control_tar.GetError() << std::endl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
control_tar.SetPermissions(permission644);
|
||||||
|
}
|
||||||
|
|
||||||
// for the other files, we use
|
// for the other files, we use
|
||||||
// -either the original permission on the files
|
// -either the original permission on the files
|
||||||
// -either a permission strictly defined by the Debian policies
|
// -either a permission strictly defined by the Debian policies
|
||||||
|
@ -662,11 +740,12 @@ int cmCPackDebGenerator::createDeb()
|
||||||
arFiles.push_back(topLevelString + "data.tar" + compression_suffix);
|
arFiles.push_back(topLevelString + "data.tar" + compression_suffix);
|
||||||
std::string outputFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
|
std::string outputFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
|
||||||
outputFileName += "/";
|
outputFileName += "/";
|
||||||
outputFileName += this->GetOption("CPACK_OUTPUT_FILE_NAME");
|
outputFileName += this->GetOption("GEN_CPACK_OUTPUT_FILE_NAME");
|
||||||
int res = ar_append(outputFileName.c_str(), arFiles);
|
int res = ar_append(outputFileName.c_str(), arFiles);
|
||||||
if ( res!=0 )
|
if ( res!=0 )
|
||||||
{
|
{
|
||||||
std::string tmpFile = this->GetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME");
|
std::string tmpFile = this->GetOption(
|
||||||
|
"GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME");
|
||||||
tmpFile += "/Deb.log";
|
tmpFile += "/Deb.log";
|
||||||
cmGeneratedFileStream ofs(tmpFile.c_str());
|
cmGeneratedFileStream ofs(tmpFile.c_str());
|
||||||
ofs << "# Problem creating archive using: " << res << std::endl;
|
ofs << "# Problem creating archive using: " << res << std::endl;
|
||||||
|
|
|
@ -60,7 +60,7 @@ protected:
|
||||||
* Special case of component install where all
|
* Special case of component install where all
|
||||||
* components will be put in a single installer.
|
* components will be put in a single installer.
|
||||||
*/
|
*/
|
||||||
int PackageComponentsAllInOne();
|
int PackageComponentsAllInOne(const std::string& compInstDirName);
|
||||||
virtual int PackageFiles();
|
virtual int PackageFiles();
|
||||||
virtual const char* GetOutputExtension() { return ".deb"; }
|
virtual const char* GetOutputExtension() { return ".deb"; }
|
||||||
virtual bool SupportsComponentInstallation() const;
|
virtual bool SupportsComponentInstallation() const;
|
||||||
|
|
|
@ -6,7 +6,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
|
|
||||||
# expected results
|
# expected results
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,9 +60,9 @@ if(DPKGDEB_EXECUTABLE)
|
||||||
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-application'\n")
|
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-application'\n")
|
||||||
endif()
|
endif()
|
||||||
elseif("${dpkg_package_name}" STREQUAL "mylib-headers")
|
elseif("${dpkg_package_name}" STREQUAL "mylib-headers")
|
||||||
if(NOT "${dpkg_depends}" STREQUAL "depend-headers")
|
if(NOT "${dpkg_depends}" STREQUAL "mylib-libraries (= 1.0.2), depend-headers")
|
||||||
set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
|
set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
|
||||||
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-headers'\n")
|
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'mylib-libraries (= 1.0.2), depend-headers'\n")
|
||||||
endif()
|
endif()
|
||||||
elseif("${dpkg_package_name}" STREQUAL "mylib-libraries")
|
elseif("${dpkg_package_name}" STREQUAL "mylib-libraries")
|
||||||
if(NOT "${dpkg_depends}" STREQUAL "depend-default")
|
if(NOT "${dpkg_depends}" STREQUAL "depend-default")
|
||||||
|
|
|
@ -6,7 +6,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
|
|
||||||
# expected results
|
# expected results
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
set(config_verbose -V)
|
set(config_verbose -V)
|
||||||
|
@ -73,9 +73,9 @@ if(DPKGDEB_EXECUTABLE)
|
||||||
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' does contains 'depend-default'\n")
|
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' does contains 'depend-default'\n")
|
||||||
endif()
|
endif()
|
||||||
elseif("${dpkg_package_name}" STREQUAL "mylib-headers")
|
elseif("${dpkg_package_name}" STREQUAL "mylib-headers")
|
||||||
if(NOT "${dpkg_depends}" STREQUAL "depend-headers")
|
if(NOT "${dpkg_depends}" STREQUAL "mylib-libraries (= 1.0.2), depend-headers")
|
||||||
set(dpkgdeb_output_errors_all "${dpkgdeb_output_errors_all}"
|
set(dpkgdeb_output_errors_all "${dpkgdeb_output_errors_all}"
|
||||||
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-headers'\n")
|
"dpkg-deb: ${_f}: Incorrect dependencies for package ${dpkg_package_name}: '${dpkg_depends}' != 'mylib-libraries (= 1.0.2), depend-headers'\n")
|
||||||
endif()
|
endif()
|
||||||
elseif("${dpkg_package_name}" STREQUAL "mylib-libraries")
|
elseif("${dpkg_package_name}" STREQUAL "mylib-libraries")
|
||||||
if(NOT "${dpkg_depends}" STREQUAL "depend-default")
|
if(NOT "${dpkg_depends}" STREQUAL "depend-default")
|
||||||
|
|
|
@ -6,7 +6,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
|
|
||||||
# expected results
|
# expected results
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
|
|
||||||
# expected results
|
# expected results
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ endif()
|
||||||
include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
# TODO: currently debian doens't produce lower cased names
|
# TODO: currently debian doens't produce lower cased names
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
# requirements
|
# requirements
|
||||||
|
|
||||||
# debian now produces lower case names
|
# debian now produces lower case names
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
|
|
||||||
# expected results
|
# expected results
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib-*_1.0.2-1_*.deb")
|
||||||
set(expected_count 3)
|
set(expected_count 3)
|
||||||
|
|
||||||
set(config_verbose -V)
|
set(config_verbose -V)
|
||||||
|
|
|
@ -5,7 +5,7 @@ endif()
|
||||||
include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
|
||||||
|
|
||||||
# TODO: currently debian doens't produce lower cased names
|
# TODO: currently debian doens't produce lower cased names
|
||||||
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/mylib_1.0.2-1_*.deb")
|
||||||
set(expected_count 1)
|
set(expected_count 1)
|
||||||
|
|
||||||
set(actual_output)
|
set(actual_output)
|
||||||
|
|
|
@ -60,7 +60,7 @@ elseif (CPackGen MATCHES "RPM")
|
||||||
set(expected_count 1)
|
set(expected_count 1)
|
||||||
endif ()
|
endif ()
|
||||||
elseif (CPackGen MATCHES "DEB")
|
elseif (CPackGen MATCHES "DEB")
|
||||||
set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.deb")
|
set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/mylib*_1.0.2-1_*.deb")
|
||||||
if (${CPackComponentWay} STREQUAL "default")
|
if (${CPackComponentWay} STREQUAL "default")
|
||||||
set(expected_count 1)
|
set(expected_count 1)
|
||||||
elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
|
elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
|
||||||
|
|
|
@ -9,6 +9,20 @@ function(run_cpack_test TEST_NAME types build)
|
||||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||||
|
|
||||||
|
if(EXISTS "${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-Prerequirements.cmake")
|
||||||
|
include("${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-Prerequirements.cmake")
|
||||||
|
|
||||||
|
set(FOUND_PREREQUIREMENTS false)
|
||||||
|
get_test_prerequirements("FOUND_PREREQUIREMENTS"
|
||||||
|
"${TEST_CONFIG_DIR}/${type}_config.cmake")
|
||||||
|
|
||||||
|
# skip the test if prerequirements are not met
|
||||||
|
if(NOT FOUND_PREREQUIREMENTS)
|
||||||
|
message(STATUS "${TEST_NAME} - SKIPPED")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# execute cmake
|
# execute cmake
|
||||||
set(RunCMake_TEST_OPTIONS "-DGENERATOR_TYPE=${TEST_TYPE}")
|
set(RunCMake_TEST_OPTIONS "-DGENERATOR_TYPE=${TEST_TYPE}")
|
||||||
run_cmake(${TEST_NAME})
|
run_cmake(${TEST_NAME})
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "1")
|
set(EXPECTED_FILES_COUNT "1")
|
||||||
set(EXPECTED_FILE_1 "components_empty_dir*.deb")
|
set(EXPECTED_FILE_1 "components_empty_dir-test_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/empty/$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/empty/$")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "3")
|
set(EXPECTED_FILES_COUNT "3")
|
||||||
set(EXPECTED_FILE_1 "deb_extra-*-foo.deb")
|
set(EXPECTED_FILE_1 "deb_extra-foo_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
||||||
set(EXPECTED_FILE_2 "deb_extra-*-bar.deb")
|
set(EXPECTED_FILE_2 "deb_extra-bar_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/${whitespaces_}.*/usr/bar/${whitespaces_}.*/usr/bar/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/${whitespaces_}.*/usr/bar/${whitespaces_}.*/usr/bar/CMakeLists.txt$")
|
||||||
set(EXPECTED_FILE_3 "deb_extra-*-bas.deb")
|
set(EXPECTED_FILE_3 "deb_extra-bas_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/${whitespaces_}.*/usr/bas/${whitespaces_}.*/usr/bas/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/${whitespaces_}.*/usr/bas/${whitespaces_}.*/usr/bas/CMakeLists.txt$")
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
|
set(EXPECTED_FILES_COUNT "1")
|
||||||
|
set(EXPECTED_FILE_1 "generate_shlibs_0.1.1-1_*.deb")
|
||||||
|
# dynamic lib extension is .so on Linux and .dylib on Mac so we will use a wildcard .* for it
|
||||||
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/foo${whitespaces_}.*/usr/foo/libtest_lib\\..*$")
|
|
@ -0,0 +1,7 @@
|
||||||
|
function(get_test_prerequirements found_var)
|
||||||
|
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||||
|
|
||||||
|
if(READELF_EXECUTABLE)
|
||||||
|
set(${found_var} true PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
|
@ -0,0 +1,3 @@
|
||||||
|
set(shlibs_shlibs "^libtest_lib 0\\.8 generate_shlibs \\(\\= 0\\.1\\.1\\)\n$")
|
||||||
|
set(shlibs_shlibs_permissions_regex "-rw-r--r-- .*")
|
||||||
|
verifyDebControl("${FOUND_FILE_1}" "shlibs" "shlibs")
|
|
@ -0,0 +1,6 @@
|
||||||
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
|
set(EXPECTED_FILES_COUNT "1")
|
||||||
|
set(EXPECTED_FILE_1 "generate_shlibs_ldconfig_0.1.1-1_*.deb")
|
||||||
|
# dynamic lib extension is .so on Linux and .dylib on Mac so we will use a wildcard .* for it
|
||||||
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/lib${whitespaces_}.*/usr/lib/libtest_lib\\..*$")
|
|
@ -0,0 +1,7 @@
|
||||||
|
function(get_test_prerequirements found_var)
|
||||||
|
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||||
|
|
||||||
|
if(READELF_EXECUTABLE)
|
||||||
|
set(${found_var} true PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
|
@ -0,0 +1,7 @@
|
||||||
|
set(shlibs_shlibs "^libtest_lib 0\\.8 generate_shlibs_ldconfig \\(>\\= 0\\.1\\.1\\)\n$")
|
||||||
|
set(shlibs_shlibs_permissions_regex "-rw-r--r-- .*")
|
||||||
|
set(shlibs_postinst ".*ldconfig.*")
|
||||||
|
set(shlibs_postinst_permissions_regex "-rwxr-xr-x .*")
|
||||||
|
set(shlibs_postrm ".*ldconfig.*")
|
||||||
|
set(shlibs_postrm_permissions_regex "-rwxr-xr-x .*")
|
||||||
|
verifyDebControl("${FOUND_FILE_1}" "shlibs" "shlibs;postinst;postrm")
|
|
@ -1,14 +1,14 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "5")
|
set(EXPECTED_FILES_COUNT "5")
|
||||||
set(EXPECTED_FILE_1 "dependencies*-applications.deb")
|
set(EXPECTED_FILE_1 "dependencies-applications_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/foo${whitespaces_}.*/usr/foo/test_prog$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/foo${whitespaces_}.*/usr/foo/test_prog$")
|
||||||
set(EXPECTED_FILE_2 "dependencies*-applications_auto.deb")
|
set(EXPECTED_FILE_2 "dependencies-applications_auto_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/foo_auto${whitespaces_}.*/usr/foo_auto/test_prog$")
|
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/foo_auto${whitespaces_}.*/usr/foo_auto/test_prog$")
|
||||||
set(EXPECTED_FILE_3 "dependencies*-headers.deb")
|
set(EXPECTED_FILE_3 "dependencies-headers_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/bar${whitespaces_}.*/usr/bar/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/bar${whitespaces_}.*/usr/bar/CMakeLists.txt$")
|
||||||
set(EXPECTED_FILE_4 "dependencies*-libs.deb")
|
set(EXPECTED_FILE_4 "dependencies-libs_0.1.1-1_*.deb")
|
||||||
# dynamic lib extension is .so on Linux and .dylib on Mac so we will use a wildcard .* for it
|
# dynamic lib extension is .so on Linux and .dylib on Mac so we will use a wildcard .* for it
|
||||||
set(EXPECTED_FILE_CONTENT_4 "^.*/usr/bas${whitespaces_}.*/usr/bas/libtest_lib\\..*$")
|
set(EXPECTED_FILE_CONTENT_4 "^.*/usr/bas${whitespaces_}.*/usr/bas/libtest_lib\\..*$")
|
||||||
set(EXPECTED_FILE_5 "dependencies*-libs_auto.deb")
|
set(EXPECTED_FILE_5 "dependencies-libs_auto_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_5 "^.*/usr/bas_auto${whitespaces_}.*/usr/bas_auto/libtest_lib\\..*$")
|
set(EXPECTED_FILE_CONTENT_5 "^.*/usr/bas_auto${whitespaces_}.*/usr/bas_auto/libtest_lib\\..*$")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "1")
|
set(EXPECTED_FILES_COUNT "1")
|
||||||
set(EXPECTED_FILE_1 "empty_dir*.deb")
|
set(EXPECTED_FILE_1 "empty_dir_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/empty/$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/empty/$")
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
set(ALL_FILES_GLOB "*.deb")
|
set(ALL_FILES_GLOB "*.deb")
|
||||||
|
|
||||||
function(getPackageContent FILE RESULT_VAR)
|
function(getPackageContent FILE RESULT_VAR)
|
||||||
execute_process(COMMAND ${DPKG_EXECUTABLE} -c ${FILE}
|
execute_process(COMMAND ${DPKG_EXECUTABLE} -c "${FILE}"
|
||||||
OUTPUT_VARIABLE package_content_
|
OUTPUT_VARIABLE package_content_
|
||||||
ERROR_QUIET
|
ERROR_QUIET
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
@ -9,8 +9,73 @@ function(getPackageContent FILE RESULT_VAR)
|
||||||
set(${RESULT_VAR} "${package_content_}" PARENT_SCOPE)
|
set(${RESULT_VAR} "${package_content_}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(getMissingShlibsErrorExtra FILE RESULT_VAR)
|
||||||
|
execute_process(COMMAND ${DPKG_EXECUTABLE} -x "${FILE}" data_${PREFIX}
|
||||||
|
ERROR_VARIABLE err_)
|
||||||
|
|
||||||
|
if(err_)
|
||||||
|
set(error_extra " Extra: Could not unpack package content: '${err}'")
|
||||||
|
else()
|
||||||
|
cmake_policy(PUSH)
|
||||||
|
# Tell file(GLOB_RECURSE) not to follow directory symlinks
|
||||||
|
# even if the project does not set this policy to NEW.
|
||||||
|
cmake_policy(SET CMP0009 NEW)
|
||||||
|
file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/data_${PREFIX}/*")
|
||||||
|
cmake_policy(POP)
|
||||||
|
|
||||||
|
# get file info so that we can determine if file is executable or not
|
||||||
|
foreach(FILE_ IN LISTS FILE_PATHS_)
|
||||||
|
execute_process(COMMAND file "${FILE_}"
|
||||||
|
WORKING_DIRECTORY "${WDIR}"
|
||||||
|
OUTPUT_VARIABLE INSTALL_FILE_
|
||||||
|
ERROR_VARIABLE err_)
|
||||||
|
|
||||||
|
if(NOT err_)
|
||||||
|
list(APPEND deb_install_files "${INSTALL_FILE_}")
|
||||||
|
else()
|
||||||
|
list(APPEND deb_install_files_errors "'${FILE_}': '${err_}'\n")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(error_extra " Extra: install files '${deb_install_files}'")
|
||||||
|
|
||||||
|
if(deb_install_files_errors)
|
||||||
|
set(error_extra "${error_extra}; errors \"${deb_install_files_errors}\"")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||||
|
|
||||||
|
if(READELF_EXECUTABLE)
|
||||||
|
set(error_extra "${error_extra}; readelf \"\n")
|
||||||
|
|
||||||
|
# Only dynamically linked ELF files are included
|
||||||
|
# Extract only file name infront of ":"
|
||||||
|
foreach(_FILE IN LISTS deb_install_files)
|
||||||
|
if(_FILE MATCHES "ELF.*shared object")
|
||||||
|
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||||
|
|
||||||
|
execute_process(COMMAND ${READELF_EXECUTABLE} -d "${CMAKE_MATCH_1}"
|
||||||
|
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_VARIABLE err_
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
set(error_extra "${error_extra} name '${CMAKE_MATCH_1}'\n result '${result}'\n output '${output}'\n error '${err_}'\n")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(error_extra "${error_extra}\"")
|
||||||
|
else()
|
||||||
|
set(error_extra "${error_extra}; error readelf missing")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${RESULT_VAR} "${error_extra}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(verifyDebControl FILE PREFIX VERIFY_FILES)
|
function(verifyDebControl FILE PREFIX VERIFY_FILES)
|
||||||
execute_process(COMMAND ${DPKG_EXECUTABLE} --control ${FILE} control_${PREFIX}
|
execute_process(COMMAND ${DPKG_EXECUTABLE} --control "${FILE}" control_${PREFIX}
|
||||||
ERROR_VARIABLE err_)
|
ERROR_VARIABLE err_)
|
||||||
|
|
||||||
if(err_)
|
if(err_)
|
||||||
|
@ -19,6 +84,14 @@ function(verifyDebControl FILE PREFIX VERIFY_FILES)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(FILE_ IN LISTS VERIFY_FILES)
|
foreach(FILE_ IN LISTS VERIFY_FILES)
|
||||||
|
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/control_${PREFIX}/${FILE_}")
|
||||||
|
if(FILE_ STREQUAL "shlibs")
|
||||||
|
getMissingShlibsErrorExtra("${FILE}" error_extra)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(FATAL_ERROR "Expected Debian control file does not exist: '${FILE_}'${error_extra}")
|
||||||
|
endif()
|
||||||
|
|
||||||
file(READ "${CMAKE_CURRENT_BINARY_DIR}/control_${PREFIX}/${FILE_}" content_)
|
file(READ "${CMAKE_CURRENT_BINARY_DIR}/control_${PREFIX}/${FILE_}" content_)
|
||||||
if(NOT content_ MATCHES "${${PREFIX}_${FILE_}}")
|
if(NOT content_ MATCHES "${${PREFIX}_${FILE_}}")
|
||||||
message(FATAL_ERROR "Unexpected content in for '${PREFIX}_${FILE_}'!"
|
message(FATAL_ERROR "Unexpected content in for '${PREFIX}_${FILE_}'!"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "1")
|
set(EXPECTED_FILES_COUNT "1")
|
||||||
set(EXPECTED_FILE_1 "minimal*.deb")
|
set(EXPECTED_FILE_1 "minimal_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
set(whitespaces_ "[\t\n\r ]*")
|
set(whitespaces_ "[\t\n\r ]*")
|
||||||
|
|
||||||
set(EXPECTED_FILES_COUNT "3")
|
set(EXPECTED_FILES_COUNT "3")
|
||||||
set(EXPECTED_FILE_1 "per_component*-pkg_1.deb")
|
set(EXPECTED_FILE_1 "per_component-pkg_1_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_1 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
||||||
set(EXPECTED_FILE_2 "per_component*-pkg_2.deb")
|
set(EXPECTED_FILE_2 "second_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_2 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
||||||
set(EXPECTED_FILE_3 "per_component*-pkg_3.deb")
|
set(EXPECTED_FILE_3 "per_component-pkg_3_0.1.1-1_*.deb")
|
||||||
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
set(EXPECTED_FILE_CONTENT_3 "^.*/usr/foo${whitespaces_}.*/usr/foo/CMakeLists.txt$")
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
set(CPACK_PACKAGE_CONTACT "someone")
|
||||||
|
set(CPACK_DEB_COMPONENT_INSTALL "ON")
|
||||||
|
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS "ON")
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH 1)
|
||||||
|
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_lib.hpp"
|
||||||
|
"int test_lib();\n")
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_lib.cpp"
|
||||||
|
"#include \"test_lib.hpp\"\nint test_lib() {return 0;}\n")
|
||||||
|
add_library(test_lib SHARED "${CMAKE_CURRENT_BINARY_DIR}/test_lib.cpp")
|
||||||
|
set_target_properties(test_lib PROPERTIES SOVERSION "0.8")
|
||||||
|
|
||||||
|
install(TARGETS test_lib DESTINATION foo COMPONENT libs)
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_NAME "generate_shlibs")
|
|
@ -0,0 +1,18 @@
|
||||||
|
set(CPACK_PACKAGE_CONTACT "someone")
|
||||||
|
set(CPACK_DEB_COMPONENT_INSTALL "ON")
|
||||||
|
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS "ON")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY ">=")
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH 1)
|
||||||
|
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_lib.hpp"
|
||||||
|
"int test_lib();\n")
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_lib.cpp"
|
||||||
|
"#include \"test_lib.hpp\"\nint test_lib() {return 0;}\n")
|
||||||
|
add_library(test_lib SHARED "${CMAKE_CURRENT_BINARY_DIR}/test_lib.cpp")
|
||||||
|
set_target_properties(test_lib PROPERTIES SOVERSION "0.8")
|
||||||
|
|
||||||
|
install(TARGETS test_lib LIBRARY DESTINATION lib COMPONENT libs NAMELINK_SKIP)
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_NAME "generate_shlibs_ldconfig")
|
|
@ -1,6 +1,9 @@
|
||||||
RunCMake.CPack is a test module that is intended for testing of package
|
RunCMake.CPack is a test module that is intended for testing of package
|
||||||
generators that can be validated from command line.
|
generators that can be validated from command line.
|
||||||
|
|
||||||
|
TODO: all tests should cover all packaging types (single package, grouped and
|
||||||
|
component packaging)
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
Adding a test
|
Adding a test
|
||||||
-------------
|
-------------
|
||||||
|
@ -19,10 +22,29 @@ run_cpack_test(<test_name> "<generator_name>")
|
||||||
will be run for all listed generators.
|
will be run for all listed generators.
|
||||||
|
|
||||||
Test consists of
|
Test consists of
|
||||||
|
- test prerequirements phase (optional)
|
||||||
- CMake execution phase
|
- CMake execution phase
|
||||||
- CPack execution phase
|
- CPack execution phase
|
||||||
- verification of generated files
|
- verification of generated files
|
||||||
|
|
||||||
|
test prerequirements phase (optional):
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
In some cases individual tests for certain generator need additional
|
||||||
|
prerequirements met.
|
||||||
|
|
||||||
|
In such cases '<generator_name>/<test_name>-Prerequirements.cmake' file
|
||||||
|
containing 'function(get_test_prerequirements found_var)' should be created.
|
||||||
|
Function should return true if all prerequirements are met.
|
||||||
|
|
||||||
|
If prerequirements are not met test will be skipped outputting
|
||||||
|
'<test_name> - SKIPPED' string. Note that this doesn't fail the entire test
|
||||||
|
group.
|
||||||
|
|
||||||
|
TODO: skipped tests should provide expected error string so test should fail
|
||||||
|
if error string is not found in the output of run test (this would add
|
||||||
|
'EXPECTED FAIL' string on success and 'ERROR' on failure).
|
||||||
|
|
||||||
CMake execution phase:
|
CMake execution phase:
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -12,3 +12,5 @@ run_cpack_test(EMPTY_DIR "RPM;DEB;TGZ" true)
|
||||||
run_cpack_test(COMPONENTS_EMPTY_DIR "RPM;DEB;TGZ" true)
|
run_cpack_test(COMPONENTS_EMPTY_DIR "RPM;DEB;TGZ" true)
|
||||||
run_cpack_test(PER_COMPONENT_FIELDS "RPM;DEB" false)
|
run_cpack_test(PER_COMPONENT_FIELDS "RPM;DEB" false)
|
||||||
run_cpack_test(INSTALL_SCRIPTS "RPM" false)
|
run_cpack_test(INSTALL_SCRIPTS "RPM" false)
|
||||||
|
run_cpack_test(DEB_GENERATE_SHLIBS "DEB" true)
|
||||||
|
run_cpack_test(DEB_GENERATE_SHLIBS_LDCONFIG "DEB" true)
|
||||||
|
|
Loading…
Reference in New Issue