rpm / deb 的 cpap 中是否有与 %global __requires_exclude_from 类似的功能?
Is there a similiar function to %global __requires_exclude_from in cpack for rpm / deb?
我们从常规规范文件(用于 rpm)过渡到 cpack,并将 .deb 包添加到我们的构建中。
除了 __requires_exclude_from
之外,我能够复制 rpm 规范文件中的所有内容。
我们有一个需要可选库的文件。 (包含的二进制文件是可选的,仅在用户需要时调用)但是生成的 rpm / deb 包仍然需要依赖项。
在 RPM 规范中,我们从依赖扫描中完全排除了这个特定的二进制文件,效果很好,但我无法在 RPM 和 DEB 生成器的 cpack 中重现它。
我能想到的唯一方法是创建/使用我自己的规范文件作为模板,但我不确定我是否想这样做,因为这似乎违背了 cpack 的全部目的...
有谁知道是否可以从依赖扫描中排除单个文件?
查看 CPackRPM.cmake 文件,似乎此功能在 CPack 中尚不可用。
我做了一个简短的 diff(未经测试),应该可以帮助您解决眼前的问题。
--- C:\Program Files\CMake\share\cmake-3.15\Modules\Internal\CPack\CPackRPM - Kopie.cmake 2019-09-04 09:59:20.000000000 +0200
+++ C:\Program Files\CMake\share\cmake-3.15\Modules\Internal\CPack\CPackRPM.cmake 2020-07-17 11:57:19.000000000 +0200
@@ -1094,12 +1094,22 @@
if(CPACK_RPM_PACKAGE_DEBUG)
message("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}")
endif()
set(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}")
endif()
+ # CPACK_RPM_REQUIRES_EXCLUDE_FROM
+ # May be defined to keep the dependency generator from
+ # scanning specific files or directories for deps.
+ if(CPACK_RPM_REQUIRES_EXCLUDE_FROM)
+ if(CPACK_RPM_PACKAGE_DEBUG)
+ message("CPackRPM:Debug: User defined CPACK_RPM_REQUIRES_EXCLUDE_FROM = ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+ endif()
+ set(TMP_RPM_REQUIRES_EXCLUDE_FROM "%global __requires_exclude_from ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+ endif()
+
# CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE)
# CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE)
# May be used to embed a post (un)installation script in the spec file.
# The referred script file(s) will be read and directly
# put after the %post or %postun section
# ----------------------------------------------------------------
@@ -1574,12 +1584,13 @@
%define _rpmdir %_topdir/RPMS
%define _srcrpmdir %_topdir/SRPMS
\@FILE_NAME_DEFINE\@
%define _unpackaged_files_terminate_build 0
\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
\@CPACK_RPM_SPEC_MORE_DEFINE\@
\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
%description
\@CPACK_RPM_PACKAGE_DESCRIPTION\@
@@ -1696,12 +1707,13 @@
%define _rpmdir %_topdir/RPMS
%define _srcrpmdir %_topdir/SRPMS
\@FILE_NAME_DEFINE\@
%define _unpackaged_files_terminate_build 0
\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
\@CPACK_RPM_SPEC_MORE_DEFINE\@
\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
%description
\@CPACK_RPM_PACKAGE_DESCRIPTION\@
希望对您有所帮助并满足您的需求。
我们从常规规范文件(用于 rpm)过渡到 cpack,并将 .deb 包添加到我们的构建中。
除了 __requires_exclude_from
之外,我能够复制 rpm 规范文件中的所有内容。
我们有一个需要可选库的文件。 (包含的二进制文件是可选的,仅在用户需要时调用)但是生成的 rpm / deb 包仍然需要依赖项。
在 RPM 规范中,我们从依赖扫描中完全排除了这个特定的二进制文件,效果很好,但我无法在 RPM 和 DEB 生成器的 cpack 中重现它。
我能想到的唯一方法是创建/使用我自己的规范文件作为模板,但我不确定我是否想这样做,因为这似乎违背了 cpack 的全部目的...
有谁知道是否可以从依赖扫描中排除单个文件?
查看 CPackRPM.cmake 文件,似乎此功能在 CPack 中尚不可用。
我做了一个简短的 diff(未经测试),应该可以帮助您解决眼前的问题。
--- C:\Program Files\CMake\share\cmake-3.15\Modules\Internal\CPack\CPackRPM - Kopie.cmake 2019-09-04 09:59:20.000000000 +0200
+++ C:\Program Files\CMake\share\cmake-3.15\Modules\Internal\CPack\CPackRPM.cmake 2020-07-17 11:57:19.000000000 +0200
@@ -1094,12 +1094,22 @@
if(CPACK_RPM_PACKAGE_DEBUG)
message("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}")
endif()
set(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}")
endif()
+ # CPACK_RPM_REQUIRES_EXCLUDE_FROM
+ # May be defined to keep the dependency generator from
+ # scanning specific files or directories for deps.
+ if(CPACK_RPM_REQUIRES_EXCLUDE_FROM)
+ if(CPACK_RPM_PACKAGE_DEBUG)
+ message("CPackRPM:Debug: User defined CPACK_RPM_REQUIRES_EXCLUDE_FROM = ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+ endif()
+ set(TMP_RPM_REQUIRES_EXCLUDE_FROM "%global __requires_exclude_from ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+ endif()
+
# CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE)
# CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE)
# May be used to embed a post (un)installation script in the spec file.
# The referred script file(s) will be read and directly
# put after the %post or %postun section
# ----------------------------------------------------------------
@@ -1574,12 +1584,13 @@
%define _rpmdir %_topdir/RPMS
%define _srcrpmdir %_topdir/SRPMS
\@FILE_NAME_DEFINE\@
%define _unpackaged_files_terminate_build 0
\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
\@CPACK_RPM_SPEC_MORE_DEFINE\@
\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
%description
\@CPACK_RPM_PACKAGE_DESCRIPTION\@
@@ -1696,12 +1707,13 @@
%define _rpmdir %_topdir/RPMS
%define _srcrpmdir %_topdir/SRPMS
\@FILE_NAME_DEFINE\@
%define _unpackaged_files_terminate_build 0
\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
\@CPACK_RPM_SPEC_MORE_DEFINE\@
\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
%description
\@CPACK_RPM_PACKAGE_DESCRIPTION\@
希望对您有所帮助并满足您的需求。