6

Postgres9.1rpmがCentOS/RHEL 6でどのように構築されているかを理解しようとしているので、ソースrpmからのスペックファイルを調べています。

次の構文は何を意味しますか?具体的には、疑問符と感嘆符は?

%{!?test:%define test 1}
%{!?plpython:%define plpython 1}
%{!?pltcl:%define pltcl 1}
%{!?plperl:%define plperl 1}
%{!?ssl:%define ssl 1}
%{!?intdatetimes:%define intdatetimes 1}
%{!?kerberos:%define kerberos 1}
%{!?nls:%define nls 1}
%{!?xml:%define xml 1}
%{!?pam:%define pam 1}
%{!?disablepgfts:%define disablepgfts 0}
%{!?runselftest:%define runselftest 0}
%{!?uuid:%define uuid 1}
%{!?ldap:%define ldap 1

でマクロ変数を定義できることを理解しています%define <name>[(opts)] <value>。感嘆符は論理否定演算子であると思います。しかし、疑問符や上記のような例に関する情報は見つかりません。マクロ変数を定義する前のある種のテストのようです。

これがスペックファイルの貼り付けです。

4

1 に答える 1

11

ここで1つのアイテムを確認しましょう:

%{!?plpython:%define plpython 1}

102行目では、次のことも確認できます。

%if %plpython
BuildRequires:  python-devel
%endif

おっしゃるように、これはマクロであり、 Fedoraのドキュメントでも確認できます。ここで、Fedoraのドキュメントを検索すると、条件付きマクロが見つかります。これは次のように述べています。

特別な構文を使用して、マクロの存在をテストできます。次に例を示します。%{?macro_to_test:expression}この構文は、macro_to_testが存在する場合は式を展開するようにRPMに指示し、存在しない場合は無視します。主要な感嘆符!は、マクロが存在しないことをテストします。%{!? macro_to_test:expression}この例では、macro_to_testマクロが存在しない場合は、式を展開します。

plpythonマクロが存在しない場合は、Fedoraドキュメントが答えを提供しています。

%define plython 1

38行目を見ると、次のこともわかります。

# In this file you can find the default build package list macros.  These can be overridden by defining
# on the rpm command line:
# rpm --define 'packagename 1' .... to force the package to build.
# rpm --define 'packagename 0' .... to force the package NOT to build.
# The base package, the lib package, the devel package, and the server package always get built.

したがって、パッケージをビルドするときにマクロを定義しない場合(これはほとんどのユーザーが行うことだと思います)、buildrequiresが標準のPostgreSQLインストールのように見えるものに対して適切に構成されていることを確認します。

于 2013-01-17T20:19:10.827 に答える