Changes between Initial Version and Version 1 of docs/making-rpm/env-and-macro


Ignore:
Timestamp:
2013/01/31 22:13:10 (11 years ago)
Author:
yasumichi
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • docs/making-rpm/env-and-macro

    v1 v1  
     1[wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / 環境変数とマクロの活用 
     2 
     3= 環境変数とマクロの活用 = 
     4 
     5== 環境変数 == 
     6 
     7スクリプト部の各タグからはじまる部分は、先にも述べた通り独立した bash スクリプトとして働くので、 その範囲内で、 
     8{{{ 
     9#!sh 
     10TEXMF="/usr/share/texmf" 
     11}}} 
     12と変数を定義して用いることができます。 
     13 
     14定義した変数は ${ } で囲んで 
     15{{{ 
     16#!sh 
     17${TEXMF} 
     18}}} 
     19のようにすると利用できます。 $TEXMF のように { } を省略することもできます。 
     20 
     21/usr/share というディレクトリは標準で %{_datadir} というマクロが定義されているので 
     22{{{ 
     23#!sh 
     24TEXMF="%{_datadir}/texmf" 
     25}}} 
     26とすることができます。 マクロについては、次節以降で説明します。 
     27 
     28また、以下の変数は各タグ毎に環境変数として定義されます。 
     29 
     30 RPM_SOURCE_DIR:: 
     31   ディレクトリ SOURCES のパスを表す。デフォルトは、 ~/rpm/SOURCE です。 
     32 RPM_BUILD_DIR:: 
     33   ディレクトリ BUILD を表す。デフォルトは、 ~/rpm/BUILD 
     34 RPM_DOC_DIR:: 
     35    %doc で指定されたドキュメントファイルをインストールするためのディレクトリを表す。 rpmrc ファイルの、defaultdocdir で指定する。デフォルトは、 /usr/share/doc です。 
     36 RPM_OPT_FLAGS:: 
     37   コンパイル時にコンパイラにわたすデフォルトのオプション指定を表す。 rpmrc ファイルの、optflags で指定する。 アーキテクチャ毎に指定ができる。 例えば、%build において以下のように使う。 
     38{{{ 
     39#!sh 
     40make CFLAGS=${RPM_OPT_FLAGS} 
     41}}} 
     42   デフォルトはarchitectureがi386のときには、 
     43{{{ 
     44#!sh 
     45RPM_OPT_FLAGS="-O2 -m486 -fno-strength-reduce" 
     46}}} 
     47   です。 
     48 RPM_ARCH_FLAGS:: 
     49    build を行なっているシステムのアーキテクチャを表す変数。アーキテクチャが i386 なら、 
     50{{{ 
     51#!sh 
     52RPM_ARCH_FLAGS="i386" 
     53}}} 
     54    です。 
     55 RPM_OS:: 
     56    build を行なっているシステムの OS をあらわす変数。Linuxなら、 
     57{{{ 
     58#!sh 
     59RPM_OS="Linux" 
     60}}} 
     61   です。 
     62 RPM_BUILD_ROOT:: 
     63    !BuildRoot タグで設定された仮想インストールのためのディレクトリを表す。 
     64 RPM_PACKAGE_NAME:: 
     65    Name タグで設定されたパッケージ名を表す。 
     66 RPM_PACKAGE_VERSION:: 
     67    Version タグで設定されたバージョン名を表す。 
     68 RPM_PACKAGE_RELEASE:: 
     69    Release タグで設定されたリリース番号を表す。 
     70 
     71== SPECファイル中のマクロ定義 == 
     72 
     73マクロは 
     74{{{ 
     75#!sh 
     76%define マクロの名前 内容 
     77}}} 
     78のように書くことで定義できます。 
     79 
     80{{{ 
     81#!sh 
     82%{マクロの名前} 
     83}}} 
     84のように書くことで利用できます。 {} を省略して %マクロの名前 と書くこともできますが、 {} をつけて利用したほうが、 [wiki:../make-spec#スクリプト部 スクリプト部]に出てきた %prep や %build などといったタグと区別しやすくなります。 
     85 
     86マクロは、%setup や %install などのスクリプト部やファイル定義部など、SPEC ファイル全体で使えるので、うまく使うとバージョンアップに追随して SPEC ファイルを修正するときに楽ができます。 
     87 
     88%define で定義せずに使えるマクロとして %{name} , %{version} , %{release} があります。[wiki:../make-spec#パッケージ情報の記述 パッケージ情報の記述]にでてきた、Name , Version , Release の値が、 それぞれ %{name} , %{version} , %{release} の内容になります。  
     89[[FootNote(%define name hoge として name を定義し Name: %{name} のように利用している SPEC ファイルを見かけることがありますが、 Name の値を参照するのが %{name} なので、本来とは逆の使い方になり問題を起こす場合があるかもしれません。このような場合は %define pkg_name hoge , Name: %{pkg_name} のように %{name} とは違う名前のマクロを利用したほうがよいでしょう。)]] 
     90 
     91[wiki:../make-spec SPEC ファイルの記述]のSPECファイルの例のデータ定義部は、 %{name} と %{version} というマクロを利用して、以下のように書くことができます。 Name: hoge なので %{name} は hoge に、Version: 1.1 なので %{version} は 1.1 になります。 
     92 
     93{{{ 
     94#!sh 
     95Name: hoge 
     96Version: 1.1 
     97Release: 1 
     98Source: %{name}-%{version}.tar.gz 
     99Patch: %{name}.patch 
     100}}} 
     101 
     102SPECファイルの中(どこでもいいです)に %dump と書いておくと、 rpmbuild コマンドでパッケージを作る時に、 すべてのマクロが標準エラー出力に出力され、確認することができます。 
     103 
     104マクロの定義を取り消したいけれど、行を削除するのではなくコメントとして残しておきたいという場合には、 %define に % をつけて、%%define にし、さらに # をつけます。 
     105 
     106{{{ 
     107#!sh 
     108%define hoge hige 
     109}}} 
     110 
     111{{{ 
     112#!sh 
     113# %%define hoge hige 
     114}}} 
     115のようにします。 
     116 
     117{{{ 
     118#!sh 
     119# %define hoge hige 
     120}}} 
     121ではだめです。 # 以降はコメントになるという処理よりも、マクロの %define の方が先に処理されるので、 %define hoge hige が解釈されてしまいます。 
     122 
     123== 標準で定義されているマクロ == 
     124 
     125よく利用されるコマンドやディレクトリなどにはあらかじめマクロが定義されています。 自分で定義した変数と同様に SPEC ファイル全体で使えます。 
     126 
     127標準で定義されているマクロは /usr/lib/rpm/macros に書かれています。 ユーザー毎のマクロを記述するファイルは ~/.rpmmacros です。 
     128 
     129~/.rpmmacros に書く場合には 
     130{{{ 
     131#!sh 
     132%マクロの名前 内容 
     133}}} 
     134とします。 [wiki:../directories パッケージ作成に必要なディレクトリの準備]で出てきた %_topdir などもマクロです。 
     135 
     136ユーザー毎のマクロと、標準で定義されているマクロをあわせたものは、 rpm コマンドの --showrc オプションで確認できます。 
     137 
     138{{{ 
     139#!sh 
     140$ rpm --showrc 
     141}}} 
     142 
     143また、それぞれのマクロがどんなものかは、 
     144{{{ 
     145#!sh 
     146$ rpm --eval "%{マクロ}" 
     147}}} 
     148のようにすると確認できます。 
     149 
     150標準で定義されているマクロについてはなるべく利用してください。 SPEC ファイルのメンテナンスしやすさの向上につながります。 
     151 
     152たとえば、%{configure} や %{makeinstall} といったマクロを利用することで、 %build や %install の部分を簡潔に書くことができる場合があります。 
     153 
     154{{{ 
     155#!sh 
     156%build 
     157%{configure} 
     158%{__make} 
     159 
     160%install 
     161%{makeinstall} 
     162}}} 
     163 
     164rpm コマンドの --evel オプションでマクロの値を確認することができます。  
     165 
     166{{{ 
     167#!sh 
     168$ rpm --eval "%{configure}" 
     169}}} 
     170 
     171rpm 4.x および Vine Linux で定義されているマクロを使うと[wiki:../make-spec SPEC ファイルの記述]の SPEC ファイルは次のようになります。 
     172 
     173{{{ 
     174#!sh 
     175#---------SPEC ファイルの例 (#から始まる行は、コメント行です)-------- 
     176 
     177# 基本情報 
     178Summary: hoge is a harehare horehore 
     179Summary(ja): hoge は harehare な horehore です。 
     180Name: hoge 
     181Version: 1.1 
     182Release: 1%{?_dist_release} 
     183License: GPL2 
     184Group: Local 
     185URL: http://www.fugahogo.com/hogehoge.html 
     186Vendor: Project Vine 
     187Distribution: Vine Linux 
     188Packager: yourid,otherid 
     189Packager: Jun Nishii <jun@vinelinux.org> 
     190 
     191# パッケージの作成時に必要となる情報 
     192Source: %{name}-%{version}.tar.gz 
     193Patch: %{name}.patch.gz 
     194BuildRoot: %{_tmppath}/%{name}-%{version}-root 
     195 
     196# 依存情報 
     197Requires:       piyo 
     198BuildRequires:  piyo-devel 
     199 
     200# 詳しい解説 
     201%description 
     202Hoge is a harehare horehore and convenient for fugafuga. 
     203Enjoy! 
     204 
     205%description -l ja 
     206hoge は harehare な horehore で、fugafuga するときなどとても便利なツー 
     207ルです。みんなでなかよく使いましょう。 
     208 
     209# スクリプト部 
     210%prep       #rpmを構築する前の準備です。 
     211%{__rm} -rf $RPM_BUILD_ROOT 
     212 
     213%setup      #ソースをBUILDに展開します。 
     214%patch -p1  #パッチをあてます。 
     215 
     216%build      #makeのための手順を書きます。 
     217%{__make} 
     218(cd man; %{__make} man) 
     219 
     220%install    #installのための手順を書きます。 
     221%{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install 
     222(cd man; %{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install.man) 
     223 
     224%clean      #rpmを作ったあとの後始末です。 
     225%{__rm} -rf $RPM_BUILD_ROOT 
     226 
     227# ファイルリスト部 
     228%files 
     229%defattr(-,root,root) 
     230%doc README 
     231%doc docs/  
     232%{_bindir}/hoge.bin 
     233%{_libdir}/hoge/ 
     234%{_mandir}/man1/hoge.1.gz 
     235%dir %{_libdir}/hoge/ 
     236%config %{_libdir}/hoge/fuga.conf 
     237 
     238# 更新履歴 
     239%changelog 
     240* Tue Feb 16 1999 Jun Nishii <jun@vinelinux.org> 1.1-2 
     241- added Japanese messages 
     242 
     243* Mon Feb 15 1999 Jun Nishii <jun@vinelinux.org> 1.1-1 
     244- first release for version 1.1 
     245 
     246#---------SPECファイルの例はここまで----------------------------------------- 
     247}}} 
     248 
     249[[FootNote]]