Date: Mon, 28 Apr 2008 22:54:10 -0400 (EDT) From: Wesley Shields <wxs@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/123185: [PATCH]: Mk/bsd.port.mk - Add extended description to OPTIONS Message-ID: <20080429025410.D5D275C5D@syn.atarininja.org> Resent-Message-ID: <200804290300.m3T309e3035715@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 123185 >Category: ports >Synopsis: [PATCH]: Mk/bsd.port.mk - Add extended description to OPTIONS >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Apr 29 03:00:09 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Wesley Shields >Release: FreeBSD 7.0-RELEASE amd64 >Organization: >Environment: System: FreeBSD syn.csh.rit.edu 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Tue Mar 18 20:07:25 EDT 2008 root@syn.csh.rit.edu:/usr/obj/usr/src/sys/GENERIC amd64 >Description: Based upon a suggestion in [1] I have extended the OPTIONS framework to support a more detailed description of the options. I implemented it in two different ways: 1: Extended the OPTIONS from 3 fields to 4 and add a OPTIONS_DESC knob that _must_ be turned on when the port is using the 4th field. This is because it's impossible to tell between 3 options with the long field (12 fields total) or 4 options without the long field (also 12 options total). While I personally think this approach is a cleaner solution it does come with an "all-or-nothing" penalty. A port must support long descriptions for all of it's options or none at all. 2. Support the addition of OPTION_DESC_FOO for the long description. While this may not be as clean of a solution (in both the Makefile and in efficiency of processing - I have to spawn another make process) it does not have the "all-or-nothing" penalty like the other version. Personally, I can't decide which solution I like more so I'm sending them both in. Part of me likes the efficiency of the first solution while part of me likes the ability to pick and choose which ones get a long description in the second one. I'll leave the ultimate choice up to portmgr. :) If either option is chosen I will happily write up the necessary changes for the Porter's Handbook. If either option is interesting but needs more work I will also be happy to adjust as necessary. [1]: http://lists.freebsd.org/pipermail/freebsd-ports/2008-March/047656.html >How-To-Repeat: N/A >Fix: --- patch-options-desc.diff begins here --- Index: bsd.port.mk =================================================================== RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v retrieving revision 1.592 diff -u -u -r1.592 bsd.port.mk --- bsd.port.mk 14 Apr 2008 16:46:41 -0000 1.592 +++ bsd.port.mk 29 Apr 2008 02:17:14 -0000 @@ -1234,6 +1234,7 @@ .else UNIQUENAME?= ${PKGNAMEPREFIX}${PORTNAME} .endif +OPTIONSDESCFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options.descr OPTIONSFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options _OPTIONSFILE!= ${ECHO_CMD} "${OPTIONSFILE}" .if defined(OPTIONS) @@ -5783,6 +5784,7 @@ . ${_OPTIONSFILE}; \ fi; \ set -- ${OPTIONS} XXX; \ + TMPOPTIONSDESCFILE=$$(mktemp -t portoptionsdescr); \ while [ $$# -gt 3 ]; do \ OPTIONSLIST="$${OPTIONSLIST} $$1"; \ defaultval=$$3; \ @@ -5798,14 +5800,21 @@ val=$$3; \ fi; \ DEFOPTIONS="$${DEFOPTIONS} $$1 \"$$2\" $${val}"; \ - shift 3; \ + if [ -n "${OPTIONS_DESC}" ]; then \ + ${ECHO_CMD} "$$1: $$4" | fmt >> $${TMPOPTIONSDESCFILE}; \ + shift 4; \ + else \ + ${ECHO_CMD} "$$1: $$2 [NO EXTENDED DESCRIPTION]" | fmt >> $${TMPOPTIONSDESCFILE}; \ + shift 3; \ + fi; \ done; \ TMPOPTIONSFILE=$$(mktemp -t portoptions); \ - trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \ - ${SH} -c "${DIALOG} --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \ + trap "${RM} -f $${TMPOPTIONSFILE}; ${RM} -f $${TMPOPTIONSDESCFILE}; exit 1" 1 2 3 5 10 13 15; \ + ${SH} -c "${DIALOG} --hfile $${TMPOPTIONSDESCFILE} --hline \"Press ? for a detailed description\" --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \ status=$$?; \ if [ $${status} -ne 0 ] ; then \ ${RM} -f $${TMPOPTIONSFILE}; \ + ${RM} -f $${TMPOPTIONSDESCFILE}; \ ${ECHO_MSG} "===> Options unchanged"; \ exit 0; \ fi; \ @@ -5832,11 +5841,14 @@ if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \ ${ECHO_MSG} "===> Switching to root credentials to write ${_OPTIONSFILE}"; \ ${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}"; \ + ${SU_CMD} "${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}"; \ ${ECHO_MSG} "===> Returning to user credentials"; \ else \ ${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}; \ + ${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}; \ fi; \ - ${RM} -f $${TMPOPTIONSFILE} + ${RM} -f $${TMPOPTIONSFILE}; \ + ${RM} -f $${TMPOPTIONSDESCFILE} .endif .endif @@ -5870,7 +5882,11 @@ if [ "$${val}" = "missing" ]; then \ OPTIONS_INVALID=yes; \ fi; \ - shift 3; \ + if [ -n "${OPTIONS_DESC}" ]; then \ + shift 4; \ + else \ + shift 3; \ + fi; \ done; \ if [ "$${OPTIONS_INVALID}" = "yes" ]; then \ cd ${.CURDIR} && ${MAKE} config; \ @@ -5902,8 +5918,13 @@ else \ val="$$3 (default)"; \ fi; \ - ${ECHO_MSG} " $$1=$${val} \"$$2\""; \ - shift 3; \ + if [ -n "${OPTIONS_DESC}" ]; then \ + ${ECHO_CMD} " $$1=$${val} \"$$2\" ($$4)" | fmt; \ + shift 4; \ + else \ + ${ECHO_MSG} " $$1=$${val} \"$$2\""; \ + shift 3; \ + fi; \ done @${ECHO_MSG} "===> Use 'make config' to modify these settings" .endif @@ -5911,16 +5932,17 @@ .if !target(rmconfig) rmconfig: -.if defined(OPTIONS) && exists(${_OPTIONSFILE}) +.if defined(OPTIONS) && (exists(${_OPTIONSFILE}) || exists(${OPTIONSDESCFILE})) -@${ECHO_MSG} "===> Removing user-configured options for ${PKGNAME}"; \ optionsdir=${_OPTIONSFILE}; optionsdir=$${optionsdir%/*}; \ if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \ ${ECHO_MSG} "===> Switching to root credentials to remove ${_OPTIONSFILE} and $${optionsdir}"; \ - ${SU_CMD} "${RM} -f ${_OPTIONSFILE} ; \ + ${SU_CMD} "${RM} -f ${_OPTIONSFILE} ${OPTIONSDESCFILE}; \ ${RMDIR} $${optionsdir}"; \ ${ECHO_MSG} "===> Returning to user credentials"; \ else \ ${RM} -f ${_OPTIONSFILE}; \ + ${RM} -f ${OPTIONSDESCFILE}; \ ${RMDIR} $${optionsdir}; \ fi .else --- patch-options-desc.diff ends here --- --- patch-options-desc-2.diff begins here --- Index: bsd.port.mk =================================================================== RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v retrieving revision 1.592 diff -u -u -r1.592 bsd.port.mk --- bsd.port.mk 14 Apr 2008 16:46:41 -0000 1.592 +++ bsd.port.mk 29 Apr 2008 02:37:19 -0000 @@ -1234,6 +1234,7 @@ .else UNIQUENAME?= ${PKGNAMEPREFIX}${PORTNAME} .endif +OPTIONSDESCFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options.descr OPTIONSFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options _OPTIONSFILE!= ${ECHO_CMD} "${OPTIONSFILE}" .if defined(OPTIONS) @@ -5783,6 +5784,7 @@ . ${_OPTIONSFILE}; \ fi; \ set -- ${OPTIONS} XXX; \ + TMPOPTIONSDESCFILE=$$(mktemp -t portoptionsdescr); \ while [ $$# -gt 3 ]; do \ OPTIONSLIST="$${OPTIONSLIST} $$1"; \ defaultval=$$3; \ @@ -5798,14 +5800,21 @@ val=$$3; \ fi; \ DEFOPTIONS="$${DEFOPTIONS} $$1 \"$$2\" $${val}"; \ + LONGDESC=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} -V OPTION_DESC_$$1); \ + if [ "x$${LONGDESC}" = "x" ]; then \ + ${ECHO_CMD} "$$1: $$2 [NO EXTENDED DESCRIPTION]" | fmt >> $${TMPOPTIONSDESCFILE}; \ + else \ + ${ECHO_CMD} $$1: $${LONGDESC} | fmt >> $${TMPOPTIONSDESCFILE}; \ + fi; \ shift 3; \ done; \ TMPOPTIONSFILE=$$(mktemp -t portoptions); \ - trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \ - ${SH} -c "${DIALOG} --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \ + trap "${RM} -f $${TMPOPTIONSFILE}; ${RM} -f $${TMPOPTIONSDESCFILE}; exit 1" 1 2 3 5 10 13 15; \ + ${SH} -c "${DIALOG} --hfile $${TMPOPTIONSDESCFILE} --hline \"Press ? for a detailed description\" --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \ status=$$?; \ if [ $${status} -ne 0 ] ; then \ ${RM} -f $${TMPOPTIONSFILE}; \ + ${RM} -f $${TMPOPTIONSDESCFILE}; \ ${ECHO_MSG} "===> Options unchanged"; \ exit 0; \ fi; \ @@ -5832,11 +5841,14 @@ if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \ ${ECHO_MSG} "===> Switching to root credentials to write ${_OPTIONSFILE}"; \ ${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}"; \ + ${SU_CMD} "${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}"; \ ${ECHO_MSG} "===> Returning to user credentials"; \ else \ ${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}; \ + ${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}; \ fi; \ - ${RM} -f $${TMPOPTIONSFILE} + ${RM} -f $${TMPOPTIONSFILE}; \ + ${RM} -f $${TMPOPTIONSDESCFILE} .endif .endif @@ -5916,11 +5928,12 @@ optionsdir=${_OPTIONSFILE}; optionsdir=$${optionsdir%/*}; \ if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \ ${ECHO_MSG} "===> Switching to root credentials to remove ${_OPTIONSFILE} and $${optionsdir}"; \ - ${SU_CMD} "${RM} -f ${_OPTIONSFILE} ; \ + ${SU_CMD} "${RM} -f ${_OPTIONSFILE} ${OPTIONSDESCFILE}; \ ${RMDIR} $${optionsdir}"; \ ${ECHO_MSG} "===> Returning to user credentials"; \ else \ ${RM} -f ${_OPTIONSFILE}; \ + ${RM} -f ${OPTIONSDESCFILE}; \ ${RMDIR} $${optionsdir}; \ fi .else --- patch-options-desc-2.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080429025410.D5D275C5D>