構成で特定のバージョンのプログラムを使用する

構成で特定のバージョンのプログラムを使用する

root権限のないコンピュータにBisonをインストールしたいと思います。を使用しようとすると、configure次のエラーが発生します。

checking for GNU M4 that supports accurate traces... configure: error: no acceptable m4 could be found in $PATH.
GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.

私のM4バージョンが1.4.13であることがわかりました。私のホームフォルダに最新バージョン(1.4.17)をインストールし、configureこのローカルバージョンを使用したかったのですが、設定スクリプトで次のものが見つかりました。

M4          Location of GNU M4 1.4.6 or later. Defaults to the first program
            of 'm4', 'gm4', or 'gnum4' on PATH that meets Autoconf needs.

だから私は次のコマンドを使用しました。

../configure --prefix=$HOME/local/bison M4='$HOME/local/m4/bin/'

私はこれが可能だと思います(間違っている場合は訂正してください)。

後で次のエラーが発生しました。

checking for flex... flex
checking whether lex is flex... no
checking lex output file root... lex.yy
checking lex library... none needed
checking whether yytext is a pointer... no
configure: error: Flex is required

flexをローカルにインストールし、$HOME/local/flex変数を修正してみましたPATH

PATH=$HOME/local/flex/bin/:$PATH

しかし、まだ同じエラーが発生します。したがって、この場所を使用するように構成に指示する方法がわかりません。今回は以前のようにオプションがないと思いますm4。存在していても、configure任意のプログラムを見つける場所を指定できる場合(好ましくはより優先順位が高い/usr/bin)、まだ興味があるでしょう。

答え1

あなたは近いです。

まず、M4変数は、そのファイルがあるディレクトリではなく、実際のM4プログラムファイルのパスに設定する必要があります。それはおそらくあなたの場合より一般的に使用されているので、実際の実行可能PATHファイルの名前を指定する必要があります。 BSDタイプのオペレーティングシステムでは、まずプラットフォームを持ち、次にm4GNU M4プログラム(gm4例:. GNU BisonをビルドするときにM4のGNUバージョンを使用したい場合があります。スクリプトはBSDバージョンを最初に探します。

第二に、あなたの編集内容は無視されているようですPATHexportを実行しない限り、新しい値はシェルでのみ使用できますPATH。この問題を解決する方法は2つあります。

 export PATH=$HOME/local/flex/bin/:$PATH

または:

 PATH=$HOME/local/flex/bin/:$PATH ../configure --flags-and-stuff-here

2番目のバージョンではスクリプトのみが変更されましたconfigure。スクリプトによって開始されたすべてのプログラムは、以下PATHでなければ変更を見ることができません。それ新しい値をエクスポートします。

~/.bash_profile個人的には、Bisonをインストールした後にプライベートFlexバージョンを使用することもできるので、起動スクリプトで最初のアプローチ(たとえば)を使用します。ログアウトしてから再度ログインし、実行してflexテストしてみてください。これがうまくいったら、Bisonconfigureスクリプトもそのバージョンを最初に見つけなければなりません。

関連情報