检测是否应用了修补程序

时间:2012-08-30 03:57:58

标签: linux makefile patch

我正在开发一个项目,要求我修补第三方开源库,以便在我的应用程序中使用。为简单起见,我只使用Makefile和一个简单的配置脚本来构建应用程序。我有多个需要应用的补丁,因此我使用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

我了解Quilt,这是Debian打包系统用于维护者补丁的。我用过它,它确实有用。但是,它引入了不必要的依赖,特别是对那些没有Debian的人。

有时,并非所有补丁都适用于允许我(和其他开发人员)在某些条件下重新测试建筑物和应用程序。当我称之为“干净”或“干净”时,我通常会反转补丁:

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

但这仍然无法解决我的问题,“make clean”最终会先修补源代码,然后再打开补丁!

我想我的问题是:我有什么方法可以检测是否应用了补丁?我知道补丁,当以交互方式运行时,会告诉你它找到了以前应用的补丁。这种行为可以非交互式再现吗?

另一个问题(有些相关)是这种修补方法是否有效,如果没有,我可以使用哪种顺序修补方法(仅通过Makefile)。

1 个答案:

答案 0 :(得分:0)

你可以用这样的东西欺骗Makefile:

all: patch1 patch2 patch3
    do-build-stuff-here
patch1:
    patch -p0 < patch1.patch && touch patch1
    touch $@
patch2:
    patch -p0 < patch2.patch && touch patch2
    touch $@
patch3:
    patch -p0 < patch3.patch && touch patch3
    touch $@

这样,一旦应用补丁,将创建每个规则的文件。您可以测试其在规则中的存在以取消应用补丁,或者使用它来决定是否需要重新应用补丁。