差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
index:internal-notice:how-to-update [2014/10/07 08:53] – [配布パッケージ] rpp | tips:how-to-update [2023/03/29 06:16] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 2: | 行 2: | ||
===== プロジェクトのバージョン管理形式 | ===== プロジェクトのバージョン管理形式 | ||
- | バージョン番号は、\\ | + | バージョン番号は、 |
- | | + | |
- | で管理する。\\ | + | で管理する。 |
- | ** メジャーバージョン | + | === メジャーバージョン |
プログラムの根幹にかかわるような大きな変更 | プログラムの根幹にかかわるような大きな変更 | ||
- | ** マイナーバージョン**\\ | + | === マイナーバージョン |
- | それなりに大きな変更。\\ | + | それなりに大きな変更。 |
- | (外部から見える)新しい関数の追加など。\\ | + | |
- | プログラマが大きな変更だと思えば自由に増加させて良い。\\ | + | (外部から見える)新しい関数の追加など。 |
- | ここが増えるとやる気が上がるらしい。\\ | + | |
+ | プログラマが大きな変更だと思えば自由に増加させて良い。 | ||
+ | |||
+ | ここが増えるとやる気が上がるらしい。 | ||
メジャーバージョンが上がると0にリセットされる。 | メジャーバージョンが上がると0にリセットされる。 | ||
- | ** リビジョン番号 | + | === リビジョン番号 |
- | バグフィックスや外部から見えない小さな変更など。\\ | + | バグフィックスや外部から見えない小さな変更など。 |
- | マイナーバージョンが上がると0にリセットされる。\\ | + | |
- | ユーティリティーやサンプルプログラムの追加・変更はここの変更で行う. | + | マイナーバージョンが上がると0にリセットされる。 |
+ | |||
+ | ユーティリティーやサンプルプログラムの追加・変更はここの変更で行う。 | ||
+ | |||
+ | === ライブラリのバージョン管理形式 | ||
+ | プロジェクト内部の共有ライブラリはプロジェクトのバージョンに加えて別のバージョン管理を行う。 | ||
- | ==== ライブラリのバージョン管理形式 | ||
- | プロジェクト内部の共有ライブラリはプロジェクトのバージョンに加えて別のバージョン管理を行う。\\ | ||
このプロジェクトのバージョン管理システムを使うことで、Makeしなおさなくてもライブラリが使えるようになる。 | このプロジェクトのバージョン管理システムを使うことで、Makeしなおさなくてもライブラリが使えるようになる。 | ||
- | === バージョニング | + | === バージョニング === |
- | 以下Manpageより抜粋\\ | + | 以下Manpageより抜粋。 |
- | libtool は共有ライブラリ用に独自のバージョニングシステムを持っている。\\ | + | |
- | このシステムを使いたい場合は、-version-info オプションを使わなければならない。\\ | + | libtool は共有ライブラリ用に独自のバージョニングシステムを持っている。 |
- | このオプションは CURRENT[: | + | |
+ | このシステムを使いたい場合は、-version-info オプションを使わなければならない。 | ||
+ | |||
+ | このオプションは | ||
+ | < | ||
+ | CURRENT[: | ||
+ | </ | ||
- | ** CURRENT | + | == CURRENT |
インターフェースのバージョン。インターフェースとは " | インターフェースのバージョン。インターフェースとは " | ||
- | ** REVISION | + | == REVISION |
CURRENT からの相対値で与える実装のバージョン。 | CURRENT からの相対値で与える実装のバージョン。 | ||
- | ** AGE **\\ | + | == AGE == |
- | このライブラリが実装している最新のインターフェースと最古のインターフェースとの違い。\\ | + | このライブラリが実装している最新のインターフェースと最古のインターフェースとの違い。 |
- | 言い替えると、このライブラリは `CURRENT - AGE' から CURRENT までの範囲のすべてのインターフェース番号を実装していて、このバージョンの範囲にあるライブラリに対して過去にリンクされたすべての実行ファイルは、このライブラリを使うことができる、ということである。 \\ | + | |
- | REVISION | + | 言い替えると、このライブラリは `CURRENT - AGE' から |
- | AGE は CURRENT インターフェース番号より小さいか等しくなければならないことにも注意すること。\\ | + | |
- | 2 つのライブラリが同一の CURRENT 番号と AGE 番号であるとき、ダイナミックリンカは大きい REVISION 番号のライブラリを選択する。 | + | |
- | == バージョニングのガイドライン | + | このバージョンの範囲にあるライブラリに対して過去にリンクされたすべての実行ファイルは、このライブラリを使うことができる、ということである。 |
- | 1. それぞれの libtool | + | |
- | + | ||
- | 2. バージョン情報を更新するのはソフトウェアの公開リリースの直前だけにしなさい。\\ | + | |
- | | + | |
- | + | ||
- | 3. 前回の更新からライブラリのソースコードがすっかり変更されたなら、REVISION を増加させなさい (C:R:A が C:R+1:A になる)。\\ | + | |
- | 4. 前回の更新からインターフェースが追加・削除・変更されたなら、CURRENT を増加させ、REVISION を 0 にしなさい。\\ | + | REVISION と AGE が省略された場合のデフォルトは 0 である。 |
- | + | ||
- | | + | AGE は CURRENT インターフェース番号より小さいか等しくなければならないことにも注意すること。 |
- | + | ||
- | | + | 2 つのライブラリが同一の CURRENT 番号と AGE 番号であるとき、ダイナミックリンカは大きい REVISION 番号のライブラリを選択する。 |
+ | |||
+ | === バージョニングのガイドライン | ||
+ | - それぞれの libtool ライブラリについて `0: | ||
+ | - バージョン情報を更新するのはソフトウェアの公開リリースの直前だけにしなさい。頻繁な更新は不必要であり、現在のインターフェース番号が大きくなるのを早くするだけである。 | ||
+ | - 前回の更新からライブラリのソースコードがすっかり変更されたなら、REVISION を増加させなさい (C:R:A が C:R+1:A になる)。 | ||
+ | - 前回の更新からインターフェースが追加・削除・変更されたなら、CURRENT を増加させ、REVISION を 0 にしなさい。 | ||
+ | | ||
+ | | ||
- | パッケージバージョンをライブラリ名にエンコードしたい場合や、 libtool のバージョニングと衝突せずに他のバージョニングシステムを使いたい場合は、-release を使うこと。たとえば binutils-2.7.0.2 に付属する | + | パッケージバージョンをライブラリ名にエンコードしたい場合や、 libtool のバージョニングと衝突せずに他のバージョニングシステムを使いたい場合は、 |
+ | < | ||
異なる CURRENT バージョンのライブラリや異なる -release のライブラリはバイナリ非互換であろう。 | 異なる CURRENT バージョンのライブラリや異なる -release のライブラリはバイナリ非互換であろう。 | ||
=== 更新方法 | === 更新方法 | ||
- | 各ライブラリのMakefile.amの ' | + | 各ライブラリのMakefile.amの ' |
- | 上記を簡単にまとめると、更新したときは、\\ | + | |
- | CURRENT : REVISION : AGE | + | 上記を簡単にまとめると、更新したときは、 |
- | 1. バグフィクスしたときは | + | |
- | 2. インターフェースを追加したときは | + | |
- | 3. インターフェースを削除・変更したときは | + | |
- | + | ||
- | ※ここでいうインターフェースとはユーザプログラムで使用する関数のこと | + | |
- | ※ インターフェースを削除、変更するとユーザープログラムを再コンパイルする必要がある | + | |
- | | + | ^ ^CURRENT |
- | | + | |バグフィクスしたときは|C|R++|A| |
- | | + | |インターフェースを追加したときは|C++|R=0|A++| |
- | | + | |インターフェースを削除・変更したときは|C++|R=0|A=0| |
- | + | ||
- | * 1 This interface means a function for users. | + | |
- | * 2 If you delete or change interface, users must rebuild user's program. | + | * インターフェースを削除、変更するとユーザープログラムを再コンパイルする必要がある。 |
+ | |||
+ | ^ ^CURRENT ^ REVISION ^ AGE| | ||
+ | |Bugfix|C|R++|A| | ||
+ | |Add Interface|C++|R=0|A++| | ||
+ | |Delete or Change Interface|C++|R=0|A=0| | ||
+ | |||
+ | * This interface means a function for users. | ||
+ | * If you delete or change interface, users must rebuild user's program. | ||
==== 配布パッケージ | ==== 配布パッケージ | ||
=== autotools | === autotools | ||
- | 自動的にMakefile、依存ライブラリのチェックなどを行ってくれる支援ソフト。\\ | + | 自動的にMakefile、依存ライブラリのチェックなどを行ってくれる支援ソフト。 |
- | 配布パッケージの作成、インストールなどを自動的に行ってくれるので、便利。\\ | + | |
- | 使い方は[[index: | + | 配布パッケージの作成、インストールなどを自動的に行ってくれるので、便利。 |
+ | |||
+ | 使い方は[[how-to-autotools]]が詳しい。 | ||
== 作り方 | == 作り方 | ||
$ make dist | $ make dist | ||
- | でtarファイルが作成されることが望ましい。\\ | + | でtarファイルが作成されることが望ましい。 |
- | 自分の環境をtarでまとめると、編集したときのバックアップファイルなどのゴミが残ってしまう。\\ | + | |
- | そこでmake distで配布するファイルだけがtarにまとまるような状況が望ましい。\\ | + | 自分の環境をtarでまとめると、編集したときのバックアップファイルなどのゴミが残ってしまう。 |
- | (Autotoolsで作成すれば、自動的にmake distでtarファイルができるようになります) | + | |
+ | そこでmake distで配布するファイルだけがtarにまとまるような状況が望ましい。 | ||
+ | |||
+ | (Autotoolsで作成すれば、自動的にmake distでtarファイルができるようになります。) | ||
== 作業手順 | == 作業手順 | ||
- | # | + | 上のバージョン管理方法に従って更新する。 |
- | 上のバージョン管理方法に従って更新する。\\ | + | |
ChangeLogに変更した部分を書いておくこと! | ChangeLogに変更した部分を書いておくこと! | ||
- | **autotoolsを使っている場合 | + | |
$ emacs configure.ac // configure.ac[in? | $ emacs configure.ac // configure.ac[in? | ||
$ emacs Makefie.am | $ emacs Makefie.am | ||
行 110: | 行 130: | ||
$ make dist | $ make dist | ||
- | **autotoolsを使っていない場合 | + | |
Makefileのバージョン部分を更新 | Makefileのバージョン部分を更新 | ||
$ gedit Makefile | $ gedit Makefile | ||
行 123: | 行 144: | ||
=== ldconfigについて | === ldconfigについて | ||
- | 現在 make install時に自動的に ldconfig が実行されるようになっている。\\ | + | 現在 make install時に自動的に ldconfig が実行されるようになっている。 |
- | デフォルトでわざわざldconfigが実行されないようになっている。\\ | + | |
+ | デフォルトでわざわざldconfigが実行されないようになっている。 | ||
これは、ldconfigを実行するにはroot権限が必要であることから、sudoを付けて実行しないとき(/ | これは、ldconfigを実行するにはroot権限が必要であることから、sudoを付けて実行しないとき(/ | ||
- | 本当は自分がroot権限を持っているかを確認してからldconfigを実行すべきである。\\ | + | 本当は自分がroot権限を持っているかを確認してからldconfigを実行すべきである。 |