aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--Makefile10
-rw-r--r--lib.c25
2 files changed, 34 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index b195528e..35e38014 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,13 @@
VERSION=0.4.4
+# Generating file version.h if current version has changed
+SPARSE_VERSION:=$(shell git describe 2>/dev/null || echo '$(VERSION)')
+VERSION_H := $(shell cat version.h 2>/dev/null)
+ifneq ($(lastword $(VERSION_H)),"$(SPARSE_VERSION)")
+$(info $(shell echo ' GEN 'version.h))
+$(shell echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > version.h)
+endif
+
OS = linux
@@ -191,7 +199,7 @@ clean: clean-check
rm -f *.[oa] .*.d *.so $(PROGRAMS) $(SLIB_FILE) pre-process.h sparse.pc
dist:
- @if test "`git describe`" != "v$(VERSION)" ; then \
+ @if test "v$(SPARSE_VERSION)" != "v$(VERSION)" ; then \
echo 'Update VERSION in the Makefile before running "make dist".' ; \
exit 1 ; \
fi
diff --git a/lib.c b/lib.c
index 4f69e119..5e65a0c2 100644
--- a/lib.c
+++ b/lib.c
@@ -27,6 +27,7 @@
#include "scope.h"
#include "linearize.h"
#include "target.h"
+#include "version.h"
int verbose, optimize, optimize_size, preprocessing;
int die_if_error = 0;
@@ -646,11 +647,34 @@ static char **handle_base_dir(char *arg, char **next)
return next;
}
+static char **handle_version(char *arg, char **next)
+{
+ printf("%s\n", SPARSE_VERSION);
+ exit(0);
+}
+
struct switches {
const char *name;
char **(*fn)(char *, char **);
};
+static char **handle_long_options(char *arg, char **next)
+{
+ static struct switches cmd[] = {
+ { "version", handle_version },
+ { NULL, NULL }
+ };
+ struct switches *s = cmd;
+
+ while (s->name) {
+ if (!strcmp(s->name, arg))
+ return s->fn(arg, next);
+ s++;
+ }
+ return next;
+
+}
+
static char **handle_switch(char *arg, char **next)
{
static struct switches cmd[] = {
@@ -676,6 +700,7 @@ static char **handle_switch(char *arg, char **next)
case 'G': return handle_switch_G(arg, next);
case 'a': return handle_switch_a(arg, next);
case 's': return handle_switch_s(arg, next);
+ case '-': return handle_long_options(arg + 1, next);
default:
break;
}