%bcond_with is backwards?

Adam Williamson awilliam at redhat.com
Thu Dec 8 20:14:05 UTC 2011


On Thu, 2011-12-08 at 20:06 +0000, Richard W.M. Jones wrote:
> On Thu, Dec 08, 2011 at 07:01:45PM +0000, Paul Howarth wrote:
> > On Thu, 8 Dec 2011 18:58:29 +0000
> > "Richard W.M. Jones" <rjones at redhat.com> wrote:
> > 
> > > On Thu, Dec 08, 2011 at 07:31:58PM +0100, Till Maas wrote:
> > > > On Thu, Dec 08, 2011 at 06:10:17PM +0000, Richard W.M. Jones wrote:
> > > > 
> > > > > # conditionalize Ocaml support
> > > > > %ifarch sparc64 s390 s390x
> > > > > %bcond_with ocaml
> > > > > %else
> > > > > %bcond_without ocaml
> > > > > %endif
> > > > > 
> > > > > #...
> > > > > 
> > > > > %if %{with ocaml}
> > > > > BuildRequires:  ocaml
> > > > > BuildRequires:  ocaml-findlib-devel
> > > > > %endif
> > > > > 
> > > > > This code correctly disables OCaml support on architectures where
> > > > > we don't bother to compile OCaml (sparc64 s390 s390x).  But the
> > > > > conditional code looks backwards to me.  Does this make sense to
> > > > > anyone?
> > > > 
> > > > It makes sense when you read "%bcond_with ocaml" as 'add a
> > > > "--with-ocaml" build condition flag' to the spec.
> > > 
> > > It does?  Still seems backwards to me.  OCaml is disabled on the
> > > listed architectures, so that'd be --without-ocaml wouldn't it?
> > 
> > Having a build *option* for "--with ocaml" implies that the default
> > (which is what you get when you build the package in koji) is "without"
> > ocaml.
> 
> I'm sure you're right, but I still genuinely don't understand your
> explanation :-(
> 
> Just to be clear, I'm talking about the %ifarch part above:
> 
>   %ifarch sparc64 s390 s390x
>   %bcond_with ocaml
>   %else
>   %bcond_without ocaml
>   %endif
> 
> Why does that disable OCaml support on the architectures sparc64,
> s390, s390x?

As I understand Paul's explanation, bcond_with doesn't mean "build with
this option", it means "create an rpmbuild option which will enable
building with this option". i.e., "bcond_with ocaml" sets up an
parameter *for the .src.rpm itself* so that you could do "rpmbuild
--with-ocaml foobar.src.rpm" on the resultant .src.rpm to build it with
ocaml support. It does not mean that a *default* build of the .src.rpm
will be done with ocaml support.

That's how I understood the explanation, anyway.

Here's how it's explained in /usr/lib/rpm/macros:

# Handle conditional builds. %bcond_with is for case when feature is
# default off and needs to be activated with --with ... command line
# switch. %bcond_without is for the dual case.
#
# %bcond_with foo defines symbol with_foo if --with foo was specified on
# command line.
# %bcond_without foo defines symbol with_foo if --without foo was *not*
# specified on command line.
-- 
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Twitter: AdamW_Fedora | identi.ca: adamwfedora
http://www.happyassassin.net



More information about the devel mailing list