From 25190a5158256abe6be58bdb2065ed7f6a403fa5 Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Wed, 4 Sep 2013 17:05:42 -0700
Subject: [PATCH] Make the three --extensions* options mutually exclusive.

It's not obvious that the user has thought out what is actually desired
if more than one of these options is specified. So we simply forbid that.
---
 glenv.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/glenv.c b/glenv.c
index 6d27ad4..76f6693 100644
--- a/glenv.c
+++ b/glenv.c
@@ -114,6 +114,14 @@ enum {
 	EXTENSIONS_BLACKLIST_OPT
 };
 
+static void
+invalid_combination (const char *second, const char *first)
+{
+	fprintf (stderr, "Error: Option %s cannot be specified after %s\n",
+		 second, first);
+	exit (1);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -172,12 +180,24 @@ main (int argc, char *argv[])
 			options.shading_language_version = optarg;
 			break;
 		case EXTENSIONS_OPT:
+			if (options.extensions_whitelist)
+				invalid_combination ("--extensions", "--extensions-whitelist");
+			if (options.extensions_blacklist)
+				invalid_combination ("--extensions", "--extensions-blacklist");
 			options.extensions = optarg;
 			break;
 		case EXTENSIONS_WHITELIST_OPT:
+			if (options.extensions)
+				invalid_combination ("--extensions-whitelist", "--extensions");
+			if (options.extensions_blacklist)
+				invalid_combination ("--extensions-whitelist", "--extensions-blacklist");
 			options.extensions_whitelist = optarg;
 			break;
 		case EXTENSIONS_BLACKLIST_OPT:
+			if (options.extensions)
+				invalid_combination ("--extensions-blacklist", "--extensions");
+			if (options.extensions_whitelist)
+				invalid_combination ("--extensions-blacklist", "--extensions-whitelist");
 			options.extensions_blacklist = optarg;
 			break;
 		default:
-- 
2.45.2