From owner-freebsd-ports@FreeBSD.ORG Sun Feb 5 17:08:36 2012 Return-Path: Delivered-To: ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 63C2E106566B for ; Sun, 5 Feb 2012 17:08:36 +0000 (UTC) (envelope-from utisoft@gmail.com) Received: from mail-iy0-f182.google.com (mail-iy0-f182.google.com [209.85.210.182]) by mx1.freebsd.org (Postfix) with ESMTP id 2E2148FC15 for ; Sun, 5 Feb 2012 17:08:35 +0000 (UTC) Received: by iaeo4 with SMTP id o4so11135960iae.13 for ; Sun, 05 Feb 2012 09:08:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type :content-transfer-encoding; bh=vxTaxwCzhWI8OxJeeVMs6CXkCVVm+H51YI8hkUwSHwY=; b=FhAe/EmrrvuajxvRvdJ8OJQkXn3cp/adS2ph7d9lI8evcW+zrMwCk935JWUiR1iVM7 hmKUBpHevUL9AflJHpHRK2fXpmhk/w6LcpUaPF+ap3DlTUk+sM3O3h2hOsL+2DmPdfGR WriYCe9BU4gllWg9hL+OiIjB6jaLTgxcIdaWs= Received: by 10.50.6.227 with SMTP id e3mr6852654iga.20.1328461715263; Sun, 05 Feb 2012 09:08:35 -0800 (PST) MIME-Version: 1.0 Sender: utisoft@gmail.com Received: by 10.231.183.21 with HTTP; Sun, 5 Feb 2012 09:08:05 -0800 (PST) In-Reply-To: References: From: Chris Rees Date: Sun, 5 Feb 2012 17:08:05 +0000 X-Google-Sender-Auth: uLcob2HAN7e5myXd0WT8nJoU_5M Message-ID: To: =?UTF-8?Q?Ry=C5=8DTa_SimaMoto?= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: ports@freebsd.org Subject: Re: Any common policy against conflicting choice in Makefile OPTIONS? X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Feb 2012 17:08:36 -0000 On 5 February 2012 16:19, Ry=C5=8DTa 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 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 > 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 .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