久しぶりに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 が提供されており、その中で定義されていた。 #pre||> #------------------------------------------------------------------------------ # 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"マクロを定義すれば上手く反映出来そうなことが分かった。 というわけで再度実験: #pre||> $ 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 でのお話でした。