10月も下旬となるとめっきり日が短くなり、
さて、
GNU Autotools
前回PlamoBuildスクリプトの例として紹介したXfce用のファイルマネジャーThunarは、
このconfigureスクリプトはGNUプロジェクトが開発したAutotoolsと呼ばれる開発システムの一部です。
GNUプロジェクトでは、
GNU Autotoolsは、
Autotoolsを採用したソフトウェアは、
かってはImakeという独自のビルドシステムを利用していたX Window Systemも、
CMake
上述のようにGNU AutotoolsはOSS界の標準ビルドツールの地位を占めていますが、
CMakeはGNU Autotoolsを参考にしながら設計された新世代のビルドシステムで、
CMakeはGNU Autotools同様、
CMakeはGNU Autotools同様、
1 #!/bin/sh
2 ##############################################################
3 url='ftp://ftp.kddlabs.co.jp/X/kde/stable/4.9.2/src/kdelibs-4.9.2.tar.xz'
4 pkgbase=kdelibs
5 vers=4.9.2
6 arch=x86_64
7 # arch=i586
8 build=P1
9 src=kdelibs-4.9.2
10 OPT_CONFIG=' -DDOCBOOKXML_CURRENTDTD_DIR:PATH=/usr/share/xml/docbook/schema/4.2/dtd '
11 DOCS='AUTHORS COPYING COPYING.DOC COPYING.LIB INSTALL README README-WIN32.TXT TODO knewstuff licenses'
12 patchfiles=''
13 compress=txz
14 ##############################################################
前回紹介したThunar-1.
一方、
128 if [ $opt_config -eq 1 ] ; then
129 for i in `seq 0 $((${#B[@]} - 1))` ; do
130 if [ -d ${B[$i]} ] ; then rm -rf ${B[$i]} ; fi ; mkdir -p ${B[$i]}
131 done
132 ######################################################################
133 # * ./configure を行う前に適用したい設定やパッチなどがある場合はここに
134 # 記述します。
135 ######################################################################
136 for i in `seq 0 $((${#S[@]} - 1))` ; do
137 cd $S
138 for patch in $patchfiles ; do
139 if [ ! -f ".$patch" ]; then
140 patch -p1 141 touch ".$patch"
142 fi
143 done
144
145 cd $B
146 if [ -f $S/CMakeLists.txt ]; then
147 export PKG_CONFIG_PATH=/opt/kde/${libdir}/pkgconfig:/usr/${libdir}/pkgconfig:/usr/share/pkgconfig
148 export LDFLAGS='-Wl,--as-needed'
149 export CC="gcc -isystem /usr/include $target"
150 export CXX="g++ -isystem /usr/include $target"
151 cmake -DCMAKE_INSTALL_PREFIX:PATH=/opt/kde -DLIB_INSTALL_DIR:PATH=/opt/kde/${libdir} -DLIB_SUFFIX=$suffix ${OPT_CONFIG} $S
152 fi
CMakeの場合、
cmakeコマンドには、
config時の処理は大きく異なるものの、
このように、
その他のビルドシステムを持つソフトウェア
最近では多くのソフトウェアがGNU AutotoolsやCMakeといったビルドシステムを採用していますが、
それらの代表例がPerlやPythonで開発されたソフトウェアです。PerlやPythonで書かれたソフトウェアの場合、
Perlの場合、
たとえば、
197 for i in `seq 0 $((${#B[@]} - 1))` ; do
198 cd ${B[$i]}
199 for patch in $patchfiles ; do
200 patch -p1 201 done
202 perl Makefile.PL
203
204 done
Pythonの場合はより徹底して、
そのため、
211 cd ${B[$i]}
212 if [ -f setup.py ] ; then
213 python ./setup.py build
214 fi
...
232 if [ -f setup.py ] ; then
233 python ./setup.py install --root $P
234 fi
一方、
240 cp -p configure.h configure.h.orig
241 sed -i -e '/^#define/s@bin/X11@bin@g' configure.h
242 if [ "$arch" = "x86_64" ]; then
243 sed -i -e '/^#define/s@lib@lib64@g' configure.h
244 fi
245
246 cp -p sample.steprc sample.steprc.orig
247 sed -i -e '/^ModulePath/s@:.*@@g' -e '/^PixmapPath/s@$@:/usr/share/afterstep/icons@g' -e '/^ModulePath/!s@lib/X11@share@g' sample.steprc
248 if [ "$arch" = "x86_64" ]; then
249 sed -i -e '/^ModulePath/s@lib@lib64@g' sample.steprc
250 fi
...
272 cd ${B[0]}
273 xmkmf -a
274 for i in afterstep modules/{Audio,Auto,Wharf,Banner,Pager,asclock,Animate} ; do
275 cp -p $i/Makefile $i/Makefile.orig
276 sed '/MANPATH =/s@man@share/man@g' $i/Makefile.orig > $i/Makefile
277 done
AfterStepClassicでは、
このビルドスクリプトには、
開発元のX自体がGNU Autotoolsに移行してImakeシステムを放棄してしまったので、
ビルドスクリプト自動生成ツール
以上紹介してきたように、
そのような定型化したビルドスクリプトを作るためのメタ・
最近のmake_
このメタビルドスクリプトを使えば、
$ wget http://tukaani.org/xz/xz-5.0.4.tar.bz2 --2012-10-30 13:59:17-- http://tukaani.org/xz/xz-5.0.4.tar.bz2 tukaani.org (tukaani.org) をDNSに問いあわせています... 84.34.147.45 .. 2012-10-30 13:59:22 (253 KB/s) - `xz-5.0.4.tar.bz2' へ保存完了 [1048328/1048328]
$ /mnt/Srcs/make_PlamoBuild.py -u http://tukaani.org/xz/xz-5.0.4.tar.bz2 xz-5.0.4.tar.bz2 dirname = xz-5.0.4 making PlamoBuild.xz-5.0.4 ...
$ ./PlamoBuild.xz-5.0.4 XZ Utils 5.0.4 System type: checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu ... config.status: creating po/Makefile make all-recursive make[1]: ディレクトリ `/mnt2/Srcs/X/Xz/build' に入ります Making all in src ... make[1]: ディレクトリ `/mnt2/Srcs/X/Xz/build' から出ます Do you want to package as root? [y/N] Making install in src ... ./usr/share/man/man1/lzfgrep.1.gz ./usr/share/man/man1/lzmore.1.gz ./usr/share/man/man1/lzless.1.gz
$ tar tvf xz-5.0.4-x86_64-P1.txz drwxr-xr-x kojima/users 0 2012-10-30 14:00:17 usr/ drwxr-xr-x kojima/users 0 2012-10-30 14:00:16 usr/include/ drwxr-xr-x kojima/users 0 2012-10-30 14:00:16 usr/include/lzma/ ...
$ ./PlamoBuild.xz-5.0.4 package Do you want to package as root? [y/N] y パスワード: Making install in src ... ./usr/share/man/man1/lzmore.1.gz ./usr/share/man/man1/lzless.1.gz $ ls -l xz-5.0.4-x86_64-P1.txz -rw-r--r-- 1 kojima users 529,520 10月 30日 14:01 xz-5.0.4-x86_64-P1.txz
$ sudo updatepkg xz-5.0.4-x86_64-P1.txz パスワード: removing xz-5.0.3 Removing package xz... Removing files: --> Deleting symlink bin/lzma --> Deleting symlink bin/unlzma ... xz-5.0.4-x86_64-P1 のインストール中 PACKAGE DESCRIPTION: xz-5.0.4-x86_64-P1 のインストールスクリプトを実行中
$ xz --version xz (XZ Utils) 5.0.4 liblzma 5.0.4
これは余分な作業を省いた極端な例で、