Index: trunk/ppSub/src/Makefile.am
===================================================================
--- trunk/ppSub/src/Makefile.am	(revision 23790)
+++ trunk/ppSub/src/Makefile.am	(revision 23803)
@@ -1,10 +1,26 @@
 bin_PROGRAMS = ppSub ppSubKernel
 
+if HAVE_SVNVERSION
+PPSUB_VERSION=`$(SVNVERSION) ../..`
+else
+PPSUB_VERSION="UNKNOWN"
+endif
+
+if HAVE_SVN
+PPSUB_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 }'`
+PPSUB_SOURCE=`$(SVN) info | $(SED) -n -e 's/Repository UUID: // p'`
+else
+PPSUB_BRANCH="UNKNOWN"
+PPSUB_SOURCE="UNKNOWN"
+endif
+
 # Force recompilation of ppSubVersion.c, since it gets the version information
-ppSubVersion.c: FORCE
-	touch ppSubVersion.c
+ppSubVersion.c: ppSubVersionDefinitions.h
+ppSubVersionDefinitions.h: ppSubVersionDefinitions.h.in FORCE
+	-$(RM) ppSubVersionDefinitions.h
+	$(SED) -e "s|@PPSUB_VERSION@|\"$(PPSUB_VERSION)\"|" -e "s|@PPSUB_BRANCH@|\"$(PPSUB_BRANCH)\"|" -e "s|@PPSUB_SOURCE@|\"$(PPSUB_SOURCE)\"|" ppSubVersionDefinitions.h.in > ppSubVersionDefinitions.h
 FORCE: ;
 
-ppSub_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PPSTATS_CFLAGS) $(PSPHOT_CFLAGS) $(PPSUB_CFLAGS) -DPPSUB_VERSION=$(PPSUB_VERSION) -DPPSUB_BRANCH=$(PPSUB_BRANCH) -DPPSUB_SOURCE=$(PPSUB_SOURCE)
+ppSub_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PPSTATS_CFLAGS) $(PSPHOT_CFLAGS) $(PPSUB_CFLAGS)
 ppSub_LDFLAGS  = $(PSLIB_LIBS)   $(PSMODULE_LIBS)   $(PPSTATS_LIBS)   $(PSPHOT_LIBS)   $(PPSUB_LIBS)
 
Index: trunk/ppSub/src/ppSubVersion.c
===================================================================
--- trunk/ppSub/src/ppSubVersion.c	(revision 23790)
+++ trunk/ppSub/src/ppSubVersion.c	(revision 23803)
@@ -22,4 +22,5 @@
 
 #include "ppSub.h"
+#include "ppSubVersionDefinitions.h"
 
 #ifndef PPSUB_VERSION
@@ -33,11 +34,8 @@
 #endif
 
-#define xstr(s) str(s)
-#define str(s) #s
-
 psString ppSubVersion(void)
 {
     char *value = NULL;
-    psStringAppend(&value, "%s@%s", xstr(PPSUB_BRANCH), xstr(PPSUB_VERSION));
+    psStringAppend(&value, "%s@%s", PPSUB_BRANCH, PPSUB_VERSION);
     return value;
 }
@@ -45,5 +43,5 @@
 psString ppSubSource(void)
 {
-    return psStringCopy(xstr(PPSUB_SOURCE));
+    return psStringCopy(PPSUB_SOURCE);
 }
 
Index: trunk/ppSub/src/ppSubVersionDefinitions.h.in
===================================================================
--- trunk/ppSub/src/ppSubVersionDefinitions.h.in	(revision 23803)
+++ trunk/ppSub/src/ppSubVersionDefinitions.h.in	(revision 23803)
@@ -0,0 +1,8 @@
+#ifndef PPSUB_VERSION_DEFINITIONS_H
+#define PPSUB_VERSION_DEFINITIONS_H
+
+#define PPSUB_VERSION @PPSUB_VERSION@ // SVN version
+#define PPSUB_BRANCH  @PPSUB_BRANCH@  // SVN branch
+#define PPSUB_SOURCE  @PPSUB_SOURCE@  // SVN source
+
+#endif
