Le 21/04/15 16:41, Raffi Enficiaud a écrit :
Le 21/04/15 14:36, Raffi Enficiaud a écrit :
Le 18/04/15 09:58, Raffi Enficiaud a écrit :
Le 18/04/15 09:34, Domen Vrankar a écrit :

The way you implemented it you are not covering the case:
1) CPACK_DEBIAN_PACKAGE_DESCRIPTION no set
2) CPACK_DEBIAN_PACKAGE_DESCRIPTION is set with component description
3) next component doesn't set per component description so
CPACK_DEBIAN_PACKAGE_DESCRIPTION is not reset and description of the
previous component is used

Or if 1) would be set and 3 not set you would loose the initial
description

Ok. I worked essentially on having the tests kind of functional. I will
add the cases you mentioned in new tests.


Please find attached the patch that allows a description per component.
I believe I created a test covering the issue you mentioned above.


Raffi



Please find attached the patch that enables the setting of the
dependency discovery per-component. This patch is based on the previous
one (description per component), but is rather independent. The next
patch, dependency per component, will depend on the changes made by the
attached patch.

Best,
Raffi



Please find attached my last patch that allows the settings of the dependencies per component.

I do not know how you would like to proceed. It should not be any issue in applying the patches in sequence from the changes you made yesterday.

Any feedback more than welcome.

Best,
Raffi
>From d43784c761d4e2d23fb8242eb194c88baa808da5 Mon Sep 17 00:00:00 2001
From: Raffi Enficiaud <[email protected]>
Date: Tue, 21 Apr 2015 17:15:00 +0200
Subject: [PATCH] CPackDEB: Enabling the settings of the dependencies per
 component.

---
 Modules/CPackDeb.cmake                             | 49 ++++++++++--
 Tests/CMakeLists.txt                               |  2 +
 ...PackConfig-splitted-components-depend1.cmake.in | 20 +++++
 ...PackConfig-splitted-components-depend2.cmake.in | 29 +++++++
 ...kVerifyResult-splitted-components-depend1.cmake | 83 ++++++++++++++++++++
 ...kVerifyResult-splitted-components-depend2.cmake | 91 ++++++++++++++++++++++
 6 files changed, 268 insertions(+), 6 deletions(-)
 create mode 100644 
Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend1.cmake.in
 create mode 100644 
Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend2.cmake.in
 create mode 100644 
Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend1.cmake
 create mode 100644 
Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend2.cmake

diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake
index acdb82c..07cd1bc 100644
--- a/Modules/CPackDeb.cmake
+++ b/Modules/CPackDeb.cmake
@@ -48,6 +48,20 @@
 #
 #  May be used to set deb dependencies.
 #
+# .. variable:: CPACK_DEBIAN_<COMP>_PACKAGE_DEPENDS
+#
+#  * Mandatory : NO
+#  * Default   : :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`
+#
+#  Indicates the debian package dependencies for a specific component 'COMP'.
+#  This value has priority over :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`. If
+#  :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` is set, then the discovered
+#  dependencies will be appended to `CPACK_DEBIAN_<COMP>_PACKAGE_DEPENDS` if 
set
+#  (intead of `CPACK_DEBIAN_PACKAGE_DEPENDS`).
+#  The value of `CPACK_DEBIAN_<COMP>_PACKAGE_DEPENDS` can be set to an empty 
string
+#  to enable the automatic discovery of dependencies without inheriting from
+#  the default value of :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`.
+#
 # .. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER
 #
 #  * Mandatory : YES
@@ -343,12 +357,8 @@ function(cpack_deb_prepare_package_vars)
       # Might not be safe if package actual contain file or directory named 
debian
       file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian")
 
-      # Append user depend if set
-      if (CPACK_DEBIAN_PACKAGE_DEPENDS)
-        set (CPACK_DEBIAN_PACKAGE_DEPENDS 
"${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}")
-      else ()
-        set (CPACK_DEBIAN_PACKAGE_DEPENDS 
"${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
-      endif ()
+      # this is too early to populate the CPACK_DEBIAN_PACKAGE_DEPENDS, as the 
way to do it
+      # is "configuration" dependant (component, etc)
 
     else ()
       if(CPACK_DEBIAN_PACKAGE_DEBUG)
@@ -402,6 +412,33 @@ function(cpack_deb_prepare_package_vars)
   # Depends:
   # You should set: DEBIAN_PACKAGE_DEPENDS
   # TODO: automate 'objdump -p | grep NEEDED'
+  
+  # if per-component dependency, overrides the global 
CPACK_DEBIAN_PACKAGE_DEPENDS
+  # automatic dependency discovery will be performed afterwards.
+  if(CPACK_DEB_PACKAGE_COMPONENT)
+    string(TOUPPER ${CPACK_DEB_PACKAGE_COMPONENT} _local_component_name)
+    set(_component_depends_var 
CPACK_DEBIAN_${_local_component_name}_PACKAGE_DEPENDS)
+    
+    # if set, overrides the global dependency
+    if(DEFINED ${_component_depends_var})
+      set(CPACK_DEBIAN_PACKAGE_DEPENDS ${${_component_depends_var}})
+      if(CPACK_DEBIAN_PACKAGE_DEBUG)
+        message("CPackDeb Debug: component '${_local_component_name}' 
dependencies set to '${CPACK_DEBIAN_PACKAGE_DEPENDS}'")
+      endif()
+    endif()
+  endif()
+
+  # at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set 
+  # to the minimal dependency of the package 
+  # Append automatic dependance discovery.
+  if(CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS AND NOT 
CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS STREQUAL "")
+    if (CPACK_DEBIAN_PACKAGE_DEPENDS)
+      set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}, 
${CPACK_DEBIAN_PACKAGE_DEPENDS}")
+    else ()
+      set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
+    endif ()
+  endif()
+
   if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
     message(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will 
have no dependencies.")
   endif()
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 35683b5..21edaf2 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1012,6 +1012,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P 
${CMake_SOURCE_DIR}/Utilities/Release
                                        "splitted-components-description1"
                                        "splitted-components-description2"
                                        "splitted-components-shlibdeps1"
+                                       "splitted-components-depend1"
+                                       "splitted-components-depend2"
                                        )
         set(CPackGen DEB)
         set(CPackRun_CPackGen "-DCPackGen=${CPackGen}")
diff --git 
a/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend1.cmake.in
 
b/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend1.cmake.in
new file mode 100644
index 0000000..d207bcc
--- /dev/null
+++ 
b/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend1.cmake.in
@@ -0,0 +1,20 @@
+#
+# Activate component packaging
+#
+
+if(CPACK_GENERATOR MATCHES "DEB")
+   set(CPACK_DEB_COMPONENT_INSTALL "ON")
+endif()
+
+#
+# Choose grouping way
+#
+#set(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE)
+#set(CPACK_COMPONENTS_GROUPING)
+set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
+#set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
+
+# setting dependencies
+set(CPACK_DEBIAN_PACKAGE_DEPENDS                "depend-default")
+set(CPACK_DEBIAN_APPLICATIONS_PACKAGE_DEPENDS   "depend-application")
+set(CPACK_DEBIAN_HEADERS_PACKAGE_DEPENDS        "depend-headers")
diff --git 
a/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend2.cmake.in
 
b/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend2.cmake.in
new file mode 100644
index 0000000..803720a
--- /dev/null
+++ 
b/Tests/CPackComponentsDEB/MyLibCPackConfig-splitted-components-depend2.cmake.in
@@ -0,0 +1,29 @@
+#
+# Activate component packaging
+#
+
+if(CPACK_GENERATOR MATCHES "DEB")
+   set(CPACK_DEB_COMPONENT_INSTALL "ON")
+endif()
+
+#
+# Choose grouping way
+#
+#set(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE)
+#set(CPACK_COMPONENTS_GROUPING)
+set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
+#set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
+
+# setting dependencies
+set(CPACK_DEBIAN_PACKAGE_DEPENDS                "depend-default")
+set(CPACK_DEBIAN_HEADERS_PACKAGE_DEPENDS        "depend-headers")
+
+# this time we set shlibdeps to on
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+set(CPACK_DEBIAN_HEADERS_PACKAGE_SHLIBDEPS OFF)
+set(CPACK_DEBIAN_LIBRARIES_PACKAGE_SHLIBDEPS OFF)
+
+# we also set the dependencies of APPLICATION component to empty, and let
+# shlibdeps do the job for this component. Otherwise the default will
+# override
+set(CPACK_DEBIAN_APPLICATIONS_PACKAGE_DEPENDS        "")
diff --git 
a/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend1.cmake
 
b/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend1.cmake
new file mode 100644
index 0000000..1b37376
--- /dev/null
+++ 
b/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend1.cmake
@@ -0,0 +1,83 @@
+if(NOT CPackComponentsDEB_SOURCE_DIR)
+  message(FATAL_ERROR "CPackComponentsDEB_SOURCE_DIR not set")
+endif()
+
+include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
+
+
+
+# requirements
+
+# debian now produces lower case names
+set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
+set(expected_count 3)
+
+
+set(actual_output)
+run_cpack(actual_output
+          CPack_output
+          CPack_error
+          EXPECTED_FILE_MASK "${expected_file_mask}"
+          CONFIG_ARGS ${config_args}
+          CONFIG_VERBOSE ${config_verbose})
+
+message(STATUS "expected_count='${expected_count}'")
+message(STATUS "expected_file_mask='${expected_file_mask}'")
+message(STATUS "actual_output_files='${actual_output}'")
+
+if(NOT actual_output)
+  message(FATAL_ERROR "error: expected_files do not exist: CPackComponentsDEB 
test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error}")
+endif()
+
+list(LENGTH actual_output actual_count)
+message(STATUS "actual_count='${actual_count}'")
+if(NOT actual_count EQUAL expected_count)
+  message(FATAL_ERROR "error: expected_count=${expected_count} does not match 
actual_count=${actual_count}: CPackComponents test fails. 
(CPack_output=${CPack_output}, CPack_error=${CPack_error})")
+endif()
+
+
+# dpkg-deb checks for the summary of the packages
+set(dpkgdeb_output_errors_all)
+foreach(_f IN LISTS actual_output)
+
+  # extracts the metadata from the package
+  run_dpkgdeb(dpkg_output
+              FILENAME ${_f}
+              )
+
+  dpkgdeb_return_specific_metaentry(dpkg_package_name
+                                    DPKGDEB_OUTPUT "${dpkg_output}"
+                                    METAENTRY "Package:")
+
+  dpkgdeb_return_specific_metaentry(dpkg_depends
+                                    DPKGDEB_OUTPUT "${dpkg_output}"
+                                    METAENTRY "Depends:")
+
+  message(STATUS "package='${dpkg_package_name}', 
dependencies='${dpkg_depends}'")
+
+  if(${dpkg_package_name} STREQUAL "mylib-applications")
+    if(NOT ${dpkg_depends} STREQUAL "depend-application")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-application'\n")
+    endif()
+  elseif(${dpkg_package_name} STREQUAL "mylib-headers")
+    if(NOT ${dpkg_depends} STREQUAL "depend-headers")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-headers'\n")
+    endif()
+  elseif(${dpkg_package_name} STREQUAL "mylib-libraries")
+    if(NOT ${dpkg_depends} STREQUAL "depend-default")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-default'\n")
+    endif()
+  else()
+    set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                  "dpkg-deb: ${_f}: component name not found: 
${dpkg_package_name}\n")
+  endif()
+
+endforeach()
+
+
+if(NOT "${dpkgdeb_output_errors_all}" STREQUAL "")
+  message(FATAL_ERROR "dpkg-deb checks failed:\n${dpkgdeb_output_errors_all}")
+endif()
diff --git 
a/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend2.cmake
 
b/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend2.cmake
new file mode 100644
index 0000000..2b89493
--- /dev/null
+++ 
b/Tests/CPackComponentsDEB/RunCPackVerifyResult-splitted-components-depend2.cmake
@@ -0,0 +1,91 @@
+if(NOT CPackComponentsDEB_SOURCE_DIR)
+  message(FATAL_ERROR "CPackComponentsDEB_SOURCE_DIR not set")
+endif()
+
+include(${CPackComponentsDEB_SOURCE_DIR}/RunCPackVerifyResult.cmake)
+
+
+
+# requirements
+
+# debian now produces lower case names
+set(expected_file_mask "${CPackComponentsDEB_BINARY_DIR}/MyLib-*.deb")
+set(expected_count 3)
+
+set(config_verbose -V)
+set(actual_output)
+run_cpack(actual_output
+          CPack_output
+          CPack_error
+          EXPECTED_FILE_MASK "${expected_file_mask}"
+          CONFIG_ARGS ${config_args}
+          CONFIG_VERBOSE ${config_verbose})
+
+message(STATUS "expected_count='${expected_count}'")
+message(STATUS "expected_file_mask='${expected_file_mask}'")
+message(STATUS "actual_output_files='${actual_output}'")
+
+if(NOT actual_output)
+  message(FATAL_ERROR "error: expected_files do not exist: CPackComponentsDEB 
test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error}")
+endif()
+
+list(LENGTH actual_output actual_count)
+message(STATUS "actual_count='${actual_count}'")
+if(NOT actual_count EQUAL expected_count)
+  message(FATAL_ERROR "error: expected_count=${expected_count} does not match 
actual_count=${actual_count}: CPackComponents test fails. 
(CPack_output=${CPack_output}, CPack_error=${CPack_error})")
+endif()
+
+
+# dpkg-deb checks for the summary of the packages
+set(dpkgdeb_output_errors_all)
+foreach(_f IN LISTS actual_output)
+
+  # extracts the metadata from the package
+  run_dpkgdeb(dpkg_output
+              FILENAME ${_f}
+              )
+
+  dpkgdeb_return_specific_metaentry(dpkg_package_name
+                                    DPKGDEB_OUTPUT "${dpkg_output}"
+                                    METAENTRY "Package:")
+
+  dpkgdeb_return_specific_metaentry(dpkg_depends
+                                    DPKGDEB_OUTPUT "${dpkg_output}"
+                                    METAENTRY "Depends:")
+
+  message(STATUS "package='${dpkg_package_name}', 
dependencies='${dpkg_depends}'")
+
+  if(${dpkg_package_name} STREQUAL "mylib-applications")
+    string(FIND ${dpkg_depends} "lib" index_libwhatever)
+    if(NOT index_libwhatever GREATER "-1")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' does not contain any 
'lib'\n")
+    endif()
+
+    # should not contain the default
+    string(FIND ${dpkg_depends} "depend-default" index_default)
+    if(index_default GREATER "0")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' does contains 
'depend-default'\n")
+    endif()
+  elseif(${dpkg_package_name} STREQUAL "mylib-headers")
+    if(NOT ${dpkg_depends} STREQUAL "depend-headers")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-headers'\n")
+    endif()
+  elseif(${dpkg_package_name} STREQUAL "mylib-libraries")
+    if(NOT ${dpkg_depends} STREQUAL "depend-default")
+      set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                    "dpkg-deb: ${_f}: Incorrect dependencies 
for package ${dpkg_package_name}: '${dpkg_depends}' != 'depend-default'\n")
+    endif()
+  else()
+    set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
+                                  "dpkg-deb: ${_f}: component name not found: 
${dpkg_package_name}\n")
+  endif()
+
+endforeach()
+
+
+if(NOT "${dpkgdeb_output_errors_all}" STREQUAL "")
+  message(FATAL_ERROR "dpkg-deb checks failed:\n${dpkgdeb_output_errors_all}")
+endif()
-- 
2.0.1

-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Reply via email to