GNU Bisonのインストール

パーサージェネレーターの一種であるGNU Bisonをソースコードからインストールする。

GNU Bisonはプログラミング言語を開発する際に使われたりする。その他,PHPなどのプログラミング言語をソースコードからインストールする際にも必要となる。

インストール情報
項目 説明
配布元
リポジトリー
手順
依存情報
依存先 (必須)
依存先 (任意)
  • リポジトリーからのビルド用: Autoconf, Automake, Flex, Gettext, Graphviz, Gzip, Help2man, Perl, Rsync, Tar, Texinfo
依存元
  • PHP
インストール手順
sh -eux <<-"EOT"
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
PKG=bison VER=2.7.1 TAG=v$VER
mkdir -p "$LOCAL/src"; cd "$LOCAL/src"

if false command -v git >/dev/null; then
  [ -e $PKG ] || git clone --depth 1 git://git.savannah.gnu.org/bison.git $PKG
  cd $PKG
  git reset --hard; git clean -df; git fetch --depth 1 origin tag $TAG; git checkout $TAG
  git submodule update --init --progress --depth 3000
./bootstrap else [ -e $PKG-$VER ] || wget https://ftp.gnu.org/gnu/$PKG/$PKG-$VER.tar.xz tar -xf $PKG-$VER.* cd $PKG-$VER fi make -kj $J distclean clean || : ./configure --prefix="$LOCAL/stow/$PKG-$VER" make -j $J; make -j $J check; make -j $J install cd "$LOCAL/stow" stow --ignore=dir -S $PKG-$VER -D $PKG-[0-9]* EOT
インストール例
日付 バージョン OS 依存関係
2019-03-31 2.7.1 Ubuntu 18.04 GNU Make 4.2.1, GCC 7.4.0

GNU Bisonはビルドがなかなか難しく,v2.7.1がtarファイルからのビルドの場合のみ,インストールに成功した。

v2.7.1をリポジトリーからビルドする場合,make実行時に以下のエラーが出た。

make  all-am
make[3]: Entering directory '/home/senooken/.local/src/bison/lib'
  AR       liby.a
ar: `u' modifier ignored since `D' is the default (see `U')
make[3]: *** No rule to make target 'timevar.c', needed by 'timevar.o'.  Stop.

また,3.3.2, 3.3.1, 3.2.91をリポジトリーからビルドするとmakeで以下のエラーが出た。src/scan-code-c.cは存在するが,src/scan-code.cは存在しないようだ。

  CC       src/bison-scan-code-c.o
src/scan-code-c.c:3:10: fatal error: src/scan-code.c: No such file or directory
 #include "src/scan-code.c"

3.2.4, 3.1.91をリポジトリーからビルドする場合,makeで以下のエラーが出た。

make[2]: Entering directory '/home/senooken/.local/src/bison'
  CC       src/bison-AnnotationList.o
In file included from src/AnnotationList.c:23:0:
src/AnnotationList.h:23:11: fatal error: bitsetv.h: No such file or directory
 # include <bitsetv.h>

3.3.2, 3.2.4, 3.1, 3.0.5のtarからのビルドだと,make checkで以下のエラーが出た。。

make[3]: 'examples/c/rpcalc/rpcalc' is up to date.
  LEX      examples/c++/calc++/scanner.cc
  CXX      examples/c++/calc++/calc__-scanner.o
g++: error: ./examples/c++/calc++/scanner.cc: No such file or directory
g++: fatal error: no input files
compilation terminated.

メーリングリストのやりとりで,bison-2.7.1ではmake checkに成功したとの報告を見つけ,2.7.1のtarファイルからビルドすると成功した。

なぜリポジトリーからのビルドや3.xでのビルドに失敗するのか不明だ。続報があり次第,手順を更新する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PHPのインストール

数多のWebアプリケーションで利用されているPHPをソースコードからインストールする。

インストール情報
項目 説明
配布元
リポジトリー
手順
依存情報
依存先 (必須)
依存先 (任意)
  • 対応モジュールビルド用: OpenSSL, cURL, ICU, libGD, GMP
  • リポジトリーからのビルド用: Autoconf, Automake 1.4+, libtool 1.4.3+, rec2 0.13.4+, bison 2.4+
依存元
インストール手順
sh -eux <<-"EOT"
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
PKG=php VER=7.3.3 TAG=$PKG-$VER
mkdir -p "$LOCAL/src"; cd "$LOCAL/src"

if command -v git >/dev/null; then
  [ -e $PKG ] || git clone --depth 1 git://github.com/php/php-src $PKG
  cd $PKG
  git reset --hard; git clean -df; git fetch --depth 1 origin tag $TAG; git checkout $TAG
  ./buildconf --force
else
  [ -e $PKG-$VER ] || wget http://jp2.php.net/distributions/$PKG-$VER.tar.xz
  tar -xf $PKG-$VER.*
  cd $PKG-$VER
fi

make -kj $J distclean clean || :
./configure --prefix="$LOCAL/stow/$PKG-$VER" --with-apx2
make -j $J; echo n | make -j $J test; make -j $J install

cd "$LOCAL/stow"
stow --ignore=dir -S $PKG-$VER -D $PKG-[0-9]*
EOT
インストール例
日付 バージョン OS 依存関係
2019-04-01 7.3.3 Ubuntu 18.04 GNU Make 4.2.1, GCC 7.4.0, Bison 2.7.1, Apache HTTP Server 2.4.39

./buildconf実行時に以下のエラーが出たので,–forceオプションを指定した。

You should not run buildconf in a release package.
use buildconf --force to override this check.

今回は,WebサーバーにApache HTTP Serverを採用して,インストールした。

ApacheとPHPをパッケージなどでインストールした場合,本来であれば自分でhttpd.confに以下の記述をする必要がある。

LoadModule php7_module        modules/libphp7.so

--with-apxs2を指定してソースコードからインストールした場合は,make install時に自動的にこの行を追加してくれる。そのため,特にApacheでPHPを使うために,httpd.confを自分で修正する必要はない。

なお,PHPはconfigureの実行時に–withオプションで,組み込み機能 (DB接続,画像処理,SSLなど) の有効化できる。ただし,組み込み機能の有効化には対応するライブラリーが必要がある。また,PHPの組み込み機能は数が多いので,全組み込み機能をPHPのビルド時に有効にするのは現実的ではない

そこで,必要な機能はphpizeでPHPのインストール後に個別に有効化する。phpizeによるPHPの機能の有効化は別途手順をまとめる。

なお,元々は設定ファイルのphp.iniはどのPHPでも共通で使いたいので,configureのオプションで配置場所を--with-config-file-path="$LOCAL/etc"に指定したかった。デフォルトだと,PREFIX/libになっており,パッケージ($LOCAL/stow/php-x.x.x/lib)ごとに設定ファイルが
分離してしまうからだ。

しかし,このオプションを付けるとmake testでテストに失敗してしまう。しかたないので,このオプションは断念した。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です