Index: trunk/ppStack/src/Makefile.am
===================================================================
--- trunk/ppStack/src/Makefile.am	(revision 23790)
+++ trunk/ppStack/src/Makefile.am	(revision 23801)
@@ -1,10 +1,26 @@
 bin_PROGRAMS = ppStack
 
+if HAVE_SVNVERSION
+PPSTACK_VERSION=`$(SVNVERSION) ../..`
+else
+PPSTACK_VERSION="UNKNOWN"
+endif
+
+if HAVE_SVN
+PPSTACK_BRANCH=`$(SVN) info ../.. | $(SED) -n -e '/URL:/ h' -e '/Repository Root:/ { x; H; x; s|Repository Root: \(.*\)\nURL: \1\(.*\)|\2| ; s|^/|| ; s|/[a-zA-Z]*/src.*|| ; p }'`
+PPSTACK_SOURCE=`$(SVN) info | $(SED) -n -e 's/Repository UUID: // p'`
+else
+PPSTACK_BRANCH="UNKNOWN"
+PPSTACK_SOURCE="UNKNOWN"
+endif
+
 # Force recompilation of ppStackVersion.c, since it gets the version information
-ppStackVersion.c: FORCE
-	touch ppStackVersion.c
+ppStackVersion.c: ppStackVersionDefinitions.h
+ppStackVersionDefinitions.h: ppStackVersionDefinitions.h.in FORCE
+	-$(RM) ppStackVersionDefinitions.h
+	$(SED) -e "s|@PPSTACK_VERSION@|\"$(PPSTACK_VERSION)\"|" -e "s|@PPSTACK_BRANCH@|\"$(PPSTACK_BRANCH)\"|" -e "s|@PPSTACK_SOURCE@|\"$(PPSTACK_SOURCE)\"|" ppStackVersionDefinitions.h.in > ppStackVersionDefinitions.h
 FORCE: ;
 
-ppStack_CFLAGS 	= $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PPSTATS_CFLAGS) $(PPSTACK_CFLAGS) -DPPSTACK_VERSION=$(PPSTACK_VERSION) -DPPSTACK_BRANCH=$(PPSTACK_BRANCH) -DPPSTACK_SOURCE=$(PPSTACK_SOURCE)
+ppStack_CFLAGS 	= $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PPSTATS_CFLAGS) $(PPSTACK_CFLAGS)
 ppStack_LDFLAGS = $(PSLIB_LIBS)   $(PSMODULE_LIBS)   $(PSPHOT_LIBS)   $(PPSTATS_LIBS)   $(PPSTACK_LIBS)
 
Index: trunk/ppStack/src/ppStackVersion.c
===================================================================
--- trunk/ppStack/src/ppStackVersion.c	(revision 23790)
+++ trunk/ppStack/src/ppStackVersion.c	(revision 23801)
@@ -10,4 +10,5 @@
 
 #include "ppStack.h"
+#include "ppStackVersionDefinitions.h"
 
 #ifndef PPSTACK_VERSION
@@ -21,11 +22,8 @@
 #endif
 
-#define xstr(s) str(s)
-#define str(s) #s
-
 psString ppStackVersion(void)
 {
     char *value = NULL;
-    psStringAppend(&value, "%s@%s", xstr(PPSTACK_BRANCH), xstr(PPSTACK_VERSION));
+    psStringAppend(&value, "%s@%s", PPSTACK_BRANCH, PPSTACK_VERSION);
     return value;
 }
@@ -33,5 +31,5 @@
 psString ppStackSource(void)
 {
-    return psStringCopy(xstr(PPSTACK_SOURCE));
+    return psStringCopy(PPSTACK_SOURCE);
 }
 
Index: trunk/ppStack/src/ppStackVersionDefinitions.h.in
===================================================================
--- trunk/ppStack/src/ppStackVersionDefinitions.h.in	(revision 23801)
+++ trunk/ppStack/src/ppStackVersionDefinitions.h.in	(revision 23801)
@@ -0,0 +1,8 @@
+#ifndef PPSTACK_VERSION_DEFINITIONS_H
+#define PPSTACK_VERSION_DEFINITIONS_H
+
+#define PPSTACK_VERSION @PPSTACK_VERSION@ // SVN version
+#define PPSTACK_BRANCH  @PPSTACK_BRANCH@  // SVN branch
+#define PPSTACK_SOURCE  @PPSTACK_SOURCE@  // SVN source
+
+#endif
