Autoconf,Automakeについて

1名無しさん@お腹いっぱい。
垢版 |
NGNG
奥深さの前に使い方がさっぱり分からん。教えて下さい。

関連サイトは>>2
2210
垢版 |
NGNG
了解。勘違いしていた。

>>21
> 自分がリンクしたいライブラリが無かった時、勝手に WITHOUT_LIBHOGE
> みたいなオプションを付けてそれ抜きでコンパイルするのは嬉しくない。
これは同感です。
# というより、Autoconfの使い方が悪い。

> 黙ってコンパイルして、黙ってリンカエラーを出してくれればそれでいい。
これやっちゃうと、バグの報告が大量に発生すると思うので、マトモなパッ
ケージなら、

> 事前に親切に「libhoge ねえぞ、入れろやゴルァ」
と言ってくれると思うんですがどうでしょう。
# マトモの定義の話は無しね。

多分、Makefileを適切に書くのが面倒だから「Automake Autoconfでパッケー
ジ作りました」ってのが多いんだと思う。AC_CHECK_XXXの引数できちんとエラー
処理すれば大丈夫でしょ。

> あと、OS 標準じゃない物を探すんだったら /usr/lib と /usr/include
> 以外の場所も適宜探してくれないと不便だと思う。

ライブラリについてはリンクを実際に行なって調査するので、ユーザが環境変
数を設定することで何とかなりますし、ヘッダの方もコンパイル可能かどうか
を調査するので同じことではないでしょうか?
ま、言いたいのは、道具はいいけど使い方は人それぞれってことです。
23名無しさん@お腹いっぱい。
垢版 |
NGNG
age
24名無しさん@お腹いっぱい。
垢版 |
NGNG
関係ないんだけど、いいですか?
UNIXの人はWindowsでプログラミングするときは
nmakeとcygwin(gmake)のどっち使ってますか?

nmake使いづらいです。。
NGNG
>>24
nmakeってことはVC++?
だったらmsdev使うけど。
NGNG
>>25
vs持ってないもんで、、
NGNG
>26
バカヤロウ。ここはUNIX板。
Windowsはcygwinを入れて使うもんだろ。
コンパイラまでgnuを使うわけにはいかないことも
あるが、それ以外は当然全てgnu!
NGNG
Automake 1.6.2 released
sageですが ;-)
NGNG
JavaプログラムをAutoconf/Automakeに対応させるにはどうしたらいいのかな?
最低限 make と make install と make dist を使えるようにしたいのだけど。

で、
--- Makefile.am ---
bin_PROGRAMS = hello.jar
hello_jar_SOURCES = Main.java

-- configure.in --
AC_INIT(Main.java)
AM_INIT_AUTOMAKE(hello, 1.0.0)
AC_ARG_PROGRAM
AC_PROG_INSTALL
AC_PROG_CC
AC_OUTPUT(Makefile)

とかやってみたけど当前のように正しいMakefileは出来ないし。
NGNG
>>29
> JavaプログラムをAutoconf/Automakeに対応させるにはどうしたらいいのかな?
> 最低限 make と make install と make dist を使えるようにしたいのだけど。

Automake-1.6.2とAutoconf-2.53だと、gcjを利用したコンパイルができるみたい。
でも、うちはJAVAの環境が無いから試せないです。
automakeのinfoの、ノード"Java Support"を参照してみてください。
3129
垢版 |
NGNG
>>30
gcjを入れてみたけどlibgcj.specが????とか出て動かない。かなり険しそう(w
とりあえずAutomake-1.4のinfoで'_JAVA'がどうのこうのって記述を見つけたので、
javacで動くように試してみます。
NGNG
>>31
> とりあえずAutomake-1.4のinfoで'_JAVA'がどうのこうのって記述を見つけたので、
> javacで動くように試してみます。
1.4のやつって、javacでのコンパイルのみのサポートだったと思います。
# 記憶が曖昧ですみません。
info にもありますけど、.javaと.classのサフィックスルールを自動的に作れ
ない(ファイルの中からクラス名を調査する必要がある)のでそのような仕様だっ
たと思います。だからmakeはできてもmake installは難しいと思います。
# でもうまくいったら教えてください。
NGNG
Autoconf-2.53b 開発版リリース(結構前だけど)
どーでもいいけど、autoconf-mode.elとかautotest-mode.elとかあるのね。
色が変わるだけみたいだけど。
NGNG
知らない間にac-2.54 am-1.7になってたのね。
amのdrilistって便利そうなんだけど使っている人いる?
--confiugre=$HOMEしている人ぐらいなのかな。
# ム板のmmmpスレのほうが活発かな?
NGNG
NGNG
保守
37山崎渉
垢版 |
NGNG
(^^)
NGNG
autoconfは便利なんだけど、これに対応するようになってから
ソースの見通しが悪くなった。
NGNG
前は環境依存部分を別関数にしたりしてたけど、最近は面倒だからやめた。
確かに見通しは悪くなった。GNUのソースも見るのが辛くなってきた。
# なんか愚痴ばっかりだな。
NGNG
この前からCommon Lispで書かれた数式処理ソフトウェアの構成を
追ってみようとしてるんだけど、main関数のないLispソースを
autotoolsでビルドする構成になってるので、さっぱり分からない。
Autotoolsを使うときには、想定しているコンパイラ・ライブラリの組み合わせと
依存関係を簡単にドキュメント化してくれないと困ってしまう。
逆に移植などがし辛くなってしまうよ。
NGNG
>>40
とりあえずconfigureしてlog見るんじゃだめなの?
Common Lisp知らないからいい加減なこといっているけど。
NGNG
コンパイル型言語じゃないからね、Lispの「メモリダンプ」とかって独特なんです。
で、どんなコマンドが実行されてるんだか
(というか、山ほど実行されてるコマンドのうちどれが重要なのか)分からない。
NGNG
いろいろ大変なんですね。LispはEmacsのしか知らないし、
AM_PATH_LISPDIR使っているものしか見たこと無いんで、
役に立たずですまんです。
# autoconfにもLispファイルがあります。
NGNG
Autoconf,Automake,Libtoolを解説してる本って少ないながらも一応あるようですけど,
どんなもんでしょう?いい本なのでしょうか?
NGNG
多分あの本だと思いますがいい本です。ただし、最新のAutoconf、Automakeを
利用するとちょっと戸惑うかもしれません。セレンディップのGNOMEプログラ
ミングという本にもこれらの解説があります。
46名無しさん@お腹いっぱい。
垢版 |
NGNG
オーム社の本の事ですか?
NGNG
>>46 そうだと思う。
んでも、少々高いから、漏れは立ち読みで逝こうかとw
NGNG
やっぱりm4マクロの勉強からかな
NGNG
>>48
勉強ってほどのもんでもない。
NGNG
2割、3割はあたりまえ。
51山崎渉
垢版 |
NGNG
(^^)
NGNG
あぼーん
NGNG
CVSにconfigureまで突っ込んでるプロジェクトもたまに
ありますが、ふつうはどこまで含めるものなんですか。
54名無しさん@お腹いっぱい。
垢版 |
NGNG
FreeBSD PORTS なんかだと、
autoconf{,213,254,257} や automake{,14,16,17} や libtool{,13,14} のように、
古いバージョンも後生大事に用意されていますよね。
これは何故なんでしょうか?
何か後方互換性に大きな問題でもあるのでしょうか?
NGNG
はい。
NGNG
>>55
なるほど。

そうだとして、この場合はそれぞれこのバージョンを使えば良い/いけない、
といった判断は一般にどのような基準に基づいて行えば良いのでしょうか?
NGNG
>56
違うバージョンを使うと動かないので悩む必要はありません。
NGNG
>>57
う〜ん、やっぱり良くわからないです。

とどのつまり、知りたいのは、
PORTS や package のような仕組みの無い OS に automake や autoconf を入れる場合、
とりあえずそれぞれ最新のバージョンのを入れておけば問題ないものなんでしょうか?
それとも、古いバージョンのも入れておいた方が良いのでしょうか?
NGNG
>>53
configure.acまでと言いたいが、今のAutotoolsのバージョン間の互換性から、
configureまで入れておいたほうが無難。誰でもcheckoutできるプロジェクト
なら、「autoconfを実行するとエラーが出ます」というレポートが大量発生す
る可能性が高い。しかし、confugure.acやMakefile.amを書き換えると同じ状
況になるんだよね。
AM_INIT_AUTOMAKE([1.7])とかAC_PREREQ(2.57)とか書けばいいのかな?
NGNG
>>58
Autotoolsを自分のプロジェクトで使うのなら、最新を入れて問題ないです。
他のプロジェクトに参加するなら、そのプロジェクトが推奨するバージョンが
あります。適当にソース持ってきて自分でソースなどを修正する時は、そのソー
スを書いた人が使っているものと同じバージョンがないとうまく動かないこと
もあります。更に、これらのツールは同じprefixにインストールしないとうま
く動かない場合が多いです。

私は、$HOME以下のディレクトリにいろんなバージョンが入っているのですが、
libtoolだけはいい方法が見つからないです。
61>>53
垢版 |
NGNG
>>59
さんくす。内輪のプロジェクトなんでconfigure.acまでにしときます。
すでにautotoolsの互換性に悩んでるんだけど、最新版推奨で行くことにします。
configureはtarballに入れればいいし。
NGNG
>>60
どうもです。
私はとくに他人のプロジェクトに参加したりということもなさそうですので、
最新のを入れて問題なさそうですね。
63名無しさん@お腹いっぱい。
垢版 |
NGNG
とあるソフトの configure.in、
AC_SEARCH_LIBS(tputs, ncurses termcap, HAVE_TERMCAPとdefine, ダメです)
みたいなライブラリチェックしかなくてSolaris8上でのconfigureが不能です。
対症療法よりもその辺全面的に書き換えようと思うんで、
configure.in での termcap, curses, ncursesのチェックのお手本になるソフト探してます。
readlineをリンクすることも可能で、Solarisでconfigure;make 可能なソフト、
なんかないでしょうか?gdb?
NGNG
>>63
GNU texinfoが、tercap、ncurses、readlineなどを使ってるみたいです。
infoコマンドのソースはgdbより少ないかな?
6563
垢版 |
NGNG
>>64 情報ありがとうございます。当たってみます。
66名無しさん@お腹いっぱい。
垢版 |
NGNG
済みません、ちょとお邪魔させてください。
事情により初めてautoconf/automake使い始めたとこなんですが、

unyalib--------------------subDirA
  ソ ースいくつか   |       ソースいくつか
               |
               |
               |-----subDirB
                      ソースいくつか

という具合に、ライブラリソースのディレクトリ直下に、ソースが有り、
なおかつ、そのライブラリの一部になっているサブディレクトリにも
ライブラリのソースが有り、という状況ですが、解説ページとかを参考に、

67名無しさん@お腹いっぱい。
垢版 |
NGNG
解説ページとかを参考にして、

-- unyalibのMakefile.am ------
SUBDIRS = subDirA subDirB
noinst_LIBRARIES = libunyalib.a
libunyalib_a_SOURCES = unya.c honya.c
-- subDirAのMakefile.am ----
noinst_LIBRARIES _ libunyalib.a
libunyalib_a_SOURCES =
libunyalib_a_LIBADD = unya_a.c honya_a.c
-- subDirBもsubDirAと同じように"LIBADD"を使用 ----

とかいうように、書いてautomakeを動かしてみました。
でも、結果としてのMakefile.inは、どのディレクトリのものでも

unyalib.a: $(unyalib_a_OBJECTS) $(unyalib_a_DEPENDENCIES)
-rm -f unyalib.a
$(AR) cru unyalib.a $(unyalib_a_OBJECTS) $(unyalib_a_LIBADD)
$(RANLIB) unyalib.a

と、ar の前に必ずrm が実行されて、一つのライブラリに合体してくれない状態です。
サブディレクトリの方ではrmの実行が挟まれず、一つのライブラリにさせる技は無いでしょうか。
NGNG
あぼーん
NGNG
そりゃサブディレクトリでやったらそれぞれ別物だし、
一つのライブラリになるわけはない罠。
7067
垢版 |
NGNG
えーと、やっぱ駄目ですか。

automakeって、一つの結果(実行形式でもライブラリでも)を作るためのソースは、
一つのディレクトリに集まっているというのしか想定していないということでしょうか。
NGNG
SUBDIRS使わずに、SOURCESで相対パス指定でできなかったっけ?
$(topsrcdir)とかで指定するんだったかも。
1.4頃の記憶なんで違うかもしれん。
どっちかというとlibtoolsの話かもしれんけどね。
7267
垢版 |
NGNG
やってみました。

SUBDIRS無し、
libunyalib_a_SOURCES = unya.c honya.c subDirA/unya_a.c subDirA/honya_a.c

とかしてみると、
subDirA下のソースに対するオブジェクトがunyalib(ライブラリソースツリーの根っこ)下に
作成されるけど、ライブラリのためのオブジェクトはサブディレクトリから取ってこようとする
Makefileが出来ちゃいまひた。

で、もう、最初のMakefile.inはautomakeで作るけど、
それを手で修正して以後automakeは使わないという決定が
本日なされちゃって、この件は棚上げとあいなりました。

ありがとうございました。
73名無しさん@お腹いっぱい。
垢版 |
NGNG
>>1
使いにくいのを奥深さと勘違いしてるだけだろ。
74>>53
垢版 |
NGNG
>>73
奥が深くて使いづらいと申し上げているのです。
NGNG
あぼーん
NGNG
あぼーん
77名無しさん@お腹いっぱい。
垢版 |
NGNG
makeができない。
NGNG
automakeで作ったMakefileってgmakeに依存する?
NGNG
>>78
基本的には依存しない。Makefile.amの内容によっては依存する。
NGNG
あぼーん
81名無しさん@お腹いっぱい。
垢版 |
NGNG
>>73
バッドノウハウと「奥が深い症候群」か。
ttp://namazu.org/~satoru/misc/bad-knowhow.html
こんな単純な問題じゃないと思うけどな。autotoolsがバッドノウハウの塊なのは認めるけど。でも、バッドノウハウがなくなることはないと思うよ、漏れは。
NGNG
あぼーん
NGNG
あぼーん
8481
垢版 |
NGNG
>>67
ん?

-- unyalibのMakefile.am ------
SUBDIRS = subDirA subDirB
noinst_LIBRARIES = libunyalib.a
libunyalib_a_SOURCES = unya.c honya.c
libunyalib_a_LIBADD = libsubdir_a.a ...
-- subDirAのMakefile.am ----
noinst_LIBRARIES = libsubdir_a.a
libsubdir_a_a_SOURCES = unya_a.c honya_a.c

でいいんじゃないの? 手元で試してないから嘘言ってるかもしれないけど。
8581=84
垢版 |
NGNG
間違えた。
libunyalib_a_LIBADD = libsubdir_a.a ...

libunyalib_a_LIBADD = subdirA/libsubdir_a.a ...
ね。
NGNG
auto* っつーもんは、backward compatibility を放棄した糞ということでよろしいか?
NGNG
Autotools で生成したものの再配布は GNU ライセンスに準じるの?
NGNG
>>87
準じないけど、Automakeで配布されるファイルには
いろんなライセンスがあっはず。
バイナリ配るんなら問題無かったと思う。
>>86
糞かどうかは知らんが、同意したい気分だね。
NGNG
まあ、こいつの登場で便利になっている事実は否定できないので、
backward compatibility を確保して欲しかったということだけかな。
NGNG
backward compatibilityを維持したらどんな事態になるか分るだろ。
NGNG
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/< 先生!わかりません!!
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||          ||
NGNG
あぼーん
NGNG
Automake-1.7.7のconfigureがAutoconf-2.57だと通らず、
Autoconf-2.54だと通る。
config.logは以下の通り(一部抜粋Autoconf-2.57のとき)。
configure:1724: cd conftest && eval autoconf -o /dev/null conftest.ac
autom4te: no such file or directory: m4sugar/m4sugar.m4
configure:1727: $? = 1
configure:1731: error: Autoconf 2.54 or better is required.
Is it installed? Is it in your PATH? (try running `autoconf --version')
Is it working? See also config.log for error messages before this one.

なんか情報ありませんか?
NGNG
お騒がせしました。ありました。
http://mail.gnu.org/archive/html/automake/2003-07/msg00018.html
以下のスレッドでした。でもちょっと違うんだよね。困った。
NGNG
犬板にあったので
http://japan.linux.com/desktop/03/11/20/0516251.shtml
個人的にはconfigure時にはbuildなどディレクトリを掘って
../configureのほうが好み。
NGNG
>>95
distclean できる *はず* なので、正直どうでもいい。
NGNG
確かにdistcleanできる *はず* ですね。
個人で開発に利用するときは、cleanすら使うことが少ないから、
良く理解していなかった。
98名無しさん@お腹いっぱい。
垢版 |
NGNG
./configureしたときのデフォルトの$prefixが/usr/localなのが不便なので、configure.ac
やMakefile.acの中で--prefix=/usrの指定をできないでしょうか?
NGNG
>>98
AC_PREFIX_DEFAULTを使う。詳細はinfo Autoconfとかして見るべし。

しかし、デフォルトのprefixを/usrにするのはあまり行儀の良いもの
ではないと思うが。
NGNG
Makefile.ac
NGNG
>>100
ああ、Makefile.amの間違いだよな。
102名無しさん@お腹いっぱい。
垢版 |
NGNG
>>99
ありがとうございます。
ところでprefixを/usrにするとどういうデメリットがあるのでしょうか?
103名無しさん@お腹いっぱい。
垢版 |
NGNG
>>101
ごめんなさい。その通りMakefile.amの間違いです。
NGNG
>>102
/usr の下はユーザにとって最低限必要なものが入ってるので、そういう重要なファイルと
ユーザがインストールしたものの中で名前が衝突し、置き変えられたりするとまずい。

/usr/bin/cc が上書きされたらどうなるかは簡単に想像できるとおもう。
Linux とかはパッケージで入れるものは全部 /usr に入れるのが多い
(衝突が検知できるから問題にならない)けど、 *BSD は別にディレクトリを掘って
そこに入れてる。/usr の下は一切いじらないポリシーを厳格にまもってるんだとおもう。
NGNG
OSの一部として配布されるもの以外は/usrに入れないのが当り前です。
システム上重要というだけでなく、そのOSを使っている人の間で構成が
一致しているからでもある。

Linuxはその意味ではいまだ寄せ集めの域を出ていないのかな?
もしだとすると>>102のようになんでも/usrに叩き込むということになっちゃっ
うのも納得できる。
>>104の前半にあるような問題は既にLinuxユーザでは起きているみたいだし。
NGNG
寄せ集めっつーか、大多数のLinuxディストリにはbase systemと
いう概念が無いからなぁ。「無けりゃインストールしろ」「インストール
したらそれもbase systemの一部だ」みたいなノリなんだろうね。
NGNG
>>105
Linux だと FHS(File Hierarcy Standard だっけな)って標準があるよ。
最近のメジャーなディストリは準拠してる(Debian,SuSE,Fedora,Turbo...)。
特別な理由もなく --prefix=/usr するのは、お行儀の悪い鯖管だけだね。

> Linuxはその意味ではいまだ寄せ集めの域を出ていないのかな?
これは、もはや昔話だよもん。
NGNG
一度rpmにするものは/usrにしてる。
109名無しさん@お腹いっぱい。
垢版 |
NGNG
libtool.m4に入ってるチェックで、Fortranコンパイラを勝手に探したり、
maximum length of command line argumentsとか言ってCPU食うのを
やめさせたいんですけど。そういうACマクロはないんでしょうか?
NGNG
>>109
「勝手」にチェックする m4 なんてない。
configure.{ac,in} から呼び出してる(つまり必要である)から行われてるチェック。
気に入らなきゃチェックしてるところを外せ。
# それでまともにコンパイルできるとは思えんが。
111名無しさん@お腹いっぱい。
垢版 |
NGNG
えーと言い方が悪かったですが、AC_PROG_LIBTOOLマクロを使うと
ほとんどのパッケージには不要なはずのチェックが盛りだくさんに
はいるわけです。
とりあえず全部チェックしておけばどんな場合にも対応できるってこと
なんでしょうが、不要なものをdisableにするくらいできてもいいよねえ、
そういうマクロあります?って話です。
libtool.m4が洗練されてないと言えばそれまでですがね。
NGNG
古いlibtool使うしかないのでは?
NGNG
>>109
AC_LIBTOOL_SETUPのAC_LIBTOOL_SYS_MAX_CMD_LENをコメントアウトするとか、
自分でlibtool.m4を書き換えちゃえば?
うまく動く保証は無いし、libtool使う意味も減ると思うけど。

移植性考えないんならlibtool使わなくてもいいんじゃないかな?
114名無しさん@お腹いっぱい。
垢版 |
NGNG
移植性を考える考えないの二択ではないでしょう。全プラットフォームの
全項目を保証する気なんてないし、不可能ですから、どこまでチェック
するかの問題ですね。AutoconfにしてもLibtoolにしても。
ですから「移植性考えないならlibtool使わなくていい」なんてのは極論です。

このチェックに関して言えば、ソースのビルド中にコマンドラインの
最大長を超えるコマンドは分割実行するようになっているみたいですが、
環境によっては数分以上かかるようなチェックをするより、4096とか
小さい値を決めうちしたほうがいいですね。実際そうしましたが。
コマンドに4096バイトも入らないプラットフォームは問題外ですから
無視でよいです。デフォルトがチェックになってるのは仕方ないですが。
NGNG
外してたら済まんが、ac_cvなんとかでスキップできんの?
NGNG
たかだか AC_LIBTOOL_SYS_MAX_CMD_LEN のチェックぐらいで数分もかかる
プラットホームは俺の中で問題外なんだけどなw
何のために libtool 使ってんのか分からんよ。
NGNG
>>114
configure時の話なら、config.siteじゃできんかな?
lt_cv_sys_max_cmd_lenがキャッシュにあれば良さそうなんで、
test "$lt_cv_sys_max_cmd_len" = NONE && lt_cv_sys_max_cmd_len=4096
みたいな内容を書いとけばいいかもね。

# 試してないんで違うかもしれん。
# 今、バージョンの不一致でautotoolsがうまく動かない(泣)
NGNG
autoconfのドキュメント読んでたら、
$ ./configure --lt_cv_sys_max_cmd_len=4096
でいけるかもしれんような気がした。
しかし、試せない。。。
NGNG
やっと試せた。
>>118
> $ ./configure --lt_cv_sys_max_cmd_len=4096
ではなく、
$ ./configure lt_cv_sys_max_cmd_len=4096
だね。
120名無しさん@お腹いっぱい。
垢版 |
NGNG
libtool関係の質問はOKですか?>このスレ
NGNG
すぐ上でされてるみたいだけど、とりあえずやってみれば?
問題があれば誘導されるでしょ。
NGNG
configureのコストが、高機能になればなるほどデカクなってきてる
わけですが、これらを動的にチェックするんじゃなくて静的にデータ
ベースのようなもので持たせることはできないですかね。とはいっても
何かソフトウェアをインストールしたら、そこで内部状態は変わってしまう
わけでなかなか難しいんだろうけど。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況