Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Feb 2012 17:08:05 +0000
From:      Chris Rees <crees@freebsd.org>
To:        =?UTF-8?Q?Ry=C5=8DTa_SimaMoto?= <liangtai.s4@gmail.com>
Cc:        ports@freebsd.org
Subject:   Re: Any common policy against conflicting choice in Makefile OPTIONS?
Message-ID:  <CADLo83-8ET2eQFgScrVXDvNbp0Z3d%2BmWeQaPWZ4HNEj27y4fEg@mail.gmail.com>
In-Reply-To: <CABDoUfBgkK9ezhwSe-v_NUXfG0DRaJs1HwMqit7MyeUUgTERdg@mail.gmail.com>
References:  <CABDoUfBgkK9ezhwSe-v_NUXfG0DRaJs1HwMqit7MyeUUgTERdg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5 February 2012 16:19, Ry=C5=8DTa SimaMoto <liangtai.s4@gmail.com> wrote=
:
> Hi, I'm a port maintainer for multimedia/qmmp, and some ports.
> Before upgrading QMMP port, may I ask what is the common policy how to
> offer Makefile OPTIONS containing a certain contradictory pair?
>
> Actually the latest version of QMMP supports several versions of ffmpeg,
> including 0.7.11, 0.9, 0.9.1, and 2012.01.22 that I tested to verify, so =
it
> allows user to choose one of multimedia/ffmpeg or multimedia/ffmpeg-devel=
.
> As you know you should not select both of them, otherwise they may confli=
ct
> with each other. =C2=A0I plan to provide an entry for each of them.
> =C2=A0| ....
> =C2=A0| [*] FFMPEG =C2=A0 =C2=A0 =C2=A0 =C2=A0Support to playback by FFMP=
EG
> =C2=A0| [ ] FFMPEG_DEVEL =C2=A0Support to playback by FFMPEG-devel
> =C2=A0| ....
> Then how should the Makefile proceed after the user's choice?
>
> When the user did not install any of them yet, it's easy: The installatio=
n
> would obey the user's order except when occationally both of them are
> enabled that results to fail with an alert message. =C2=A0On the other ha=
nd, if
> one of them are already installed, Makefile would know which one is
> installed using 'exists(${LOCALBASE}/include/libavcodec/vda.h)' command.
> So, in fact, there is no question that which version the user want to use=
.
>
> The smartest way would be that provides a single entry which corresponds
> to the existing version and hides the other entry that should not be
> choosen. =C2=A0Unfortunately, the value LOCALBASE is not defined until
> <bsd.port.options.mk> macro is loaded, that means we don't have any prope=
r
> steps to determine what version is already installed when the Makefile
> construct the OPTIONS set. =C2=A0So we have no other way than to let the =
option
> dialog always show both entries including quite wrong option.
>
> Then if the user selects the other one that might conflict with the
> installed version, there are six possible courses I assume.
> =C2=A00x000. =C2=A0Quit the session with alert message instructing user t=
o retry
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 'make config' to choose the already installed=
 one that Makefile
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 knows.
> =C2=A00x001. =C2=A0Dare to go through and expect that the depending port =
deals with
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 the conflicting issue.
> =C2=A00x002. =C2=A0Use the installed version and omit the choice implicit=
ly.
> =C2=A00x004. =C2=A0Warn with short pause, then use the installed version =
and omit
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 the choice.
> =C2=A00x010. =C2=A0Store options into /var/db/ports/* as are that the use=
r selects.
> =C2=A00x020. =C2=A0Store options into /var/db/ports/* with correction as =
actually
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 working. =C2=A0(If option variables are allow=
ed to be changed at
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 testing stage.)
>
> Is there any recommended policy? =C2=A0If so, what way or a set of ways s=
hould I
> choose?

Why not just have an option for FFMPEG?

That way, the port can just use whichever version is installed.

Voila:

OPTIONS=3D  FFMPEG "Support playback by FFMPEG" on

.include <bsd.port.options.mk>

.if defined(WITH_FFMPEG)
RUN_DEPENDS+=3D ffmpeg:${PORTSDIR}/multimedia/ffmpeg
.endif

The code snippet above will sort dependencies out itself, but choose
ffmpeg by default.

Chris



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLo83-8ET2eQFgScrVXDvNbp0Z3d%2BmWeQaPWZ4HNEj27y4fEg>