SolarisでXFree86
Firefoxで必要なpangoをmakeしているとこんなエラーがでました。
gcc -DHAVE_CONFIG_H -I. -I. -I.. -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_BACKEND -DPANGO_ENABLE_ENGINE -DSYSCONFDIR=\"/usr/local/etc\" -DLIBDIR=\"/usr/local/lib\" -I.. -DPANGO_ENABLE_DEBUG -DG_DISABLE_DEPRECATED -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/openwin/include -I/usr/include/freetype2 -g -O2 -Wall -MT pangoxft-font.lo -MD -MP -MF .deps/pangoxft-font.Tpo -c pangoxft-font.c -fPIC -DPIC -o .libs/pangoxft-font.o In file included from ../pango/pangoxft-render.h:30, from ../pango/pangoxft.h:30, from pangoxft-private.h:25, from pangoxft-font.c:27: /usr/openwin/include/X11/Xlib.h:32: warning: ignoring #pragma ident In file included from /usr/openwin/include/X11/extensions/Xrender.h:33, from /usr/openwin/include/X11/Xft/Xft.h:37, from ../pango/pangoxft-render.h:31, from ../pango/pangoxft.h:30, from pangoxft-private.h:25, from pangoxft-font.c:27: /usr/openwin/include/X11/Xutil.h:56: warning: ignoring #pragma ident In file included from ../pango/pangoxft.h:30, from pangoxft-private.h:25, from pangoxft-font.c:27: ../pango/pangoxft-render.h:90: error: expected declaration specifiers or '...' before 'XTrapezoid' make[4]: *** [pangoxft-font.lo] Error 1 make[4]: Leaving directory `/export/home2/hoge/pango/pango-1.15.0/pango' make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory `/export/home2/hoge/pango/pango-1.15.0/pango' make[2]: *** [all] Error 2 make[2]: Leaving directory `/export/home2/hoge/pango/pango-1.15.0/pango' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/export/home2/hoge/hoge/pango-1.15.0' make: *** [all] Error 2
pango/pangoxft-render.hの90行目あたりではこんな関数の定義があります。
/*< public >*/ void (*composite_trapezoids) (PangoXftRenderer *xftrenderer, PangoRenderPart part, XTrapezoid *trapezoids, int n_trapezoids);
この3つめの引数の型であるXTrapezoidが定義されていませんっていうエラー。
Linux環境(Redhat)なんかだと/usr/X11R6/include/X11/extensions/Xrender.hにこう定義があります。
typedef struct _XTrapezoid { XFixed top, bottom; XLineFixed left, right; } XTrapezoid;
でもSolarisにデフォルトで入っているX環境にはそんな定義がないので、XFree86をインストールする必要があるみたい。
ソースを入手
ソースはftp://ftp.xfree86.org/pub/XFree86/4.6.0/source/から手に入ります。以下のすべてをダウンロードして展開。
- XFree86-4.6.0-src-1.tgz
- XFree86-4.6.0-src-2.tgz
- XFree86-4.6.0-src-3.tgz
- XFree86-4.6.0-src-4.tgz
- XFree86-4.6.0-src-5.tgz
- XFree86-4.6.0-src-6.tgz
- XFree86-4.6.0-src-7.tgz
全部展開します。展開するとxcというディレクトリができます。
開発環境の準備
ビルドのために、シャドウディレクトリのシンボリックリンクをつくります。LinuxだとXの環境にlndirってコマンドがありますが、Solarisにはそんなのありません。親切なことにコマンドが作れるようになっています。xc/config/util以下にあります。
$ cd xc/config/util $ CC=/usr/local/bin/gcc ; make -f Makefile.ini lndir ln -s ../../include X11 gcc -o lndir -O -I. lndir.c rm -f X11 $ cd ../../build $ ../config/util/lndir ../../xc
README.Solarisを読む
ビルド時の注意事項がいくつか書いてあります。
- GCCでもProWorksでも大丈夫。
- GCCは最低でも2.7.2以上がお勧め。初期のGCCだと動かないことがあるよ。
- SPARCプラットフォームの場合は、GCCは32bitバイナリで生成されていること。
- "sun"ってpredefineのGCCを使ってること。必要な場合は/usr/local/lib/gcc-lib/*/*/specsの*predefines:の行を編集する。
- SPARCプラットフォームの場合、xc/config/cf/hosts.defのBuildXFree86OnSparcSunOSをYESに設定する必要がある。そうしないと、XSun*サーバの古い劣化したものしか作れない。
- GCCでコンパイルされてたスレッド化されたXlibは若干問題がある。98%は正常に動作するけれども、クライアントが時々へんな感じでハングする。有名どころでは、xv-3.10みたいなイメージビューアでこのような問題がおきる。
- GCCを使う場合、xc/config/cf/hosts.defのThreadedXをNOに設定することがお勧め。ProWorksでは設定しなくても問題ない。
- GCCでXFree86をビルドする場合、gccに加えてGNU binutilsに入っているc++filtが追加で必要。gasとGNU binutilにあるldはインストールしないこと。両方ともSunのオリジナルを使うこと。/opt/SUNWspro/binディレクトリをつくって、cc,CC,c++flitというシンボリックリンクをそれぞれgcc,g++,c++flitからシンボリックリンクを張ってもいいかもしれない。
- ProWorksをXFree86のコンパイルに使う場合は、ProWorksツールへのPATHを適当に通してあげること。通常は/opt/SUNWspro/binにあります。
- 必ずPATHの先頭に/usr/ccs/binを持ってくること。ここにあるユーティリティがGNUのものに置き換わることで発生する問題があります。なので、/usr/ccs/binにあるユーティリティが他の場所よりも優先させなければなりません。(有名なところではGNUのarではビルドできません。)
これに従って、xc/conig/cf/hosts.defを作って、2行追加。
$ cd build/config/cf $ cp xf86site.def hosts.def
以下の2行を追加。
#define BuildXFree86OnSparcSunOS YES #define ThreadedX NO
いよいよmake
buildディレクトリでmakeします。
$ cd build
$ CC=/usr/local/bin/gcc make World > World.log 2>&1
時間はかかったけど以外にスムーズにコンパイルできちゃった。
インストール
rootにsuしてインストール。
$ su - root # cd ~hoge/XFree86/xc/build # /usr/local/bin/make install # /usr/local/bin/male install.man
/usr/X11R6以下にインストールされます。もっと苦労するかとおもったけど、すんなりビルドできました。