[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: Re: %if
- From: "Jeff Johnson" <n3npq jbj gmail com>
- To: "RPM Package Manager" <rpm-list redhat com>
- Subject: Re: Re: %if
- Date: Mon, 18 Dec 2006 00:28:41 -0500
On 12/17/06, Frank Cusack <fcusack fcusack com> wrote:
Please quote any URL, page#, or spec file where you see '%ifdef' used or
documented. You're probably trying to use a SuSE-specific macro on a
non-SuSE system.
Just for historical accuracy, here's a reference to %ifdef in
/usr/lib/rpm/macros:
#==============================================================================
# Conditional build stuff.
# Check if symbol is defined.
# Example usage: %if %{defined with_foo} && %{undefined with_bar} ...
%defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}}
%undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}}
# Shorthand for %{defined with_...}
%with() %{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}}
%without() %{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}}
# 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.
#
# For example (spec file):
#
# (at the beginning)
# %bcond_with extra_fonts
# %bcond_without static
# (and later)
# %if %{with extra_fonts}
# ...
# %else
# ...
# %endif
# %if ! %{with static}
# ...
# %endif
# %ifdef %{with static}
# ...
# %endif
# %{?with_static: ... }
# %{!?with_static: ... }
# %{?with_extra_fonts: ... }
# %{!?with_extra_fonts: ... }
#
# The bottom line: never use without_foo, _with_foo nor _without_foo, only
# with_foo. This way changing default set of bconds for given spec is just
# a matter of changing single line in it and syntax is more readable.
%bcond_with() %{expand:%%{?_with_%{1}:%%global with_%{1} 1}}
%bcond_without() %{expand:%%{!?_without_%{1}:%%global with_%{1} 1}}
The issue of whether to add %ifdef was discussed at the time build conditionals
were added to rpm (PLD invented the concept).
It would be possible to create a %ifdef rather easily, but there are other, and
much harder problems to solve, because %if is not a macro, but rather a section
marker, that is parsed and handled entirely differently than macros.
Adding a %ifdef construct would only complicate matters because of two
different parsers imho.
The still harder problem is that
Prefix:
parsing is going to add a definition for
%prefix
which is going to be pushed on top of whatever %prefix is configured or
passed from the CLI.
Personally, I solve the whole problem of unifying %prefix and %_prefix
values by doing
Prefix: /usr
%define _prefix %{prefix}
on a per-specfile basis, which achieves the same end goal of unifying
%prefix and %_prefix values without the fuss and muss of testing for
values and existence.
73 de Jeff
- Follow-Ups:
- Re: %if
- From: Marcus Habermehl (BMH1980)
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]