はじめに
下記ではdevtoolについて解説してきた。
devtoolでは以下のことができる。
- レシピの新規作成
- レシピの編集
- レシピのアップグレード
今回はレシピの編集に注目してみる。
環境構築
作業用レイヤ
作業用レイヤとしてmeta-modify
を作成する。
$ bitbake-layers create-layer ../poky/meta-modify $ bitbake-layers add-layer ../poky/meta-modify
サンプルレシピ
YoctoProject devtoolを使ってみる(add編)で作成したhello-autotoolsのレシピであるhello_0.0.1.bb
使用する。
devtoolによるレシピの編集
ワークスペースへの登録
$ devtool modify hello
ワークスペースを確認する。
workspace ├── README ├── appends │ └── hello_0.0.1.bbappend ├── conf │ └── layer.conf └── sources └── hello ├── LICENSE ├── Makefile.am ├── README.md ├── configure.ac └── src ├── Makefile.am ├── hello.cpp ├── hello.h └── main.cpp
ちなみにdevtool modify
の場合はYoctoProject devtool addでローカルのソースをレシピ化することを考えるで扱ったhelloworld
の様にローカルのソースを持ったレシピでもワークスペースのsourcesディレクトリにソースを展開してくれる。
initial-revの確認
hello_0.0.1.bbappend
でinitial-revを確認する。
$ grep 'initial_rev' workspace/appends/hello_0.0.1.bbappend # initial_rev: 36ef62fd0cd05f72f589a296e39044d71371a46b
このリビジョンが修正差分の基点となる。
ソースを修正する
ソースを修正してみる。 もともと大した処理はしていないのでループにしてみる。
diff --git a/src/main.cpp b/src/main.cpp index ae9fcb0..3ae5264 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,11 @@ #include "hello.h" +#include <iostream> int main() { - Hello("world").say(); + Hello hello("world"); + for (int i = 0; i < 10; ++i) { + std::cout << "i = " << i << " : "; + hello.say(); + } return 0; }
コミットする。
$ git commit -m "Modify to loop"
ついでにREADME.mdも修正してみる。
diff --git a/README.md b/README.md index 9a047d9..fe1b69e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # hello-autotools This repository contains a sample project using the Autotools. + +The sample program says "hello" to the world.
こちらもコミットする。
$ git commit -m "Update README"
コミット履歴を見る。
$ git log --oneline 5344599 (HEAD -> devtool) Update README 0bc1094 Modify to loop 36ef62f (tag: devtool-patched, tag: devtool-base, origin/main, origin/HEAD, main) Add the program 5b8d63b Initial commit
2つコミットが積まれている。
meta-modifyに修正内容を登録
devtool finish
を行いmeta-modifyにレシピの修正差分を登録する。
$ devtool finish -r hello ../poky/meta-modify
meta-modifyの内容を確認する。
../poky/meta-modify/ ├── COPYING.MIT ├── README ├── conf │ └── layer.conf ├── recipes-app │ └── hello │ ├── hello │ │ ├── 0001-Modify-to-loop.patch │ │ └── 0002-Update-README.patch │ └── hello_%.bbappend ├── recipes-example │ └── example │ └── example_0.1.bb └── recipes-recipetool
bbappendが作成されinitial-rev以降の2つのコミットがパッチとしてレシピに登録されている。
このパッチはgit format-patch
によって生成されている。
この時点のworkspaceを確認する。
workspace/ ├── README ├── appends ├── conf │ └── layer.conf └── sources
初期状態に戻っている。
まとめ
devtool modify
は文句なく便利。