大規模ソフトウェアを手探るをやる (1: gnuplot 5.0.1のビルドまで)
東京大学工学部電子情報学科の学生実験の資料の大規模ソフトウェアを手探るというgnuplotのコードをいじることを通してある程度大きなソフトウェアソースコードを探るというのが数年前に話題になっていたのを思い出したので、取り組んでみました。
gnuplot 5.0.1 をビルドする
まずSOURCEFORGE: gnuplot Filesから5.0.1のソースを取得して解凍する。
$ wget https://sourceforge.net/projects/gnuplot/files/gnuplot/5.0.1/gnuplot-5.0.1.tar.gz $ tar -xvf gnuplot-5.0.1.tar.gz $ cd gnuplot-5.0.1
そのソースツリーの中にbuildディレクトリを作成してビルドを実行しようとすると...
$ mkdir build $ cd build $ CFLAGS="-O0 -g" ../configure --prefix=$HOME/gnuplot_5.0.1_install
configure中にlibcerfがnotfoundと言われたので
$ sudo pacman -S libcerf
にしてから普通にmakeでビルドをしようとすると、以下のメッセージが出てビルドに失敗した。
In file included from ../../src/term.h:414,
from ../../src/term.c:1194:
../../term/lua.trm: In function ‘LUA_GP_int_error’:
../../term/lua.trm:254:15: error: implicit declaration of function ‘luaL_checkint’; did you mean ‘luaL_checkany’? [-Wimplicit-function-declaration]
254 | t_num = luaL_checkint(L, 1);
| ^~~~~~~~~~~~~
| luaL_checkany
そこでソースツリーのINSTALLを読んでみると、gnuplot-5.0.1ではLua5.2系を要求しているようである。
一方、 自分の環境ではssystemにinstallされているLuaが5.4.7であった。
そこで、Lua5.2.4をソースからビルドしてそのヘッダ、ライブラリを使ってgnuplot-5.0.1をビルドすることを考えた。
$ wget https://sourceforge.net/projects/luabinaries/files/5.2.4/Docs%20and%20Sources/lua-5.2.4_Sources.tar.gz $ cd lua52 $ make linux -j11 $ make INSTALL_TOP=$HOME/Learn/search_large_scale_software/lua5.2.4/ install
$HOME上にinstallしたlua5.2.4をgnuplot-5.0.1に教えてあげるため以下ように環境変数設定用スクリプトを書いてsourceで実行した。
set_var.sh
PROJECT_DIR="$HOME/Learn/search_large_scale_software" export LUA_CFLAGS="-I$PROJECT_DIR/lua5.2.4/include" export LUA_LIBS="-L$PROJECT_DIR/lua5.2.4/lib -llua" export PATH="$PROJECT_DIR/lua5.2.4/bin:$PATH" export LD_LIBRARY_PATH="$PROJECT_DIR/lua5.2.4/lib:$LD_LIBRARY_PATH"
$ source set_var.sh
以上を行なった後で、気を取り直してビルド。
$ cd gnuplot-5.0.1 $ mkdir build $ cd build $ CFLAGS="-O0 -g" ../configure --prefix=$HOME/gnuplot_5.0.1_install $ make -j11 # OK! $ make install
無事ビルドに成功しました。