Просмотр исходного кода

CPack/DEB: deal with broken dpkg-shlibdeps on E2K architecture

"OS Elbrus" (OSL for short), a reference Linux distro for E2K (Elbrus)
platform may have broken dpkg-shlibdeps, that doesn't specify
dependencies correctly. In this case, the only reliable way is to
explicitly set dependencies of libc6 and lcc-libs, and then warn user
to let him know this list may be incomplete. This commit does that.
This fix has no effect on correctly working dpkg-shlibdeps, so when
this bug will be fixed in new versions of OSL, CPack will work as
expected with these distros.
makise-homura 4 лет назад
Родитель
Сommit
2b9ef77944

+ 8 - 0
Modules/Internal/CPack/CPackDeb.cmake

@@ -332,6 +332,14 @@ function(cpack_deb_prepare_package_vars)
           RESULT_VARIABLE SHLIBDEPS_RESULT
           ERROR_VARIABLE SHLIBDEPS_ERROR
           OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+        # E2K OSL 6.0.1 and prior has broken dpkg-shlibdeps. CPack will deal with that (mocking SHLIBDEPS_OUTPUT), but inform user of this.
+        if("${SHLIBDEPS_ERROR}" MATCHES "unknown gcc system type e2k.*, falling back to default")
+          message(WARNING "CPackDeb: broken dpkg-shlibdeps on E2K detected, will fall back to minimal dependencies.\n"
+                  "You should expect that dependencies list in the package will be incomplete.")
+          set(SHLIBDEPS_OUTPUT "shlibs:Depends=libc6, lcc-libs")
+        endif()
+
         if(CPACK_DEBIAN_PACKAGE_DEBUG)
           # dpkg-shlibdeps will throw some warnings if some input files are not binary
           message( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}")

+ 2 - 1
Tests/RunCMake/CPack/tests/DEPENDENCIES/DEB-stderr.txt

@@ -1 +1,2 @@
-^CPackDeb: ((- Generating dependency list)|(Using only user-provided dependencies because dpkg-shlibdeps is not found\.))$
+^CPackDeb: ((- Generating dependency list)(
+CMake Warning.*broken dpkg-shlibdeps on E2K detected.*\(cpack_deb_prepare_package_vars\))?|(Using only user-provided dependencies because dpkg-shlibdeps is not found\.))$