Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 May 2006 11:15:13 +0200 (CEST)
From:      Pav Lucistnik <pav@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/97125: automatically invalidate saved OPTIONS on change
Message-ID:  <200605110915.k4B9FDc5035419@pav.hide.vol.cz>
Resent-Message-ID: <200605110920.k4B9KFA0015342@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         97125
>Category:       ports
>Synopsis:       automatically invalidate saved OPTIONS on change
>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:   Thu May 11 09:20:14 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Pav Lucistnik
>Release:        FreeBSD 6.1-STABLE i386
>Organization:
>Environment:
System: FreeBSD pav.hide.vol.cz 6.1-STABLE FreeBSD 6.1-STABLE #0: Thu May 11 02:57:52 CEST 2006 root@pav.hide.vol.cz:/usr/obj/usr/src/sys/GENERIC i386

>Description:
Imagine this scenario:

1) User installs an OPTIONS using port, saving his settings
2) Maintainer updates the port, adding some new OPTIONS
3) User updates the port, the OPTIONS dialog is not presented, user misses
   newly added options.

Attached fix compares saved options with a present set of options in the port,
and displays the configuration dialog again when it detects an option which is
not present in the saved set.  The old saved options are retained.

>How-To-Repeat:
>Fix:

--- options-autoinvalidate.diff begins here ---
--- bsd.port.mk.orig	Wed May 10 23:31:23 2006
+++ bsd.port.mk	Thu May 11 10:15:20 2006
@@ -2940,8 +2940,7 @@
 #
 ################################################################
 .if (!defined(OPTIONS) || defined(CONFIG_DONE) || \
-	defined(PACKAGE_BUILDING) || defined(BATCH) || \
-	exists(${_OPTIONSFILE}) || exists(${_OPTIONSFILE}.local))
+	defined(PACKAGE_BUILDING) || defined(BATCH))
 _OPTIONS_OK=yes
 .endif
 
@@ -3800,7 +3799,7 @@
 .if !target(${target}) && defined(_OPTIONS_OK)
 ${target}: ${${target:U}_COOKIE}
 .elif !target(${target})
-${target}: config
+${target}: config-conditional
 	@cd ${.CURDIR} && ${MAKE} CONFIG_DONE=1 ${__softMAKEFLAGS} ${${target:U}_COOKIE}
 .elif target(${target}) && defined(IGNORE)
 .endif
@@ -5299,8 +5298,34 @@
 
 .if !target(config-conditional)
 config-conditional:
-.if defined(OPTIONS) && !exists(${_OPTIONSFILE})
+.if defined(OPTIONS)
+.if exists(${_OPTIONSFILE})
+# scan saved options and invalidate them, if the set of options does not match
+	@. ${_OPTIONSFILE}; \
+	set ${OPTIONS} XXX; \
+	while [ $$# -gt 3 ]; do \
+		withvar=WITH_$$1; \
+		withoutvar=WITHOUT_$$1; \
+		withval=$$(eval ${ECHO_CMD} $$\{$${withvar}\}); \
+		withoutval=$$(eval ${ECHO_CMD} $$\{$${withoutvar}\}); \
+		if [ ! -z "$${withval}" ]; then \
+			val=on; \
+		elif [ ! -z "$${withoutval}" ]; then \
+			val=off; \
+		else \
+			val=missing; \
+		fi; \
+		if [ "$${val}" = "missing" ]; then \
+			OPTIONS_INVALID=yes; \
+		fi; \
+		shift 3; \
+	done; \
+	if [ "$${OPTIONS_INVALID}" = "yes" ]; then \
+		cd ${.CURDIR} && ${MAKE} config; \
+	fi;
+.else
 	cd ${.CURDIR} && ${MAKE} config;
+.endif
 .endif
 .endif
 
--- options-autoinvalidate.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?200605110915.k4B9FDc5035419>