はじめに
複数のソースコードファイルを修正してまとめてパッチを作りたい時ってありませんか.
自分は,あったのでメモ程度に
コマンド
オリジナルのソースコードがあるディレクトリ(generic_src_dir)と修正したソースコードがあるディレクトリ(custom_src_dir)を用意し以下のコマンドを実行.
例として拡張子が"[csSh]"の場合
$ find generic_src_dir -name "*.[csSh]" -printf "%P %f\n" | awk '{print "diff -up generic_src_dir/" $1 " custom_src_dir/" $1 " > " $2 ".patch && if [ -s " $2 ".patch ]; then :; else rm -f " $2 ".patch ; fi" }' | sh
# 使用例
linuxのソースコードで,
① kernel/fork.c
② arch/x86/kernel/head64.S
③ include/thread_info.h
の3つのソースコードを修正した場合
$ ls
custom_linux_src generic_linux_src
$ find generic_linux_src -name "*.[csSh]" -printf "%P %f\n" | awk '{print "diff -up generic_linux_src/" $1 " custom_linux_src/" $1 " > " $2 ".patch && if [ -s " $2 ".patch ]; then :; else rm -f " $2 ".patch ; fi" }' | sh
$ ls
custom_linux_src fork.c.patch generic_linux_src head_64.S.patch thread_info.h.patch
以下のパッチが生成されていることがわかります.
① fork.c.patch
② head_64.S.patch
③ thread_info.h.patch