diff options
author | jbj <devnull@localhost> | 2001-03-16 20:23:49 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 2001-03-16 20:23:49 +0000 |
commit | 54704b3b838fefd7547df94a6a9042e6ca84446a (patch) | |
tree | e399552c10270106b8809a5f056c9d45ef6e8275 | |
parent | 84705dbb7660d4b1ea4b8429d84b154d2a283093 (diff) | |
download | rpm-54704b3b838fefd7547df94a6a9042e6ca84446a.tar.gz rpm-54704b3b838fefd7547df94a6a9042e6ca84446a.tar.bz2 rpm-54704b3b838fefd7547df94a6a9042e6ca84446a.zip |
- add --with/--without popt glue for conditional builds(Tomasz Kloczko).
CVS patchset: 4639
CVS date: 2001/03/16 20:23:49
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | Doxyfile.in | 1 | ||||
-rw-r--r-- | doc/manual/conditionalbuilds | 88 | ||||
-rw-r--r-- | rpmpopt.in | 11 |
4 files changed, 101 insertions, 0 deletions
@@ -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. diff --git a/Doxyfile.in b/Doxyfile.in index 17555e52d..68b68ddd2 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -301,6 +301,7 @@ INPUT = \ ./Doxyheader \ ./doc/manual/builddependencies \ ./doc/manual/buildroot \ + ./doc/manual/conditionalbuilds \ ./doc/manual/dependencies \ ./doc/manual/format \ ./doc/manual/macros \ diff --git a/doc/manual/conditionalbuilds b/doc/manual/conditionalbuilds new file mode 100644 index 000000000..95039db17 --- /dev/null +++ b/doc/manual/conditionalbuilds @@ -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 + +*/ diff --git a/rpmpopt.in b/rpmpopt.in index 6558745b7..f42308b7a 100644 --- a/rpmpopt.in +++ b/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 !#:+' |