バージョン番号は、 メジャー.マイナー.リビジョン で管理する。
プログラムの根幹にかかわるような大きな変更
それなりに大きな変更。
(外部から見える)新しい関数の追加など。
プログラマが大きな変更だと思えば自由に増加させて良い。
ここが増えるとやる気が上がるらしい。
メジャーバージョンが上がると0にリセットされる。
バグフィックスや外部から見えない小さな変更など。
マイナーバージョンが上がると0にリセットされる。
ユーティリティーやサンプルプログラムの追加・変更はここの変更で行う。
プロジェクト内部の共有ライブラリはプロジェクトのバージョンに加えて別のバージョン管理を行う。
このプロジェクトのバージョン管理システムを使うことで、Makeしなおさなくてもライブラリが使えるようになる。
以下Manpageより抜粋。
libtool は共有ライブラリ用に独自のバージョニングシステムを持っている。
このシステムを使いたい場合は、-version-info オプションを使わなければならない。
このオプションは 、
CURRENT[:REVISION[:AGE]]
という形式の引数を受け付ける。
インターフェースのバージョン。インターフェースとは “外側” の世界に見えるすべてのもので、変数・関数プロトタイプ・出力形式などである。
CURRENT からの相対値で与える実装のバージョン。
このライブラリが実装している最新のインターフェースと最古のインターフェースとの違い。
言い替えると、このライブラリは `CURRENT - AGE' から CURRENT までの範囲のすべてのインターフェース番号を実装していて、
このバージョンの範囲にあるライブラリに対して過去にリンクされたすべての実行ファイルは、このライブラリを使うことができる、ということである。
REVISION と AGE が省略された場合のデフォルトは 0 である。
AGE は CURRENT インターフェース番号より小さいか等しくなければならないことにも注意すること。
2 つのライブラリが同一の CURRENT 番号と AGE 番号であるとき、ダイナミックリンカは大きい REVISION 番号のライブラリを選択する。
パッケージバージョンをライブラリ名にエンコードしたい場合や、 libtool のバージョニングと衝突せずに他のバージョニングシステムを使いたい場合は、
-release
を使うこと。たとえば binutils-2.7.0.2 に付属する
libbfd.so.2.7.0.2
は libtool のバージョニングと明らかに衝突する。
-release 2.7.0
を使えば
libbfd-2.7.0.so.0.0.0
で終ることができる。
異なる CURRENT バージョンのライブラリや異なる -release のライブラリはバイナリ非互換であろう。
各ライブラリのMakefile.amの '_la_LDFLAGS' を更新する。
上記を簡単にまとめると、更新したときは、
CURRENT | REVISION | AGE | |
---|---|---|---|
バグフィクスしたときは | C | R++ | A |
インターフェースを追加したときは | C++ | R=0 | A++ |
インターフェースを削除・変更したときは | C++ | R=0 | A=0 |
CURRENT | REVISION | AGE | |
---|---|---|---|
Bugfix | C | R++ | A |
Add Interface | C++ | R=0 | A++ |
Delete or Change Interface | C++ | R=0 | A=0 |
自動的にMakefile、依存ライブラリのチェックなどを行ってくれる支援ソフト。
配布パッケージの作成、インストールなどを自動的に行ってくれるので、便利。
使い方はAutotools の使い方が詳しい。
$ make dist
でtarファイルが作成されることが望ましい。
自分の環境をtarでまとめると、編集したときのバックアップファイルなどのゴミが残ってしまう。
そこでmake distで配布するファイルだけがtarにまとまるような状況が望ましい。
(Autotoolsで作成すれば、自動的にmake distでtarファイルができるようになります。)
上のバージョン管理方法に従って更新する。
ChangeLogに変更した部分を書いておくこと!
$ emacs configure.ac // configure.ac[in?]のバージョン部分を更新~ $ emacs Makefie.am // (lib***.cを変更したとき、そのlibがあるフォルダのMakefileでライブラリのバージョン部分を変更) $ emacs ChangeLog // 更新した部分を書く $ autoconf -i -f $ ./configure $ make $ make dist
Makefileのバージョン部分を更新
$ gedit Makefile $ emacs ChangeLog $ make $ make dist
tar.bz2形式で配布している。
これはsh-spurのころからの引継ぎ。tar.gzよりも圧縮率も高いので、こちらを使用している。
現在 make install時に自動的に ldconfig が実行されるようになっている。
デフォルトでわざわざldconfigが実行されないようになっている。
これは、ldconfigを実行するにはroot権限が必要であることから、sudoを付けて実行しないとき(/usr/local/にインストールではなく別の場所を指定したときなど)にエラーがでることを防いでいるためである。
本当は自分がroot権限を持っているかを確認してからldconfigを実行すべきである。