2012-08-30 98 views
1

我正在開發一個項目,該項目需要我修補第三方開放源代碼庫以供我的應用程序使用。爲了簡單起見,我只使用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)。

+0

修補不是應該首先在makefile中做的事情。 –

+1

那麼它會在哪裏完成?而且,即使如此,你如何檢測補丁是否被應用? –

+0

在源文件被提取之後,它應該在構建工具的準備階段完成。沒有辦法確定是否應用了補丁,而不是嘗試將其反轉並查看其中有多少成功。 –

回答

0

你可以像這樣的東西騙的Makefile:

all: patch1 patch2 patch3 
    do-build-stuff-here 
patch1: 
    patch -p0 < patch1.patch && touch patch1 
    touch [email protected] 
patch2: 
    patch -p0 < patch2.patch && touch patch2 
    touch [email protected] 
patch3: 
    patch -p0 < patch3.patch && touch patch3 
    touch [email protected] 

這樣一旦應用補丁的每個規則文件將被創建。您可以測試其在規則中的存在以取消應用該補丁程序,或者使用它來決定是否需要重新應用該補丁程序。

相關問題