winc1.png

トップ
WIN システムについて
ダウンロード
インストール
オンラインマニュアル
メーリングリスト
開発者のための情報

ライブラリのバージョン管理

GMU Autoconf / Automake / Libtool 」を引用・参考にしています。

バージョン番号

Libtoolライブラリのバージョンは -version-info で指定します。WINシステムについては、src/Makefile.am の冒頭中で指定しており、オンラインで使うものとオフラインで使うものと二つあります。

各番号は、

current : revision : age

となっており、左から次のような意味を持ちます。

current
このライブラリがエクスポートしている現在のインターフェース番号。current番号が0の時は、このライブラリでエクスポートしているインターフェースを「インターフェース0」と呼んでいることを意味します。
revision
このライブラリでエクスポートしている最新のインターフェースの実装番号。revision番号が0の時は、そのインターフェースの最初の実装であることを意味します。このライブラリの次のリリースで同じインターフェースをエクスポートしていて、実装が異なる場合(バグを修正したときなど)、revision番号は増やされますが、current番号は変更されません。この場合、実行時ローダは選択可能なら必ずrevision番号が最も大きなライブラリを使います。
age
このライブラリで先行インターフェースをいくつまで遡ってサポートするかを表す数。例えば、age が2の場合は、現在のインターフェースcurrent(または、それに先行する2つのインターフェースのいずれか)をエクスポートしたライブラリを使ってビルドされた実行可能コードとこのライブラリをリンクする事が出来ます。定義上、age は current 以下でなければなりません。最初は実装されたインターフェースが1つしか存在しないので、age は必ず0になります。

変更によるバージョンの設定方法

  1. ライブラリのソースを変更した場合(バグフィックスなど)、revision 番号をインクリメント(1つ加算)しなければいけません。これは現在のインターフェースの新しいリビジョンになります。
  2. インターフェースが変更された場合(関数の引数が変更になった場合など)は、current番号をインクリメントし、revision番号を0にリセットしなければいけません。これは新しいインターフェースの最初のリビジョンになります。
  3. 新しいインターフェースが前のインターフェースのスーパーセットの場合(つまり、この新しいリリースの変更では前のインターフェースが壊れていないとき)は、age番号をインクリメントしなければいけません。このリリースは前のリリースの後方互換になります。
  4. 新しいインターフェースから前のインターフェースの要素が削除された場合は、後方互換性が断たれるため、age を0にリセットしなければいけません。このリリースは新しい、後方互換でないインターフェースを持つ事になります。

あるライブラリを -version-info 0:0:0 でリリースした後、下記のような変更を行った時にどうするのか、例を挙げて説明します。

  • このライブラリの次のリリースに既存のソケットプロトコルの新しいコマンドが含まれている場合、-version-info 1:0:1 を使います。これは新しいインターフェースの最初のリビジョンで、このリリースは前のリリースと後方互換になります。
  • その後、このライブラリの中心となるアルゴリズムを高速化して実装した場合、-version-info 1:1:1 でリリースします。これは現在のインターフェースの新しいリビジョンになります。
  • しかし、その後、新しい実装の高速性を活かすためには低レベルの構造にアクセスするようAPIを変更するしか方法が無い事がわかりました。これは前のインターフェースとの互換性を断つので、-version-info 2:0:0 リリースします。このリリースは、新しい、後方互換でないインターフェースを持つ事になります。
Last-modified: 2020-06-23 (火) 17:23:52