Make fio include the git version in the version output

Makes it easier in bug reporting, don't have to ask people what
they are running...

Here's to you, Kep.

Signed-off-by: Jens Axboe <axboe@kernel.dk>

Conflicts:

	Makefile

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/FIO-VERSION-GEN b/FIO-VERSION-GEN
new file mode 100755
index 0000000..d812255
--- /dev/null
+++ b/FIO-VERSION-GEN
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+GVF=FIO-VERSION-FILE
+DEF_VER=v2.0.5.GIT
+
+LF='
+'
+
+# First see if there is a version file (included in release tarballs),
+# then try git-describe, then default.
+if test -f version
+then
+	VN=$(cat version) || VN="$DEF_VER"
+elif test -d .git -o -f .git &&
+	VN=$(git describe --match "fio-[0-9]*" --abbrev=4 HEAD 2>/dev/null) &&
+	case "$VN" in
+	*$LF*) (exit 1) ;;
+	v[0-9]*)
+		git update-index -q --refresh
+		test -z "$(git diff-index --name-only HEAD --)" ||
+		VN="$VN-dirty" ;;
+	esac
+then
+	VN=$VN
+else
+	VN="$DEF_VER"
+fi
+
+VN=$(expr "$VN" : v*'\(.*\)')
+
+if test -r $GVF
+then
+	VC=$(sed -e 's/^FIO_VERSION = //' <$GVF)
+else
+	VC=unset
+fi
+test "$VN" = "$VC" || {
+	echo >&2 "FIO_VERSION = $VN"
+	echo "FIO_VERSION = $VN" >$GVF
+}
+
+
diff --git a/Makefile b/Makefile
index 673107f..252b0a9 100644
--- a/Makefile
+++ b/Makefile
@@ -93,9 +93,18 @@
 mandir = $(prefix)/man
 endif
 
-all: .depend $(PROGS) $(SCRIPTS)
+all: .depend $(PROGS) $(SCRIPTS) FORCE
 
-.c.o: .depend
+.PHONY: all install clean
+.PHONY: FORCE cscope
+
+FIO-VERSION-FILE: FORCE
+	@$(SHELL_PATH) ./FIO-VERSION-GEN
+-include FIO-VERSION-FILE
+
+CFLAGS += -DFIO_VERSION='"$(FIO_VERSION)"'
+
+.c.o: .depend FORCE
 	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $(CPPFLAGS) $<
 
 t/stest: $(T_SMALLOC_OBJS)
@@ -110,15 +119,15 @@
 .depend: $(SOURCE)
 	$(QUIET_DEP)$(CC) -MM $(CFLAGS) $(CPPFLAGS) $(SOURCE) 1> .depend
 
-$(PROGS): .depend
+$(PROGS): .depend FORCE
 
-clean:
-	-rm -f .depend $(OBJS) $(T_OBJS) $(PROGS) $(T_PROGS) core.* core
+clean: FORCE
+	-rm -f .depend $(OBJS) $(T_OBJS) $(PROGS) $(T_PROGS) core.* core FIO-VERSION-FILE
 
 cscope:
 	@cscope -b -R
 
-install: $(PROGS) $(SCRIPTS)
+install: $(PROGS) $(SCRIPTS) FORCE
 	$(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
 	$(INSTALL) $(PROGS) $(SCRIPTS) $(DESTDIR)$(bindir)
 	$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
diff --git a/init.c b/init.c
index 69ed30c..1eea800 100644
--- a/init.c
+++ b/init.c
@@ -25,14 +25,7 @@
 
 #include "fio_version.h"
 
-#if FIO_PATCH > 0
-const char fio_version_string[] =	__fio_stringify(FIO_MAJOR) "."	\
-					__fio_stringify(FIO_MINOR) "."	\
-					__fio_stringify(FIO_PATCH);
-#else
-const char fio_version_string[] =	__fio_stringify(FIO_MAJOR) "."	\
-					__fio_stringify(FIO_MINOR);
-#endif
+const char fio_version_string[] = FIO_VERSION;
 
 #define FIO_RANDSEED		(0xb1899bedUL)
 
@@ -1188,7 +1181,7 @@
 
 static void usage(const char *name)
 {
-	printf("fio %s\n", fio_version_string);
+	printf("%s\n", fio_version_string);
 	printf("%s [options] [job options] <job file(s)>\n", name);
 	printf("  --debug=options\tEnable debug logging. May be one/more of:\n"
 		"\t\t\tprocess,file,io,mem,blktrace,verify,random,parse,\n"
@@ -1419,7 +1412,7 @@
 			break;
 		case 'v':
 			if (!cur_client) {
-				log_info("fio %s\n", fio_version_string);
+				log_info("%s\n", fio_version_string);
 				do_exit++;
 			}
 			break;
@@ -1645,7 +1638,7 @@
 	}
 
 	if (!terse_output)
-		log_info("fio %s\n", fio_version_string);
+		log_info("%s\n", fio_version_string);
 
 	return 0;
 }