So-net無料ブログ作成
検索選択

amalgamationの様子をみる~その6 [SQLite]

前回に続いて、「./tool/mksqlite3h.tcl」を見て行きます。処理のコメントを追って行くと次の様な手順となっている様です。

  1. コマンドラインからソースツリーのルートディレクトリを取得
  2. 「VERSION」ファイルからSQLiteのバージョン番号(3.6.18とか)を取得
    →フォーマットは「%d%03d%03d」となっています。「3.6.18」だと「3006018」になるのか?
  3. 「manifest.uuid」からSCMのバージョン番号を取得
  4. 「manifest」の「D」カードからSCMへのチェックイン日を取得
  5. API宣言解釈のためのパターンを作成(内部処理用?)
  6. 標準出力の行末を「LF」に設定(Windowsでも同様)
  7. 「src/sqlite.h.in」と「ext/rtree/sqlite3rtree.h」を処理
  8. 「sqlite3rtree.h」を「sqlite3.h」にコピーする際に「#include <sqlite3.h>」の行を省く


上記に加えて、数行の記述を加えている様ですね。この辺は、最終的な形をどうするかで決まってくる気もします。


次回は、また、「./tool/mksqlite3c.tcl」に戻ります





ショップチャンネル:キャンペーン


amalgamationの様子をみる~その5 [SQLite]

前回の続きを見て行きます。ま、細かい内容はともかく流れを見て行きたいと思います。

まずは「sqlite3.h」を読み込むところから始まる様子。

・・・「sqlite3.h」は「./tool/mksqlite3h.tcl」で自動生成されてますね。こちら、スルーしてましたねぇ・・・。

スクリプトをちょっと見てみたところ、短いのでこの内容から見て行きますか。次のソースから「sqlite3.h」を生成するとのこと。

  1. 「src/sqlite.h」 ←テンプレートになるとのこと
  2. VERSION」 ←SQLiteのバージョンナンバーが入っているとのこと
  3. 昔のSCMの「manifest」ファイル ←日付を利用(?)
  4. 昔のSCMの「manifest.uuid」ファイル ←「SHA1」ハッシュを得るとのこと


2) の「VERSION」を見たところ、内容は「3.7.12」の一行のみ。末尾に改行(LF?)が入っています。

3) 4) は意味がわからないんですが、4) の方は見てみたら、ハッシュコードっぽいのが入ってました。

これをソースツリーのルートディレクトリで実行せよとのこと。ちなみに、これはtclのスクリプトです。このスクリプトは「src/sqlite.h.in」に基づいて実行されるらしいですが、このファイルとスクリプトの関係はいまのところよくわかりません・・・。その処理は下記を含む様です。

  1. グローバル変数の定義の前に「SQLITE_EXTERN」を付加する
  2. API関数の定義の前に「SQLITE_API」を付加する
  3. 「--VERS--」と言う文字列を現在のライブラリのバージョン(例えば「3.6.17」と言う書式の文字列)に置き換える
  4. 「--VERSION-NUMBER--」と言う文字列を現在のライブラリのバージョン(例えば「3006017」と言う書式の文字列)
  5. 「--SOURCE-ID--」と言う文字列を日付、時刻とハッシュ文字列(SHA1)に置き換える


このスクリプトの出力は標準出力に出力されるとのこと。

次回、一応処理を見て行きましょう。





amalgamationの様子をみる~その4 [SQLite]

前回で、「target_source」のルールについてざ~っとみたので、次は、やっと大元の「sqlite3.c」のルールまで戻ります。

sqlite3.c: target_source $(TOP)/tool/mksqlite3c.tcl
        tclsh $(TOP)/tool/mksqlite3c.tcl
        echo '#ifndef USE_SYSTEM_SQLITE' >tclsqlite3.c
        cat sqlite3.c >>tclsqlite3.c
        echo '#endif /* USE_SYSTEM_SQLITE */' >>tclsqlite3.c
        cat $(TOP)/src/tclsqlite.c >>tclsqlite3.c


まずは「./tool/mksqlite3c.tcl」を見て行きます。冒頭のコメントから・・・。

*

「target_source」の生成等、これまで実行されていた内容が書かれていますが、「parse.c」「parse.h」が「parse.y」からlemonと言う構文解析器生成プログラムで作成して「./tsrc」に追加されると書かれています。そんな箇所あったっけ?と思ったところ、その1の記事に該当の箇所がありました。

「keywordhash.h」は「mkkeywordhash」と言うコマンドで作成されるとのこと。「./tool」ディレクトリを見たところ、「mkkeywordhash.c」と言うCソースで提供されています。こちらもその1の記事で「keywordhash.h」の生成ルールの中でコンパイルされて、即利用されていますね。

まあ、そんな感じで「tsrc」ディレクトリが作成されて、ソースがそろったらこのスクリプトを実行せよとのこと。そしたら、「sqlite3.c」を作成するよと言うことです・・。


つづく。

【参考】
Lemon構文解析器生成プログラム



ioPLAZA【アイ・オー・データ直販サイト】



ブログを作る(無料) powered by So-netブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。