インストール: Flex | 高速な字句解析機
高速な字句解析機である Flex (Fast Lexical Analyzer) をソースコードからインストールする。
Flexはコンパイラーの作成のために使われることが多い。Wineの依存関係で必要になったためインストールした。
手順
項目 | 説明 |
---|---|
配布元 | westes/flex: The Fast Lexical Analyzer – scanner generator for lexing in C and C++ |
リポジトリー | westes/flex: The Fast Lexical Analyzer – scanner generator for lexing in C and C++ |
手順 | flex/README.md at master · westes/flex |
依存情報 | |
依存先 (必須) | Make (GNU Make) |
依存先 (任意) | リポジトリーからのビルドで必要: shell (Bash), m4 (GNU m4), GNU bison, autoconf, automake, gettext, help2man, tar, gzip, lzip, GNU texinfo, GNU indent |
依存元 | Wine |
日付 | バージョン | OS | 依存関係 |
---|---|---|---|
2020-03-27 Fri | 2.6.4 | Ubuntu 18.04 | GNU Make 4.2.1, GCC 7.4.0, GNU Bison 2.7.1, GNU m4 1.4.18, help2man 1.47.8, gettext 0.19.8.1, GNU Texinfo 6.6 |
v2.6.4はtgzとリポジトリーからの両方でビルドに成功した。
ビルドに際し注意点が2点あるので説明する。
リポジトリーからのビルドにはflex
が必要
当初,v2.6.4のリポジトリーからのビルドでは,make
で以下のエラーが出た。
make[2]: Entering directory '/home/senooken/.local/src/flex/src' /bin/bash ../build-aux/ylwrap scan.l .c scan.c -- /bin/bash /home/senooken/.local/src/flex/build-aux/missing flex /home/senooken/.local/src/flex/build-aux/missing: line 81: flex: command not found WARNING: 'flex' is missing on your system. You should only need it if you modified a '.l' file. You may want to install the Fast Lexical Analyzer package: <https://github.com/westes/flex> make[2]: *** [Makefile:1464: scan.c] Error 12
flex
コマンドを実行しようとして失敗している。
リポジトリーからのビルドの場合,flex
が必要のようだ (参考: flex-2.6.4: segfault during build · Issue #219 · westes/flex)。
そのため,以下のようにGitを使ったリポジトリーからのビルドには,git
の他にflex
コマンドがあることを条件に加えた。
if (command -v git && command -v flex) >/dev/null; then
stage1flex
のクラッシュ
リポジトリーからのビルドを断念し,tgzからv2.6.4のインストールを試みると,make
で以下のエラーが出た。
Making all in src make[1]: Entering directory '/home/senooken/.local/src/flex-2.6.4/src' make all-am make[2]: Entering directory '/home/senooken/.local/src/flex-2.6.4/src' ./stage1flex -o stage1scan.c ./scan.l make[2]: *** [Makefile:1696: stage1scan.c] Segmentation fault (core dumped) make[2]: Leaving directory '/home/senooken/.local/src/flex-2.6.4/src'
stage1flex
の実行でクラッシュしている。
調べたところ,「flex-2.6.4 build fails with segfault on Ubuntu 18.04 · Issue #425 · westes/flex」のissueのコメントで対応できた。
デフォルトでは,Makefile
でCFLAGS = -g -O2
が指定されている。以下のように,CLFAGSの末尾に-D_GNU_SOURCE
を追加する。
./configure CFLAGS='-g -O2 -D_GNU_SOURCE'
make CFLAGS='-g -O2 -D_GNU_SOURCE'
glibc 2.26+でconfig.hで定義されているreallocarrayのプロトタイプが変わったのが原因らしい。
Flexの本体には,2017-09-04のコミット [24fd0551333e7eded87b64dd36062da3df2f6380] で対応されたらしい。v2.6.5からこの問題は解決するようだ。
そのため,手順内では以下のようにv2.6.5未満の場合だけCFLAGS
を変更するようにした。
FLAG=
[ $(echo $VER | sed 's/\.//g') -lt 265 ] && FLAG="CFLAGS='-g -O2 -D_GNU_SOURCE'"
make -j $J "$FLAG"