- 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:
parent
84705dbb76
commit
54704b3b83
1
CHANGES
1
CHANGES
|
@ -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.
|
||||
|
|
|
@ -301,6 +301,7 @@ INPUT = \
|
|||
./Doxyheader \
|
||||
./doc/manual/builddependencies \
|
||||
./doc/manual/buildroot \
|
||||
./doc/manual/conditionalbuilds \
|
||||
./doc/manual/dependencies \
|
||||
./doc/manual/format \
|
||||
./doc/manual/macros \
|
||||
|
|
|
@ -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
|
||||
|
||||
*/
|
11
rpmpopt.in
11
rpmpopt.in
|
@ -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 !#:+'
|
||||
|
|
Loading…
Reference in New Issue