- add --with/--without popt glue for conditional builds(Tomasz Kloczko).

CVS patchset: 4639
CVS date: 2001/03/16 20:23:49
This commit is contained in:
jbj 2001-03-16 20:23:49 +00:00
parent 84705dbb76
commit 54704b3b83
4 changed files with 101 additions and 0 deletions

View File

@ -12,6 +12,7 @@
- add cpuid asm voodoo to detect athlon processors.
- add %exclude support (i.e. "everything but") to %files.
(Michael (Micksa) Slade" <micksa@knobbits.org>)
- add --with/--without popt glue for conditional builds(Tomasz Kloczko).
4.0 -> 4.0.[12]
- add doxygen and lclint annotations most everywhere.

View File

@ -301,6 +301,7 @@ INPUT = \
./Doxyheader \
./doc/manual/builddependencies \
./doc/manual/buildroot \
./doc/manual/conditionalbuilds \
./doc/manual/dependencies \
./doc/manual/format \
./doc/manual/macros \

View File

@ -0,0 +1,88 @@
/*! \page conditionalbulds Passing conditional parameters into a rpm build
Source code is often built with optional features enabled or disabled.
When source code is packaged using rpm, the various features can be
chosen, added to a spec file, and a package will be produced with
binaries compiled with that feature set. This mechanism works fine
for packages with small feature sets, but does not work so well
for large, complicated, packages like the Linux kernel and/or
the Pine mailer which have a large number of features, as a given
feature set may not "work" for everyone.
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:
\verbatim
--with <feature> Enable <feature>
--without <feature> Disable <feature>
\endverbatim
The new options are implemented using popt to add aliases to the existing rpm
options --define to specify macros from the command line. The magic necessary
to add the new options is (from the file /usr/lib/rpm/rpmpopt*)
\verbatim
rpmb alias --with --define "_with_!#:+ --with-!#:+"
rpmb alias --without --define "_without_!#:+ --without-!#:+"
\endverbatim
(Note: The obscure "!#:+" popt token above says "substitute the next command
line argument found here, and, additionally, mark the argument as used.")
For example, when rpm is invoked as
\verbatim
rpm ... --with ldap ...
\endverbatim
then the popt aliases will cause the options to be rewritten as
\verbatim
rpm ... --define "_with_ldap --with-ldap" ...
\endverbatim
which causes a "%_with_ldap" macro to be defined with value "--with-ldap"
during a build.
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
\verbatim
...
./configure \
%{?_with_ldap: %{_with_ldap}} \
...
\endverbatim
so that, if "--with ldap" was used as a build option, then confgure
will be invoked (after macro expansion) as
\verbatim
./configure --with-ldap ...
\endverbatim
(Note: The obscure "%{?_with_ldap: ...}" rpm macro syntax above says "if the
macro "_with_ldap" exists, then expand "...", else ignore.")
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:
\verbatim
# 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}}\
...
\endverbatim
*/

View File

@ -161,7 +161,18 @@ rpmb alias --ftpproxy --define '_ftpproxy !#:+'
rpmb alias --httpport --define '_httpport !#:+'
rpmb alias --httpproxy --define '_httpproxy !#:+'
rpmb alias --timecheck --define '_timecheck !#:+'
rpmb alias --with --define "_with_!#:+ --with-!#:+"
rpmb alias --without --define "_without_!#:+ --without-!#:+"
#==============================================================================
rpmbuild alias --dbpath --define '_dbpath !#:+'
rpmbuild alias --ftpport --define '_ftpport !#:+'
rpmbuild alias --ftpproxy --define '_ftpproxy !#:+'
rpmbuild alias --httpport --define '_httpport !#:+'
rpmbuild alias --httpproxy --define '_httpproxy !#:+'
rpmbuild alias --timecheck --define '_timecheck !#:+'
rpmbuild alias --with --define "_with_!#:+ --with-!#:+"
rpmbuild alias --without --define "_without_!#:+ --without-!#:+"
==============================================================================
rpmdb alias --dbpath --define '_dbpath !#:+'
rpmdb alias --ftpport --define '_ftpport !#:+'
rpmdb alias --ftpproxy --define '_ftpproxy !#:+'