On Fri, Mar 28, 2008 at 12:58:05AM +0100, Pav Lucistnik wrote:
> Wesley Shields p??e v ?t 27. 03. 2008 v 15:58 -0400:
> 
> > > I can see it already! :) Can you code it?
> > 
> > As a first pass I've got an almost working skeleton which uses --hfile
> > and pulls the descriptions from OPTIONS variable (using a 4th field).
> > 
> > It also adds --hline "Please use ? for a detailed description" to the
> > dialog call.
> 
> Cool.
> 
> > It's not quite what you were expecting but I'm not sure how to make
> > dialog show two windows at once - admittedly I have not looked too hard
> > at that.
> 
> It might not be possible with existing dialog(1). Anyway, thanks for the
> effort, I'm looking forward to nexxt week for a final patch.

I've attached a first draft (barely tested, I'm more interested in what
you think of the ideas used - specifically OPTIONS_DESC).

I had to implement an OPTIONS_DESC knob that should be set per-port as
the 4th field is added.  This is necessary because it's impossible to
tell the difference between 3 OPTIONS with a long description (12
fields) or 4 OPTIONS without a long description (12 fields).  I've done
some basic testing but intend to clean it up and properly document - in
both bsd.port.mk and the Porter's Handbook - the additions, assuming the
approach I'm using is liked by the community.

The idea is that OPTIONS goes from:
        NAME "Short Description" Status
to a 4 field format:
        NAME  "Short Description" Status "Long Description, probably
        documenting the immediate dependencies and implications of the knob"

With the addition of the 4th field the OPTIONS_DESC variable must be
set, or everything related to OPTIONS will break.  Eventually, as ports
switch to this format the OPTIONS_DESC knob can be removed and made the
default format of 4 fields.

Once a port uses the extended format the dialog screen supports using
'?' or F1 to view the long descriptions.

I've changed the following targets:
config
config-conditional
showconfig
rmconfig

If I've missed anything please let me know.

-- WXS
Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.591
diff -u -u -r1.591 bsd.port.mk
--- bsd.port.mk	11 Mar 2008 23:45:04 -0000	1.591
+++ bsd.port.mk	1 Apr 2008 17:04:57 -0000
@@ -1229,6 +1229,7 @@
 .else
 UNIQUENAME?=	${PKGNAMEPREFIX}${PORTNAME}
 .endif
+OPTIONSDESCFILE?=	${PORT_DBDIR}/${UNIQUENAME}/options.descr
 OPTIONSFILE?=	${PORT_DBDIR}/${UNIQUENAME}/options
 _OPTIONSFILE!=	${ECHO_CMD} "${OPTIONSFILE}"
 .if defined(OPTIONS)
@@ -5781,6 +5782,7 @@
 		. ${_OPTIONSFILE}; \
 	fi; \
 	set -- ${OPTIONS} XXX; \
+	TMPOPTIONSDESCFILE=$$(mktemp -t portoptionsdescr); \
 	while [ $$# -gt 3 ]; do \
 		OPTIONSLIST="$${OPTIONSLIST} $$1"; \
 		defaultval=$$3; \
@@ -5796,14 +5798,24 @@
 			val=$$3; \
 		fi; \
 		DEFOPTIONS="$${DEFOPTIONS} $$1 \"$$2\" $${val}"; \
-		shift 3; \
+		if [ -n "${OPTIONS_DESC}" ]; then \
+			${ECHO_CMD} "$$1: $$4" | fmt >> $${TMPOPTIONSDESCFILE}; \
+			shift 4; \
+		else \
+			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; \
+	if [ -n "${OPTIONS_DESC}" ]; then \
+		${SH} -c "${DIALOG} --hfile $${TMPOPTIONSDESCFILE} --hline \"Press ? for a detailed description\" --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \
+	else \
+		${SH} -c "${DIALOG} --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \
+	fi; \
 	status=$$?; \
 	if [ $${status} -ne 0 ] ; then \
 		${RM} -f $${TMPOPTIONSFILE}; \
+		${RM} -f $${TMPOPTIONSDESCFILE}; \
 		${ECHO_MSG} "===> Options unchanged"; \
 		exit 0; \
 	fi; \
@@ -5830,11 +5842,18 @@
 	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}"; \
+		if [ -n "${OPTIONS_DESC}" ]; then \
+			${SU_CMD} "${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}"; \
+		fi; \
 		${ECHO_MSG} "===>  Returning to user credentials"; \
 	else \
 		${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}; \
+		if [ -n "${OPTIONS_DESC}" ]; then \
+			${CAT} $${TMPOPTIONSDESCFILE} > ${OPTIONSDESCFILE}; \
+		fi; \
 	fi; \
-	${RM} -f $${TMPOPTIONSFILE}
+	${RM} -f $${TMPOPTIONSFILE}; \
+	${RM} -f $${TMPOPTIONSDESCFILE}
 .endif
 .endif
 
@@ -5868,7 +5887,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; \
@@ -5900,8 +5923,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
@@ -5909,16 +5937,17 @@
 
 .if !target(rmconfig)
 rmconfig:
-.if defined(OPTIONS) && exists(${_OPTIONSFILE})
+.if defined(OPTIONS) && (exists(${_OPTIONSFILE}) || exists(${OPTIONSDESCFILE}))
 	[EMAIL PROTECTED] "===> 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
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to