RPM now has a supported mechanism to pass information from the rpm command line to enable/disable features during a build. Two options have been added to pass feature names from the rpm command line:
--with <feature> Enable <feature> --without <feature> Disable <feature>
rpmb alias --with --define "_with_!#:+ --with-!#:+" rpmb alias --without --define "_without_!#:+ --without-!#:+"
For example, when rpm is invoked as
rpm ... --with ldap ...
rpm ... --define "_with_ldap --with-ldap" ...
The macro defined on the rpm command line can be used to conditionalize portions of the spec file for the package. For example, let's say you are trying to build the pine package using "--with ldap" to enable the LDAP support in the pine mailer (i.e. configuring with "--with-ldap"). So the spec file should be written
... ./configure \ %{?_with_ldap: %{_with_ldap}} \ ...
./configure --with-ldap ...
The spec file should include a default value for the "_with_ldap" macro, and should support "--without ldap" as well. Here's a more complete example for pine:
# Default values are --without-ldap --with-ssl. # # Read: If neither macro exists, then add the default definition. %{!?_with_ldap: %{!?_without_ldap: %define _without_ldap --without-ldap}} %{!?_with_ssl: %{!?_without_ssl: %define _with_ssl --with-ssl}} ... # Add build dependencies for ssl and ldap features if enabled. # # Read: If feature is enabled, then add the build dependency. %{?_with_ssl: BuildRequires: openssl-devel}} %{?_with_ldap: BuildRequires: openldap-devel}} ... # Configure with desired features. # # Read: Add any defined feature values to the configure invocation. %configure \ %{?_with_ssl: %{_with_ssl}} \ %{?_without_ssl: %{_without_ssl}} \ %{?_with_ldap: %{_with_ldap}} \ %{?_without_ldap: %{_without_ldap}}\ ...