__aki_nikki__

分子分光学の研究をしている大学院生の日記です

大規模ソフトウェアを手探るをやる (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

無事ビルドに成功しました。