wiki:docs/making-rpm/setup-macro

Version 1 (modified by yasumichi, 8 years ago) (diff)

--

Vine Linux ドキュメント / RPM パッケージの作成方法 / %setupマクロの詳細

%setupマクロの詳細

hoge-1.1.tar.gzを展開したときに、hoge-1.1/というディレクトリができるなら、 オプションをつけなくても以上の作業が行われますが、例えば、 hoge/というディレクトリができるなら、このディレクトリの下にcdできるように、

%setup -n hoge

または、

%setup -n ${RPM_PACKAGE_NAME}

と指定します。

複数のソースがあるときには以下に述べるオプション -a や -b を使います。 例えば Source、Source1、Source2 の 3 つがあるときには、

%setup -a 1 -a 2 -n hoge

などとします。(以下のオプションの指定参照。)

この%setupにはさまざまなオプションがありますが、 代表的なものを以下に示します。

-n <ディレクトリ名>
%setupを実行した後(もしくは前)にcdするディレクトリ名(name)を指定する。 このオプションを省略したときの、デフォルトのディレクトリ名は、 ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}。
-c
指定ディレクトリ(上の-nオプションで指定したディレクトリ) を作成し(create)、そこにcdした後にソースの展開をします。
-a <#>
Source0を展開した後、 指定ディレクトリ(上と同じ)にcdした(after)、 #番目のソース(Source#)の展開をします。 %setup -a 2 -a 3 と複数-aオプションが指定された時には、 Source0 が展開された後、指定ディレクトリに cd し、 Source2、Source3を展開します。 (Source0の展開は最初の一回だけです。)
-b <#>
Source0を展開した後、 指定ディレクトリ(上と同じ)にcdする前に(before)、 #番目に指定されてるソース(Source#)の展開をします。
-D
先に述べたように、%setupは、まず、指定ディレクトリ(上と同じ)が、 ディレクトリBUILDの下にあるかどうかをチェックして、もし存在していたら、 それを削除してから、ソースの展開などの作業を行います。 %setupを複数回呼びたい場合、 2回目に%setupを呼んだ時に最初の%setupで展開したディレクトリを削除されては困ります。 この-Dオプションは、このような削除を行わないようにします。(あまり使いません)
-T
ソースの展開を行いません。先に述べたように、 オプション指定を -a 2 や -b 2 とすると、 Source0とSource2で指定したものが展開されます。 Source2だけを展開したいときには、このオプションを使って、
%setup -T -a 2
とします。また、
%setup -T -c hoge
とすると、パッケージの展開は行わず、ディレクトリhogeを作って、 そこにcdします。
-q
ソースの展開のとき、展開中の情報を表示しません。 たとえば tar での展開の時に、-q 無しだと tar xvvf、-q 有りだと tar xf のように変わります。

次のように tar.gz ではないファイルが Source0 となる場合があります。

Source0: hoge-%{version}.lzh

tar.gz ではないので、%setup では展開できません。

このような場合には、まず %setup の -Tオプション を利用して作業ディレクトリに移動します。 %setup のあとには、bash スクリプトを書いて作業を行うことができるので、 通常のコマンドで Source0 のファイルを展開します。

%setup -T hoge-%{version}
lha x %{SOURCE0}

次のように tar.gz などでは無いファイルが Source2 としてあるということがあります。

Source0: hoge-%{version}.tar.gz
Source1: hoge-additional-%{version}.tar.gz
Source2: how-to-use-hoge.txt

こういった場合には、Source0 と Source1 を %setup で展開したあとで、installコマンドなどで、Source2 に対応するマクロ %{SOURCE2} を処理します。

%setup で展開するのと同じ処理をしたければ、

%setup -q -a 1
%{__install} -m 644 %{SOURCE2} .

のようにします。

%setup で Source0 を展開してできたディレクトリ BUILD/hoge-%version/ に移動しているので、installコマンド で . (カレントディレクトリ1) を指定すると . は BUILD/hoge-%version/ となっているので、BUILD/hoge-%version/に Source2 が install されます。

他のファイルと同じように BUILD/hoge-%version/ にあるので %doc として指定するのもそのままできます。

%files
%doc how-to-use-hoge.txt

%{SOURCE2} といったマクロは %doc のところでは使えないので、%doc %{SOURCE2} とすることはできません。

lha や unzip など、特別なコマンドが必要になる場合は、 BuildRequires(prep): で指定します。