前回までに、
これらのスクリプトを使えば大量のパッケージを効率よく作ることができます。しかし、
X11R7.5について
X11R7.
X Window Systemは、
そのような由来を持つため、
また、
その後、
上述のように、
X11R7.
元々のXのソースコードは、
しかし、
ビルドの準備
X Window Systemのソースコードはftp.ftp.
を利用しました)
前節で紹介したように、
$ mkdir X11R7.5 ; cd X11R7.5 $ for i in app data doc driver font lib proto util xserver ; do > mkdir $i > pushd $i > wget --retr-symlink ftp://ftp.kddlabs.co.jp/pub/X/ftp.x.org/pub/X11R7.5/src/$i/'*.tar.bz2' > popd > done
最近のXのソースコードは、
そのため、
X11R7.
5/ src/ everything/以下には、このリリースに含まれる全てのソースコードへのシンボリックリンクが含まれていますが、 後述するようにX Window Systemのビルドには順番が重要なので、 分類されたディレクトリを利用しています。
これらのソースコードに対して、
$ for i in app data doc driver font lib proto xserver ; do > pushd $i > for j in *.tar.bz2 ; do > ../make_PlamoBuild.py -t X $j > done > popd > done ~/X11R75/app ~/X11R75 dirname = bdftopcf-1.0.2 making PlamoBuild.bdftopcf-1.0.2 ... ...
このループもやっていることは簡単で、
なお、
current_dir = os.getcwd()
dir_name = os.path.basename(current_dir)
url = 'ftp://ftp.kddlabs.co.jp/pub/X/ftp.x.org/pub/X11R7.5/src/' + dir_name + '/' + filename + '-' + vers + '.tar.bz2'
header = make_headers(url, filename, vers, READMEs, patches)
メタビルドスクリプトはソースコードの展開処理も行うので、
$ ls -l app/ 合計 5,079,040 -rwxr-xr-x 1 kojima users 9,626 1月 3日 22:25 PlamoBuild.bdftopcf-1.0.2* -rwxr-xr-x 1 kojima users 9,623 1月 3日 22:25 PlamoBuild.iceauth-1.0.3* .... drwxr-xr-x 2 kojima users 4,096 1月 3日 21:56 bdftopcf-1.0.2/ -rw-r--r-- 1 kojima users 95,983 10月 27日 10:15 bdftopcf-1.0.2.tar.bz2 drwxr-xr-x 2 kojima users 4,096 1月 3日 22:22 iceauth-1.0.3/ -rw-r--r-- 1 kojima users 106,197 10月 27日 10:15 iceauth-1.0.3.tar.bz2 ...
ビルドスクリプトの先頭のurl行も正しく設定できているようです。
#!/bin/sh
##############################################################
url=ftp://ftp.kddlabs.co.jp/pub/X/ftp.x.org/pub/X11R7.5/src/app/bdftopcf-1.0.2.tar.bz2
pkgbase=bdftopcf
vers=1.0.2
arch=i586
build=P1
src=bdftopcf-1.0.2
OPT_CONFIG='--build=i586-pc-linux --disable-static'
DOCS='AUTHORS COPYING ChangeLog INSTALL NEWS README'
...
これでX11R7.
ビルド、ビルド、ビルド(その1)
あとは生成したPlamoBuildスクリプトを動かしてビルドしていけばいいのですが、
過去の経験からすると、
本来は、
#!/bin/sh
for i in PlamoBuild* ; do
echo "executing $i"
./$i
pkgbase=`grep "^pkgbase=" $i | cut -f2 -d"="`
vers=`grep "^vers=" $i | cut -f2 -d"="`
arch=`grep "^arch=" $i | cut -f2 -d"="`
build=`grep "^build=" $i | cut -f2 -d"="`
pkgname=$pkgbase'-'$vers'-'$arch'-'$build'.tgz'
echo "updating $pkgname"
updatepkg -f $pkgname
done
このスクリプトの処理も見ればわかるレベルでしょう。pkgnameを生成する部分がやや煩雑ですが、
まずはproto/から
それではproto/以下の26個のソースコードからビルド、
% cd proto % sudo ../build_pkgs.sh 2>&1 | tee -a build.log パスワード: ***** executing PlamoBuild.applewmproto-1.4.1 configure: WARNING: unrecognized options: --disable-static checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p .... pruning symlink in /home/kojima/X11R75/proto/work/usr/share/man/man9 pruning symlink in /home/kojima/X11R75/proto/work/usr/share/man/mann Making ../applewmproto-1.4.1-i586-P1.tgz... updating applewmproto-1.4.1-i586-P1.tgz Removing package applewmproto... Removing files: --> Deleting usr/X11R7/include/X11/extensions/applewmconst.h --> Deleting usr/X11R7/include/X11/extensions/applewmproto.h .... applewmproto-1.4.1-i586-P1 のインストール中 PACKAGE DESCRIPTION: executing PlamoBuild.bigreqsproto-1.1.0 configure: WARNING: unrecognized options: --disable-static ....
ログファイルを調べるとconfigure時にWARNINGメッセージが出ているようですが、
次はlib/に移って、
厳密に言うと、
ライブラリの間にもlibXtやlibXmuがより基盤部になるので先にビルドする必要があり、 その基盤の上でlibXawがビルドできる、 という順番がありますが、 今回はあらかじめX11R7. 4をインストールしたPlamo-4. 71環境上でビルドしたので、 ライブラリのビルド順はあまり気にせず、 ビルド処理を二度流せばいいか、 的な感覚でビルドしています。
% cd ../lib % sudo ../build_pkgs.sh 2>&1 | tee -a build.log パスワード: ***** executing PlamoBuild.libAppleWM-1.4.0 checking for a BSD-compatible install... /usr/bin/install -c ...
ビルドエラーへの対応
数時間かけて一度目のビルドとインストールは終了しましたが、
Making all in src
make[2]: ディレクトリ `/home/kojima/X11R75/lib/build/src' に入ります
CC libAppleWM_la-applewm.lo
applewm.c:37:36: error: X11/extensions/applewm.h: そのようなファイルやディレクトリはありません
applewm.c:43:34: error: HIServices/Processes.h: そのようなファイルやディレクトリはありません
applewm.c: In function 'wire_to_event':
applewm.c:86: error: 'XAppleWMNotifyEvent' undeclared (first use in this function)
applewm.c:86: error: (Each undeclared identifier is reported only once
I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd
warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
validity error : Could not load the external subset "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
Document /home/kojima/X11R75/lib/build/./doc/fontlib.xml does not validate
make[2]: *** [doc/fontlib.html] エラー 13
make[2]: *** 未完了のジョブを待っています....
make[2]: ディレクトリ `/home/kojima/X11R75/lib/build/sxpm' に入ります
CC sxpm.o
GEN sxpm.1
GEN sxpm.po
CCLD sxpm
/usr/X11R7/lib/libSM.so: undefined reference to `uuid_generate'
/usr/X11R7/lib/libSM.so: undefined reference to `uuid_unparse_lower'
collect2: ld returned 1 exit status
make[2]: *** [sxpm] エラー 1
エラーメッセージによると、
applewm.
libXfontののエラーは、
libXpmのエラーは、
このエラーは今までにも何度か経験したことがあって、
% sudo removepkg uuid パスワード: Removing package uuid... Removing files: ... % sudo updatepkg -f e2fsprogs-1.41.6-i586-P1.tgz Removing package e2fsprogs... ... e2fsprogs-1.41.6-i586-P1 のインストール中 ...
libuuidを入れ変えた上でPlamoBuild.
% ./PlamoBuild.libXpm-3.5.8 checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ... GEN sxpm.1 CCLD sxpm libtool: link: cannot find the library `/usr/lib/libuuid.la' or unhandled argument `/usr/lib/libuuid.la' make[2]: *** [sxpm] エラー 1 make[2]: ディレクトリ `/home/kojima/X11R75/lib/build/sxpm' から出ます
あれれ、
このla という拡張子を持つファイルはGNU libtoolsが参照する仮想ライブラリファイルです。このファイルは GNU libtools を使って共有ライブラリを作る際に作成され、
共有ライブラリにlaファイルを作るかどうかはソフトウェアの開発者に委ねられているので、
e2fsprogsの開発者はlaファイルを作らない、 という選択をしたのでしょう。本来、 仮想ライブラリであるlaファイルは、 共有ライブラリの機能を持たないOS環境でも、 機能を持つOS環境と同等の操作をするために取り入れられたものなので、 共有ライブラリの利用が前提となっているLinux環境では特に必要ないファイルとも言えます。
libuuid.
% grep libuuid /usr/X11/lib/lib*.la /usr/X11/lib/libSM.la:dependency_libs=' -L/usr/X11R7/lib /usr/X11R7/lib/libICE.la /usr/lib/libuuid.la' /usr/X11/lib/libXaw6.la:dependency_libs=' -L/usr/X11R7/lib /usr/X11R7/lib/libXmu.la -L/lib -luuid /usr/X11R7/lib/libXext.la /usr/X11R7/lib/libXt.la /usr/X11R7/lib/libX11.la /usr/X11R7/lib/libxcb.la /usr/X11R7/lib/libXau.la /usr/X11R7/lib/libXdmcp.la -ldl /usr/X11R7/lib/libSM.la /usr/lib/libuuid.la /usr/X11R7/lib/libICE.la' ......
とりあえず解決
これらの参照を解消するためには、
checking for XAW7... configure: error: Package requirements (xproto x11 xext xextproto xt xmu xpm) were not met: No package 'xpm' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
とエラーを出してビルドに失敗してしまいました。このエラーメッセージを見ると、
libXpmがlibXawに残っているlibuuid.
sxpmコマンドが不要なら、
xpm.
pcのような “xxx. pc” というファイルは、 freedesktop. orgが提唱しているpkgconfigという仕組み用のデータファイルで、 先に紹介したGNU libtoolsが作成する仮想ライブラリファイルと同様、 ソフトウェアのバージョンやインストールされた場所、 依存する外部ライブラリ等の情報を記録しています。仮想ライブラリファイル(la ファイル)が共有ライブラリの処理に限定されるのに対して、 pkgconfigの対象はライブラリ以外の一般コマンドにも拡大されており、 最近のソフトウェアの多くはpkgconfigを使って必要なコマンドやライブラリの有無をチェックするようになっています。
ビルドは続くよ…
ここまででX11R7.5のプロトコル部とライブラリ部までは完成したので、次はこれらのライブラリを参照するアプリケーションやXサーバのビルドです。app/ディレクトリ以下に集められている38個のアプリケーションは特に問題なくbuild_pkgs.shスクリプトで全てビルド、インストールできましたが、X Window Systemの中心的な役割を果たすxorg-serverのビルドでは、またトラブルに見舞われることになりました。ずいぶん長くなってしまったので、