diff mbox

[RFC] sparse: Add cmd line --version option

Message ID 1362606078.2093.10.camel@joe-AO722 (mailing list archive)
State Mainlined, archived
Headers show

Commit Message

Joe Perches March 6, 2013, 9:41 p.m. UTC
On Wed, 2013-03-06 at 13:19 -0800, Christopher Li wrote:
> On Wed, Mar 6, 2013 at 9:22 AM, Joe Perches <joe@perches.com> wrote:
> > There's no current way to know the version
> > of sparse.  Add --version to see it.
> 
> Hi Joe,

Hi Chris.
> I agree that this the "--version" switch has its value.
> However, I don't like using "die" to print out the version string.
> I see no reason why sparse should exit with error for printing
> out version string. For example, gcc does not do that.
> 
> If you don't want to recompile lib.c every time, you can make
> a version.c to store the version string.
> 
> Another thing is nice to have, but not required.
> You consider to give "--" its own handing function. It is bit odd
> seeing the "-version" mix with other switch command. The
> patch is simpler. Either way is fine with me.
> 
> The exit code need to be fixed.
> 
> I will apply the patch once you fix the exit code.

This still doesn't recompile lib.o every time.

Maybe:
---
 Makefile | 10 +++++++++-
 lib.c    | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletion(-)



--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/Makefile b/Makefile
index b195528..e7db639 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,12 @@ 
 VERSION=0.4.4
 
+HAVE_GIT:=$(shell git describe >/dev/null 2>&1 && echo 'yes')
+ifeq ($(HAVE_GIT),yes)
+SPARSE_VERSION=$(shell git describe)
+else
+SPARSE_VERSION=$(VERSION)
+endif
+
 OS = linux
 
 
@@ -27,7 +34,8 @@  HAVE_LLVM_VERSION:=$(shell llvm-config --version | grep "^[3-9].*" >/dev/null 2>
 LLVM_VERSION=$(shell llvm-config --version)
 
 GCC_BASE = $(shell $(CC) --print-file-name=)
-BASIC_CFLAGS = -DGCC_BASE=\"$(GCC_BASE)\"
+BASIC_CFLAGS = -DGCC_BASE=\"$(GCC_BASE)\" \
+	       -DSPARSE_VERSION=\"$(SPARSE_VERSION)\"
 
 ifeq ($(HAVE_GCC_DEP),yes)
 BASIC_CFLAGS += -Wp,-MD,$(@D)/.$(@F).d
diff --git a/lib.c b/lib.c
index 4f69e11..f1c284f 100644
--- a/lib.c
+++ b/lib.c
@@ -646,11 +646,39 @@  static char **handle_base_dir(char *arg, char **next)
 	return next;
 }
 
+static char **handle_version(char *arg, char **next)
+{
+	printf("%s\n", SPARSE_VERSION);
+	return next;
+}
+
 struct switches {
 	const char *name;
 	char **(*fn)(char *, char **);
 };
 
+static char **handle_options(char *arg, char **next)
+{
+	static struct switches cmd[] = {
+		{ "version", handle_version },
+		{ NULL, NULL }
+	};
+	struct switches *s;
+
+	s = cmd;
+	while (s->name) {
+		if (!strcmp(s->name, arg))
+			return s->fn(arg, next);
+		s++;
+	}
+
+	/*
+	 * Ignore unknown command line options:
+	 * they're probably gcc switches
+	 */
+	return next;
+}
+
 static char **handle_switch(char *arg, char **next)
 {
 	static struct switches cmd[] = {
@@ -952,6 +980,10 @@  struct symbol_list *sparse_initialize(int argc, char **argv, struct string_list
 		if (!arg)
 			break;
 
+		if (arg[0] == '-' && arg[1] == '-' && arg[2]) {
+			args = handle_options(arg+2, args);
+			continue;
+		}
 		if (arg[0] == '-' && arg[1]) {
 			args = handle_switch(arg+1, args);
 			continue;