我正在開發一個項目,該項目需要我修補第三方開放源代碼庫以供我的應用程序使用。爲了簡單起見,我只使用Makefiles和一個簡單的配置腳本來構建應用程序。我有我需要應用多個補丁,所以因此,我用的Makefile依賴於補丁:檢測是否應用了某個修補程序
all: patch1 patch2 patch3
do-build-stuff-here
patch1:
patch -p0 < patch1.patch && touch patch1
patch2:
patch -p0 < patch2.patch && touch patch2
patch3:
patch -p0 < patch3.patch && touch patch3
我知道被子,這是Debian軟件包管理系統使用的維護者的補丁。我用過它,它確實有效。但是,它引入了一種不必要的依賴性,尤其是對於那些沒有Debian的人。
有時,並非所有補丁都適用於允許我(和其他開發人員)在特定條件下重新測試建築物和應用程序。當我打電話「乾淨」或「distclean命令」,我通常扭轉補丁:
clean: rmpatch1 rmpatch2 rmpatch3
do-clean-stuff-here
rmpatch1:
patch -p0 -R < patch1.patch
rmpatch2:
patch -p0 -R < patch2.patch
rmpatch3:
patch -p0 -R < patch3.patch
(忽略的事實,我可以直接刪除原始出處和重新開始。)
然而,補丁將可能如果未應用修補程序#3並且修補程序#1和#2是失敗,則會失敗。因此,我依靠補丁對應每個rmpatch:
rmpatch1: patch1
patch -p0 -R < patch1.patch
rmpatch2: patch2
patch -p0 -R < patch2.patch
rmpatch3: patch3
patch -p0 -R < patch3.patch
但是這仍然沒有解決我的問題,並「使清潔」結束了第一補丁源,然後再unpatching!
我想我的問題是:有沒有什麼方法可以檢測到補丁是否應用?我知道補丁,當交互式運行時,會告訴你它找到了以前應用的補丁。這種行爲是否可以非交互式複製?
另一個問題(有點相關)是這種修補方法是否有效,如果不是,我可以使用哪種順序修補方法(僅通過Makefiles)。
修補不是應該首先在makefile中做的事情。 –
那麼它會在哪裏完成?而且,即使如此,你如何檢測補丁是否被應用? –
在源文件被提取之後,它應該在構建工具的準備階段完成。沒有辦法確定是否應用了補丁,而不是嘗試將其反轉並查看其中有多少成功。 –