2009-06-25 13 views
3

私の会社では、現在、サードパーティのライブラリからDebianのdebパッケージを作成しています。ライブラリはAutotoolsを使用して構築されます。以前はAutotoolsを使ったことがありませんでしたが、苦労しています。ライブラリソースには、configure.inMakefile.amファイルとm4/ディレクトリが含まれています。私は、このシーケンスを使用してライブラリを構築することができる午前:autoconfを実行する頻度はどれくらいですか?

aclocal -I m4 -I /usr/share/aclocal 
autoheader 
libtoolize --automake 
automake -a 
autoconf 
./configure 
make 

ファイルdebian/rulesでは、私がCDBSを使用したいと思います。私はこれを書いた:

#!/usr/bin/make -f 

include /usr/share/cdbs/1/rules/debhelper.mk 
include /usr/share/cdbs/1/class/autotools.mk 

しかし、それは動作しません。 configureファイルが見つからないと訴えます。 Autotoolsクラスはこのファイルが存在することを期待しているからです。しかし、そこには誰もがautoconfとお友達と最初に電話しなければならない!

なぜAutotools CDBSクラスでautoconfとお友達に電話をさせないのですか?どのように私はそれを回避するのですか?

余談:私はプログラムを使用する場合

、私は一度それをコンパイルしてバイナリを再利用し、それを毎回コンパイルしないでください。

人がソフトウェアをインストールすると、それ自体ではコンパイルされず、メンテナは一度コンパイルして、バイナリパッケージを再利用します。

メンテナがパッケージをコンパイルするとき、彼はコンパイルするたびにconfigureスクリプトを作成しません。上流の作者はそれを一度作成し、メンテナはそれを再利用できます。

最後の文は本当ですか?私には、Autotools CDBSクラスの作者がそのようなことを想定しているように思えます。つまり、configureが存在すると仮定し、別のアーキテクチャ用のパッケージをコンパイルする際に再利用します。私は正しい?

一方で、configureを生成することができれば、それはどこにも存在してはいけません。必要に応じて他のファイルから生成したものです。一方、Autotools CDBSクラスの作成者には、この方法で実装する理由があったに違いありません。

概要:

  • 私は上記のAutotool群CDBSクラスの問題に対処するにはどうすればよいですか?
  • どのくらいの頻度で再生するのですかconfigure? (一般的におよびDebianパッケージを構築する。)

答えて

1

Jasiu、

configureスクリプトは、上流作者によって作成され、通常は他の誰によって再生される必要がないことは事実だという。しかし、オリジナルの設定に問題がある場合、autotools(新しいバージョンのautotoolsまたは更新されたm4マクロを使用)を実行したいことがあります。あなたがなどconfigure.ac、Makefile.am、M4マクロに変更を加えた場合にのみ

は通常あなたがautotoolsの実行

のautoconfが十分に新しいですところであればあなただけのconfigureを生成するautoreconfを呼び出すことができます。しかし、元の設定に問題がなければそのままそのまま残してください。

+1

'configure.ac'と' Makefile.am'から 'configure'を生成できるのであれば、後者の2つを常に配布してはいけませんか? 'configure 'を私に配布することはバイナリファイルをリポジトリに入れることに似ています。 – Jasiu

+4

GNUビルドシステムでは、tarballを解凍した直後に './configure && make && make install 'を実行する必要があるので、' configure'スクリプトをtarballに配布する必要があります。 Makefile.in、Bison生成のパーサ、Texinfoドキュメントはすべて他のファイルから生成され、エンドユーザはそれらを再生成するためにツールをインストールする必要がないように配布されています。 リポジトリに入るものは、ユーザーのtarballのものとは異なります。開発者はしばしば生成されたファイルを省略しますが、実行するのはそのすべてを再生成する作業です。 – adl

-1

通常はリリースからdebianパッケージをビルドして、パッケージ化しているものを知っているはずです。これは通常、tarballパッケージ-VERSION.tar.gzです。その場合、config。{sub、guess}が古すぎ、ターゲットシステムで実行できない場合を除いて、通常はautotoolsを実行する必要はありません。

とにかく、あなたは多くの質問を尋ねたが、最初の1は問題に基づいています「しかし、それは動作しません。それはのconfigureファイルが欠落している 文句を言います。」

これは何が失敗したかを説明しません。質問の先頭のシーケンスには./configureの実行が含まれていますので、見つからないことはありません。

configureは、自動ツールが正しく実行されたときに常に表示されるため、後ほど質問のほとんどが混乱します。

+0

CDBSは 'configure'スクリプトが既に存在することを期待しています。私たちが入手したソースにはconfigureだけが含まれていました。ac'と 'Makefile.am'です。私はそれらの2つをSVNリポジトリに入れましたが、他の2つのスクリプトから生成できるので、そこに 'configure'を入れたくありませんでした。それらのため、私はCDBSが 'configure'を探すので、自動パッケージビルドを実行することはできません。なぜ人々は 'configure'スクリプトでソースを配布しますか?代わりに 'configure.ac'と' Makefile.am'を配布してはいけませんか? – Jasiu

+0

@ジャシュー:いいえ、彼らはすべきではありません。 configureは、エンドユーザがAutoconf/Automakeとそのホスト上のすべての依存関係を必要としないように配布する必要があります。 (パッケージによっては、非常に特定のバージョンのautotoolsも使用するので、パッケージをインストールするためにautotoolsをダウングレードまたはアップグレードするように要求するのは愚かなことでしょう) – adl

+0

外部リリースを 'ベンダー'として使用している場合は、ベンダーのtarballがもともとあなたのsubvesionに含まれていたファイル。ソースコードのアプローチを使用している場合は、上記のようにautotoolsを実行する必要がありますが、なぜ構成されていないのかを診断できるようなエラーメッセージは表示されません。 autotoolsは多くの方法で失敗する可能性があります - ログを提供します。 – dajobe

6

まず、あまりにも頑張っています。 aclocalを実行するのではなく、& & autoheader & &など... を実行するだけで、autoreconfを実行することができます。これにより、すべてのオートツールが正しい順序で呼び出されるようになります(また、指や脳の方が簡単になります)。次に、configureスクリプトを生成したら、ビルドディレクトリを作成し、make distを実行してdebを生成するためのtarballを取得する必要があります。 tarballにはconfigureスクリプトがあります。 (さらに良いのは、アップストリームで生成されたtarballを使用するだけで、autotoolsの実行について心配する必要はありません)。

0

「Autotools CDBSクラスがautoconfや友人に電話することができないのはなぜですか?私はそれを回避するか「、私がやったことは、ファイルのdebian /ルールに次のルールを追加しました:?このルールは基本的に実行さ

makebuilddir/your_package_name ::
autoreconf --install

autoreconf --installコマンド(これはconfigureスクリプトfを生成しますまたはconfigure.acファイルとMakefile.amファイルが存在する場合)をパッケージの事前構成アクションとして使用します。 http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml#id489203

adlと同様に、開発者はautoreconfを実行して開発用のconfigureスクリプトを再生成することができ、configure.acファイルとMakefile.amファイルだけをSVNにチェックインする必要があります。しかし、ソースがエンドユーザにリリースされると、エンドユーザはconfigureスクリプトを生成するツールを必要とせずにエンドユーザがconfigureスクリプトを実行できるように、configureスクリプトを提供する必要があります。

関連する問題