title: Question mark and exclamation point syntax in srpm spec file
body: <p>I'm trying to understand how the Postgres 9.1 rpms are built on CentOS/RHEL 6, so I'm taking a look at the spec file from the <a href="http://yum.postgresql.org/srpms/9.1/redhat/rhel-6-x86_64/" rel="noreferrer">source rpms</a>.  </p>
  
  <p>What does the following syntax do/mean? Specifically, the question mark and exclamation point?</p>
  
  <pre><code>%{!?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
  </code></pre>
  
  <p>I understand you can define a macro variable with <code>%define &lt;name&gt;[(opts)] &lt;value&gt;</code>, and I believe the exclamation mark is a logical negation operator.  I can't find any info on the question mark or examples like the above though.  Seems like some sort of test before defining the macro variable.</p>
  
  <p><a href="http://pastebin.com/NzUvw15X" rel="noreferrer">Here</a> is a paste of the spec file.</p>