为什么 %autosetup 在提取源代码之前执行修补?

问题描述 投票:0回答:1

我有一个非常简单的安排——一个源代码包,一个补丁:

Source: http://...../foo-%{version}.tar.gz
Patch: my-patch-for-foo.diff
...
%prep
%autosetup -v -n bar-%{version}

但是,当我尝试在

%autosetup
步骤中使用
%prep
时,
rpmbuild
会尝试修补 first - 在提取之前:

/bin/cat ..../SOURCES/my-patch-for-foo.diff | 
/usr/bin/patch  
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.8PV0PY
+ umask 022
+ cd /....
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /....
+ rm -rf bar-0.12.18
+ /bin/tar -xvvf -
+ /usr/bin/gzip -dc ..../SOURCES/foo-0.12.18.tgz

由于某种原因,

patch
没有报告错误——但提取的代码最终未修补,并且我的构建稍后失败。

使用普通的

%setup
然后使用
%patch0
效果很好,但是
%autosetup
有什么问题吗?

我使用的是 CentOS-6.8,如果重要的话,其中 RPM 的版本为 4.8.0。谢谢!

更新,将

%autosetup
拆分为
%setup
%autopatch
也不起作用——
%autopatch
没有做任何有用的事情。因为我的补丁都是默认格式,所以我将使用我的重新实现
%autopatch
:

%prep
%setup -n bar-%{version}
%{lua:
    for i, p in ipairs(patches) do
        print("%patch"..i)
    end
}

我真的发现了一个错误,还是我做了一些奇怪的错误?

linux rpmbuild rpm-spec
1个回答
4
投票

我在 CentOS 6.7 上观察到同样的问题。

如上所述,RPM 4.8 据说不支持

%autosetup
autosetup 文档 还确认从 4.11 开始支持它。

但是,我发现

/usr/lib/rpm/macros
(从
rpm-4.8.0-55.el6.x86_64
安装)实际上包含
%autosetup
宏的定义,并且
rpm -q --changelog rpm
显示它“最近”被反向移植:

* Mon Feb 08 2016 Lubos Kardos <[email protected]> - 4.8.0-52
- Add %autosetup macros (#1265021)

但显然,实施似乎被破坏了。

EPEL 打包指南 表示“%autosetup 宏在所有 EPEL 版本中都可用(对于 EPEL5 和 EPEL6,通过 epel-rpm-macros)”(强调我的),所以我尝试安装该软件包。安装

epel-rpm-macros-6-16.noarch
添加 EPEL YUM 存储库的说明,如果您还没有这样做),
/etc/rpm/macros.zzz-epel-autosetup
包含不同的
%apply_patch
定义(由
%autopatch
使用,由
 使用) %autosetup
)。这解决了问题 - 现在在提取源代码后应用补丁。

© www.soinside.com 2019 - 2024. All rights reserved.