【发布时间】:2020-06-30 04:03:40
【问题描述】:
在openwrt中,众所周知,通常某个包的补丁应该放在package/[pkg]/patches 它将通过 $(Build/Patch) 在 Makefile 中应用。 示例:
-
package/test/0001-1.0.1.8.fix-A.patch
-
package/test/0002-1.0.1.8.fix-B.patch
当包更新到新版本时,补丁有时也需要更新。 示例:
- package/test/0001-1.0.1.9.fix-A.patch
- package/test/0002-1.0.1.9.fix-B.patch
或
- package/test/0001-1.0.2.0.fix-A.patch
- package/test/0002-1.0.2.0.fix-B.patch
对于单个特定的包版本,这很好用。唯一的事情就是手动更新软件包版本和补丁。
由于某种原因,旧补丁无法在升级包时应用并提交到包源。所以它们必须通过补丁来维护。
我正在做的是,如果 Makefile 可以根据包版本自动找到正确的补丁。 我选择根据包的版本将所有这些补丁放在“package/test/file/patches/”目录下,例如:
- package/test/file/patches/1.0.1.8/0001-v1.0.1.8.fix-A.patch
- package/test/file/patches/1.0.1.8/0002-1.0.1.8.fix-B.patch
- package/test/file/patches/1.0.1.9/0001-1.0.1.9.fix-A.patch
- package/test/file/patches/1.0.1.9/0002-1.0.1.9.fix-B.patch
- package/test/file/patches/1.0.2.0/0001-1.0.2.0.fix-A.patch
- package/test/file/patches/1.0.2.0/0002-1.0.2.0.fix-B.patch
在 Makefile 中,应首先将正确的补丁复制到“define Build/Prepare”部分中的“package/test/patches/”目录中,在 $(Build/Patch) 之前。
匹配规则:(这里我不知道怎么插入表格,我放个图片代替...)
这样,所有的补丁都可以存放在“pacakge/test”目录下,构建时会自动匹配并应用。
问题是,我怎样才能找到合适的匹配? 因为比较和匹配版本有点复杂,尤其是在 Makefile 中而不是在 shell 脚本中。
其实我发现了一些有趣的脚本来做这部分,比如:
how-to-compare-two-strings-in-dot-separated-version-format-in-bash
【问题讨论】:
标签: bash makefile package gnu-make openwrt