Any common policy against conflicting choice in Makefile OPTIONS?

Chris Rees crees at freebsd.org
Sun Feb 5 17:08:36 UTC 2012


On 5 February 2012 16:19, RyōTa SimaMoto <liangtai.s4 at 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 conflict
> with each other.  I plan to provide an entry for each of them.
>  | ....
>  | [*] FFMPEG        Support to playback by FFMPEG
>  | [ ] FFMPEG_DEVEL  Support to playback by FFMPEG-devel
>  | ....
> 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 installation
> would obey the user's order except when occationally both of them are
> enabled that results to fail with an alert message.  On the other hand, 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.  Unfortunately, the value LOCALBASE is not defined until
> <bsd.port.options.mk> macro is loaded, that means we don't have any proper
> steps to determine what version is already installed when the Makefile
> construct the OPTIONS set.  So 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.
>  0x000.  Quit the session with alert message instructing user to retry
>         'make config' to choose the already installed one that Makefile
>         knows.
>  0x001.  Dare to go through and expect that the depending port deals with
>         the conflicting issue.
>  0x002.  Use the installed version and omit the choice implicitly.
>  0x004.  Warn with short pause, then use the installed version and omit
>         the choice.
>  0x010.  Store options into /var/db/ports/* as are that the user selects.
>  0x020.  Store options into /var/db/ports/* with correction as actually
>         working.  (If option variables are allowed to be changed at
>         testing stage.)
>
> Is there any recommended policy?  If so, what way or a set of ways should I
> choose?

Why not just have an option for FFMPEG?

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

Voila:

OPTIONS=  FFMPEG "Support playback by FFMPEG" on

.include <bsd.port.options.mk>

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

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

Chris


More information about the freebsd-ports mailing list