差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
index:internal-notice:how-to-update [2014/10/07 18:03] – [CURRENT] rpp | tips:how-to-update [2023/03/29 15:16] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 5: | 行 5: | ||
| | ||
で管理する。 | で管理する。 | ||
- | == メジャーバージョン == | + | === メジャーバージョン |
プログラムの根幹にかかわるような大きな変更 | プログラムの根幹にかかわるような大きな変更 | ||
- | == マイナーバージョン == | + | === マイナーバージョン |
それなりに大きな変更。 | それなりに大きな変更。 | ||
+ | |||
(外部から見える)新しい関数の追加など。 | (外部から見える)新しい関数の追加など。 | ||
+ | |||
プログラマが大きな変更だと思えば自由に増加させて良い。 | プログラマが大きな変更だと思えば自由に増加させて良い。 | ||
+ | |||
ここが増えるとやる気が上がるらしい。 | ここが増えるとやる気が上がるらしい。 | ||
+ | |||
メジャーバージョンが上がると0にリセットされる。 | メジャーバージョンが上がると0にリセットされる。 | ||
- | == リビジョン番号 == | + | === リビジョン番号 |
バグフィックスや外部から見えない小さな変更など。 | バグフィックスや外部から見えない小さな変更など。 | ||
+ | |||
マイナーバージョンが上がると0にリセットされる。 | マイナーバージョンが上がると0にリセットされる。 | ||
- | ユーティリティーやサンプルプログラムの追加・変更はここの変更で行う. | ||
- | == ライブラリのバージョン管理形式 | + | ユーティリティーやサンプルプログラムの追加・変更はここの変更で行う。 |
+ | |||
+ | === ライブラリのバージョン管理形式 | ||
プロジェクト内部の共有ライブラリはプロジェクトのバージョンに加えて別のバージョン管理を行う。 | プロジェクト内部の共有ライブラリはプロジェクトのバージョンに加えて別のバージョン管理を行う。 | ||
+ | |||
このプロジェクトのバージョン管理システムを使うことで、Makeしなおさなくてもライブラリが使えるようになる。 | このプロジェクトのバージョン管理システムを使うことで、Makeしなおさなくてもライブラリが使えるようになる。 | ||
- | == バージョニング == | + | === バージョニング |
- | 以下Manpageより抜粋 | + | 以下Manpageより抜粋。 |
libtool は共有ライブラリ用に独自のバージョニングシステムを持っている。 | libtool は共有ライブラリ用に独自のバージョニングシステムを持っている。 | ||
+ | |||
このシステムを使いたい場合は、-version-info オプションを使わなければならない。 | このシステムを使いたい場合は、-version-info オプションを使わなければならない。 | ||
- | このオプションは | + | |
+ | このオプションは | ||
< | < | ||
CURRENT[: | CURRENT[: | ||
</ | </ | ||
- | ==== CURRENT | + | == CURRENT == |
インターフェースのバージョン。インターフェースとは " | インターフェースのバージョン。インターフェースとは " | ||
行 41: | 行 51: | ||
== AGE == | == AGE == | ||
このライブラリが実装している最新のインターフェースと最古のインターフェースとの違い。 | このライブラリが実装している最新のインターフェースと最古のインターフェースとの違い。 | ||
- | 言い替えると、このライブラリは `CURRENT - AGE' から CURRENT までの範囲のすべてのインターフェース番号を実装していて、このバージョンの範囲にあるライブラリに対して過去にリンクされたすべての実行ファイルは、このライブラリを使うことができる、ということである。 | + | |
+ | 言い替えると、このライブラリは `CURRENT - AGE' から CURRENT までの範囲のすべてのインターフェース番号を実装していて、 | ||
+ | |||
+ | このバージョンの範囲にあるライブラリに対して過去にリンクされたすべての実行ファイルは、このライブラリを使うことができる、ということである。 | ||
REVISION と AGE が省略された場合のデフォルトは 0 である。 | REVISION と AGE が省略された場合のデフォルトは 0 である。 | ||
+ | |||
AGE は CURRENT インターフェース番号より小さいか等しくなければならないことにも注意すること。 | AGE は CURRENT インターフェース番号より小さいか等しくなければならないことにも注意すること。 | ||
+ | |||
2 つのライブラリが同一の CURRENT 番号と AGE 番号であるとき、ダイナミックリンカは大きい REVISION 番号のライブラリを選択する。 | 2 つのライブラリが同一の CURRENT 番号と AGE 番号であるとき、ダイナミックリンカは大きい REVISION 番号のライブラリを選択する。 | ||
- | == バージョニングのガイドライン | + | === バージョニングのガイドライン |
- それぞれの libtool ライブラリについて `0: | - それぞれの libtool ライブラリについて `0: | ||
- バージョン情報を更新するのはソフトウェアの公開リリースの直前だけにしなさい。頻繁な更新は不必要であり、現在のインターフェース番号が大きくなるのを早くするだけである。 | - バージョン情報を更新するのはソフトウェアの公開リリースの直前だけにしなさい。頻繁な更新は不必要であり、現在のインターフェース番号が大きくなるのを早くするだけである。 | ||
行 55: | 行 70: | ||
- 前回の公開リリースからインターフェースが削除されたなら、AGE を 0 にしなさい。 | - 前回の公開リリースからインターフェースが削除されたなら、AGE を 0 にしなさい。 | ||
- | パッケージバージョンをライブラリ名にエンコードしたい場合や、 libtool のバージョニングと衝突せずに他のバージョニングシステムを使いたい場合は、< | + | パッケージバージョンをライブラリ名にエンコードしたい場合や、 libtool のバージョニングと衝突せずに他のバージョニングシステムを使いたい場合は、 |
+ | < | ||
異なる CURRENT バージョンのライブラリや異なる -release のライブラリはバイナリ非互換であろう。 | 異なる CURRENT バージョンのライブラリや異なる -release のライブラリはバイナリ非互換であろう。 | ||
行 61: | 行 77: | ||
=== 更新方法 | === 更新方法 | ||
各ライブラリのMakefile.amの ' | 各ライブラリのMakefile.amの ' | ||
+ | |||
上記を簡単にまとめると、更新したときは、 | 上記を簡単にまとめると、更新したときは、 | ||
行 67: | 行 84: | ||
|インターフェースを追加したときは|C++|R=0|A++| | |インターフェースを追加したときは|C++|R=0|A++| | ||
|インターフェースを削除・変更したときは|C++|R=0|A=0| | |インターフェースを削除・変更したときは|C++|R=0|A=0| | ||
- | | + | |
- | * ここでいうインターフェースとはユーザプログラムで使用する関数のこと | + | * ここでいうインターフェースとはユーザプログラムで使用する関数のこと。 |
- | * インターフェースを削除、変更するとユーザープログラムを再コンパイルする必要がある | + | * インターフェースを削除、変更するとユーザープログラムを再コンパイルする必要がある。 |
^ ^CURRENT ^ REVISION ^ AGE| | ^ ^CURRENT ^ REVISION ^ AGE| | ||
行 82: | 行 99: | ||
=== 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 | ||
行 107: | 行 130: | ||
$ make dist | $ make dist | ||
- | **autotoolsを使っていない場合 | + | |
Makefileのバージョン部分を更新 | Makefileのバージョン部分を更新 | ||
$ gedit Makefile | $ gedit Makefile | ||
行 120: | 行 144: | ||
=== ldconfigについて | === ldconfigについて | ||
- | 現在 make install時に自動的に ldconfig が実行されるようになっている。\\ | + | 現在 make install時に自動的に ldconfig が実行されるようになっている。 |
- | デフォルトでわざわざldconfigが実行されないようになっている。\\ | + | |
+ | デフォルトでわざわざldconfigが実行されないようになっている。 | ||
これは、ldconfigを実行するにはroot権限が必要であることから、sudoを付けて実行しないとき(/ | これは、ldconfigを実行するにはroot権限が必要であることから、sudoを付けて実行しないとき(/ | ||
- | 本当は自分がroot権限を持っているかを確認してからldconfigを実行すべきである。\\ | + | 本当は自分がroot権限を持っているかを確認してからldconfigを実行すべきである。 |