大規模ソフトウェアを手探るその1 〜インストールまで〜

こんにちは。

大学の課題でフリーのペイントソフトGpaint(GNU paint)にいろいろ手を加えてみたので、これから何回かに分けて紹介していこうと思います(環境はubuntu14.04)。

 

まずはGpaintについて。

Gpaint - GNU Project - Free Software Foundation (FSF)

f:id:sumesimeji:20151024130411p:plain

Gpaintはこんな感じの非常にシンプルなペイントソフトで、ソースコードは約15,000行、なんと全部C言語で書かれています。お世辞にも使い勝手が良いとは言えず、undo機能がない、ツールの説明がないなど、いろいろと改良の余地はありそうです。

 

とりあえずソースコードを自分でいじるためにビルドします。上のサイトからversion0.3.2のソースコードをダウンロードし、ファイルを解凍して

$ CFLAGS="-O0 -g" ./configure --prefix=/home/denjo/gpaint_install

$ make

$ make install

の順でインストールすれば良いのですが、コンパイルのところで多数のエラーが出てしまいます。そのうちの1つはこちら。

drawing.c: In function ‘drawing_prompt_to_save’:

drawing.c:432:69: error: ‘GTK_RESPONSE_DISCARD’ undeclared (first use in this function) gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONS

どういうことかわからなかったのでエラーメッセージをそのままGoogleで検索してみると、過去に全く同じところで躓いた人がいたようで、解決策がのっていました。どうやらGTKというGpaintが用いているライブラリのバージョンがGpaintが書かれた当時よりもあがってしまい、互換性のない変更が行われていたようです。エラーメッセージをそのままググるはこのあと度々お世話になりました。

 

こんな感じでエラーメッセージを見ながら1つ1つ対処していきますが、最後に以下のようなエラーが出ます。

$ gcc -O0 -g -o gpaint-2 about.o ..... ui.o -lgtk-x11-2.0 ..... -lglib-2.0 /usr/bin/ld: image.o: シンボル 'cos@@GLIBC_2.2.5' への未定義参照です

C言語でsinやsqrtなどの数学関数を使う際にはコンパイル時にオプション-lmをつける必要がありますが、今回はそれがないためこのようなエラーが出たと考えられます。実際手動で

$ gcc -O0 -g -o gpaint-2 about.o ..... ui.o -lgtk-x11-2.0 ..... -lglib-2.0 -lm

と最後に-lmを追加して実行すると上手く行きます。したがってmake時にオプション-lmが付くようになればよいということになるので、Makefileの中を見てみることにします。ここで先生にMakefileMakefile.inから生成されていると教えてもらったのでMakefile.inの中を見てみると

gpaint-2: $(gpaint_2_OBJECTS) $(gpaint_2_DEPENDENCIES) @rm -f gpaint-2 $(LINK) $(gpaint_2_LDFLAGS) $(gpaint_2_OBJECTS) $(gpaint_2_LDADD) $(LIBS)

という記述が見つかります。これはコンパイルメッセージはこのように構成されているということで、最後の$(LIBS)はリンク時に指定するライブラリを表します。 したがってここに-lmが入るようにすればよく、Makefileはconfigureによって、Makefile.inをテンプレートとして生成されているのでconfigure時に

$ LIBS=-lm CFLAGS="-O0 -g" ./configure --prefix=/home/denjo/gpaint_install

と追加することで無事にコンパイルが通りました。 

 

そんなこんなでなんとかインストールに成功します。

次回から実際に中身に手を加えていきます。