Date: Sun, 05 Feb 2012 18:21:41 +0100 From: Olli Hauer <ohauer@FreeBSD.org> To: =?UTF-8?B?UnnFjVRhIFNpbWFNb3Rv?= <liangtai.s4@gmail.com> Cc: ports@freebsd.org Subject: Re: Any common policy against conflicting choice in Makefile OPTIONS? Message-ID: <4F2EBAA5.2080004@FreeBSD.org> 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 2012-02-05 17:19, RyōTa SimaMoto 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? > > The following patch will do what you want, just polish the IGNORE messages. Hopefully the include files do not change with the next versions. --- Makefile.orig 2012-02-05 17:53:58.000000000 +0100 +++ Makefile 2012-02-05 18:16:00.000000000 +0100 @@ -35,6 +35,7 @@ FLAC "Support to playback FLAC files" on \ MUSEPACK "Support to playback MPC files" on \ FFMPEG "Support to playback FFMPEG files" on \ + FFMPEG_DEVEL "Support to playback FFMPEG-devel files" on \ MODPLUG "Support to playback MOD files" on \ WILDMIDI "Support to playback MIDI files" on \ GME "Support video game music files" on \ @@ -147,6 +148,10 @@ PLUGIN_OPTIONS_CMAKE+= -DUSE_GME:BOOL=FALSE .endif +.if defined(WITH_FFMPEG) && defined (WITH_FFMPEG_DEVEL) +IGNORE= coose only one FFMPEG option +.endif + .ifndef(WITHOUT_FFMPEG) PLIST_SUB+= FFMPEG="" LIB_DEPENDS+= avcodec.1:${PORTSDIR}/multimedia/ffmpeg @@ -458,6 +463,20 @@ CMAKE_OUTSOURCE=yes CFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib +.include <bsd.port.pre.mk> + +.if defined(WITH_FFMPEG) +. if exists(${LOCALBASE}/include/libavcodec/vda.h) +IGNORE= seems ffmpeg-devel is installed but OPTION is different +. endif +.endif + +.if defined(WITH_FFMPEG_DEVEL) +. if exists(${LOCALBASE}/include/ffmpeg/sha1.h) +IGNORE= seems ffmpeg is installed but OPTION is different +. endif +.endif + post-patch: ${REINPLACE_CMD} -e 's| -ldl| $${CMAKE_DL_LIBS}|' \ ${WRKSRC}/src/plugins/Effect/ladspa/CMakeLists.txt @@ -495,4 +514,4 @@ cd ${WRKDIR} ; ${SED} -i -e '/PLIST.doc/ r PLIST.doc' ${TMPPLIST} .endif -.include <bsd.port.mk> +.include <bsd.port.post.mk>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4F2EBAA5.2080004>