2016-11-21 127 views
1

我有一個非常簡單的安排 - 一個源碼包,一個補丁:爲什麼%autosetup在提取源之前執行修補?

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

然而,當我試圖在%prep步驟使用%autosetuprpmbuild嘗試修補第一 - 提取之前:

/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 
} 

是否我真的發現了一個錯誤,還是我做一些荒唐了?

+1

[此Fedora頁面](https://fedoraproject.org/wiki/Autosetup_packaging_draft)說它是在4.11中添加的 - 我想知道4.8是否有bug /初步版本。我從來沒有用過它,對不起。 –

回答

1

我在CentOS 6.7上觀察到同樣的問題。

如上所述,RPM 4.8假定不支持%autosetup; http://rpm.org/user_doc/autosetup.html也確認從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) 

顯然是實現似乎被打破,但是。

The EPEL packaging guidelines說:「將自動設置%宏在所有版本的EPEL(通過EPEL-RPM-宏爲EPEL5和EPEL6 )可用」(重點煤礦),所以我嘗試安裝該程序包。安裝epel-rpm-macros-6-16.noarchinstructions for adding the EPEL YUM repository if you haven't already done this)後,/etc/rpm/macros.zzz-epel-autosetup包含%apply_patch(由%autopatch使用,由%autosetup使用)的不同定義。這解決了問題 - 補丁現在在提取源代碼後應用。

相關問題