2009-06-12 5 views
8

の新バージョンリリースでは、バージョン番号に対処する方法を知りたいと思っています。ソフトウェアが利用可能であり、アプリケーションのバージョン番号を使用するなどのautoconf、automakeに、ので、GNUツールチェーンを構築しているどのようにmanページなどの関連ファイルにバージョン番号を扱うか、など関連するファイル(ドキュメント)内の新しいリリースのバージョン番号をバンプする

。その情報を再利用することができます。

gitはvcsとして使用されます。

追加、新しいターゲットをMakefile.amに導入すると、関連するすべてのファイルのバージョン番号と日付を置き換えるためにsed/awkが実行されます。その目標は、新しいリリースの開発の始め(分岐の直後)に一度呼び出すことができます。

プロジェクトのgitクローンを実行したとき、またはリリースのtarballが完了したときに、正しい情報でプロジェクトを構築できます。もちろん、新しいリリースの開発を開始するときに、このmakeターゲットを実行することを忘れないでください。

もう一つの選択肢は、distターゲットのフックを使ってsed/awkを置き換えることです。しかし、これは正しいバージョン番号が関連するファイルに関連付けられていない状態でプロジェクトのgitリポジトリを置きます。

最初の解決策は、のバージョン番号をgitの履歴の中に記録することをお勧めします。

sed/awkの置き換えを行うときは、autoconf/automakeツールが行う「ファイル内」やテンプレートファイル内で行うことをお勧めします。私は両方の方法で長所と短所の両方を見ています。

関連ファイルのバージョンの処理方法を教えてください。直前を出荷するときに、開発フェーズの開始時にそれらを変更するか、あなたはINFILE交換を行うか、テンプレートを使用して好きですか、それらを変更するには?

THX。

+0

これは本当に2つの質問です。より明確にそれらを分けることができます。 –

答えて

6

私はこれを行うための標準的な方法は、Gitリポジトリのフックシステムを使用することで、/ M4やsedのは、あなたが提案として検索/置換を行うにはawkのだと思います。あなただけの(おそらくヘッダー内の)各ファイルのコメント内で特別なトークンを必要としています。

はここgithooks上に基準だと、ここで同じ問題を解決する人々によって書かれたいくつかのページです:

これらの両方がAにバージョン番号を記憶に頼っていますソースツリーのどこかにファイルを作成します。

リリースの作成(およびバージョン番号を設定)を自動化する主張0release呼ば取っ渡って、私も来ました。リリース番号に関する最後

、これは他のいくつかの質問に対処される:

+0

私は他の質問を見ました。そして、私の質問は、バージョン番号がソースにある場所であるconfigure.acからバージョン番号を取得するアプリケーションの関連ファイルにバージョン番号を取得する技術的な解決策についてより多くのものを使う計画ではありません木。 ギュツクのヒントのTHX。これにより、makefileの手動実行が不要になり、Makefile.amに追加のターゲットが追加されます。 0releaseを見ていきます。 –

1

我々は古典的な大手を使用適用される.minor.patchシステム候補を 'タグ'としてリリースするには、git 'タグオブジェクト'を使うのではなく、バージョン番号としてコミットをタグ付けするスクリプトがあります。すべてのバージョン番号は「手作業で」行われます。 バージョン番号は 'release on staging'スクリプトによって作成されます。これは開発プロセスの後半にあります。実際には必要ないので、gitフックを使用するのは面倒ではありません。コミットが開発環境を離れない場合、内部SHAコード以外のIDは必要ありません。

すべての「パッチ」リリースは、同じメジャー、マイナータグを持つ他のバージョンとバイナリ互換でなければならないことを強制しようとします。

こうすれば、タグを持つものは少なくともビルドする必要がありますが、仕様にはうまくいかない可能性があります。

洗練されたものは、QA部門に「QA承認済み」のタグ付きタグオブジェクトを作成させることですが、今は他の書類作成に依存しています。

9

最近の共通の解決策は、m4_esyscmd引き数を指定してAC_INITを呼び出して、gitからVERSIONを生成することです。例えば、autoconfののconfigure.acは、行が含まれています。

ビルド-AUX/gitのバージョン-GENは、バージョン番号を生成するために、「説明gitの」呼び出す単純なスクリプトです
 
AC_INIT([GNU Autoconf], 
     m4_esyscmd([build-aux/git-version-gen .tarball-version]), 
     [[email protected]]) 

。 (gnulib参照)

このアプローチには欠点がありますが、効果があります。

+0

あなたはどのような欠点を考えていますか、ウィリアム? –

+1

主な欠点は、バージョン番号の衝突に伴う費用です。変更をコードに伝播させるには、autotoolチェーンを再実行する必要があります。これは、config.hを含むすべてのソースファイルの再コンパイルをトリガーします。したがって、基本的にプロジェクト全体を再構築することを意味します。バージョンはgit repoから来ているので、コミットするごとに再構築が強制されます。 autoconfで使われている現在のモデルは、GNUmakefileのいくつかのルールを使って 'make dist'または 'make distcheck'を使って変更を伝播するだけで動作します。ソリューションはautotoolsのリストで議論されています。 –

関連する問題