home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2010/08/23/RPM, specファイルの"%makeinstall"マクロのメモ

日記/2010/08/23/RPM, specファイルの"%makeinstall"マクロのメモ

日記 / 2010 / 08 / 23 / RPM, specファイルの"%makeinstall"マクロのメモ
id: 734 所有者: msakamoto-sf    作成日: 2010-08-23 17:18:33
カテゴリ: Linux 

久しぶりにRPMパッケージの作成について復習していて、install時には

%install
make install PREFIX=$RPM_BUILD_ROOT/usr 

か、もしも標準的なconfigureスクリプトによるMakefile生成を使っているなら

%install
%makeinstall

使うと良いですよ~、とあったので、試しに"--eval"で覗いてみた。

$ rpmbuild --eval '%makeinstall'
 /usr/bin/make \
       prefix=/usr \
       exec_prefix=/usr \
       bindir=/usr/bin \
       sbindir=/usr/sbin \
       sysconfdir=/etc \
       datadir=/usr/share \
       includedir=/usr/include \
       libdir=/usr/lib \
       libexecdir=/usr/libexec \
       localstatedir=/var \
       sharedstatedir=/usr/com \
       mandir=/usr/share/man \
       infodir=/usr/share/info \
 install
rpmbuild: ビルドのための spec ファイルが指定されていません。

・・・RPMBUILDが影も形も見えない。で、「あ、マクロだから、元の定義を見ないと駄目か」と気づいてあちこち探し回ると、rpmパッケージで

/usr/lib/rpm/macros

が提供されており、その中で定義されていた。

#------------------------------------------------------------------------------
# The make install analogue of %configure:
%makeinstall \
  make \\\
        prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\
        exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\
        bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\
        sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\
        sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\
        datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\
        includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\
        libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\
        libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\
        localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\
        sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\
        mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\
        infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\
  install

"buildroot"マクロや"_prefix"マクロを定義すれば上手く反映出来そうなことが分かった。
というわけで再度実験:

$ rpmbuild --define 'buildroot /foo' --define '_prefix /bar' --eval '%makeinstall'

  /usr/bin/make \
        prefix=/foo/bar \
        exec_prefix=/foo/bar \
        bindir=/foo/bar/bin \
        sbindir=/foo/bar/sbin \
        sysconfdir=/foo/etc \
        datadir=/foo/bar/share \
        includedir=/foo/bar/include \
        libdir=/foo/bar/lib \
        libexecdir=/foo/bar/libexec \
        localstatedir=/foo/var \
        sharedstatedir=/foo/bar/com \
        mandir=/foo/usr/share/man \
        infodir=/foo/usr/share/info \
  install
rpmbuild: ビルドのための spec ファイルが指定されていません。

恐らくRPM作成時に、コマンドラインオプションや他のmacroファイル読み込みにより内部的に"buildroot", "_prefix"マクロが定義された後に、'%makeinstall' マクロが展開されるのだろう。

以上、CentOS 5.3, RPM-4.4.2.3 でのお話でした。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-08-23 17:26:25
md5:9ca6088754636acb91aa7694ec993d13
sha1:b005911c4fffa184695c63ccfca2ddd715a40070
コメント
コメントを投稿するにはログインして下さい。