- add --with/--without popt glue for conditional builds(Tomasz Kloczko).
authorjbj <devnull@localhost>
Fri, 16 Mar 2001 20:23:49 +0000 (20:23 +0000)
committerjbj <devnull@localhost>
Fri, 16 Mar 2001 20:23:49 +0000 (20:23 +0000)
CVS patchset: 4639
CVS date: 2001/03/16 20:23:49

CHANGES
Doxyfile.in
doc/manual/conditionalbuilds [new file with mode: 0644]
rpmpopt.in

diff --git a/CHANGES b/CHANGES
index 4f561ba..30295fd 100644 (file)
--- a/CHANGES
+++ b/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.
index 17555e5..68b68dd 100644 (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 \
diff --git a/doc/manual/conditionalbuilds b/doc/manual/conditionalbuilds
new file mode 100644 (file)
index 0000000..95039db
--- /dev/null
@@ -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
+
+*/
index 6558745..f42308b 100644 (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 !#:+'