我正在开发一个项目,该项目需要我修补 3rd 方开源库以在我的应用程序中使用。为了简单起见,我只使用 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”或“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
但这仍然不能解决我的问题,并且“make clean”最终会先修补源代码,然后再次取消修补!
我想我的问题是:有什么方法可以检测是否应用了补丁?我知道补丁在交互式运行时会告诉您它找到了以前应用的补丁。这种行为可以以非交互方式重现吗?
另一个问题(有点相关)是这种修补方法是否有效,如果不是,我可以使用哪种顺序修补方法(仅通过 Makefiles)。