Index: /trunk/ppStats/src/Makefile.am
===================================================================
--- /trunk/ppStats/src/Makefile.am	(revision 10291)
+++ /trunk/ppStats/src/Makefile.am	(revision 10292)
@@ -12,5 +12,6 @@
 	ppStatsData.c		\
 	ppStatsLoop.c		\
-	ppStatsSetupFromRecipe.c
+	ppStatsSetupFromRecipe.c \
+	ppStatsVersion.c
 
 ppStats_SOURCES =		\
@@ -18,5 +19,6 @@
 	ppStatsLoop.c		\
 	ppStatsSetupFromArgs.c	\
-	ppStatsStandAlone.c
+	ppStatsStandAlone.c	\
+	ppStatsVersion.c
 
 include_HEADERS = 		\
@@ -24,5 +26,6 @@
 	ppStatsData.h		\
 	ppStatsLoop.h		\
-	ppStatsSetupFromRecipe.h
+	ppStatsSetupFromRecipe.h \
+	ppStatsVersion.h
 
 noinst_HEADERS = 		\
Index: /trunk/ppStats/src/ppStatsVersion.c
===================================================================
--- /trunk/ppStats/src/ppStatsVersion.c	(revision 10292)
+++ /trunk/ppStats/src/ppStatsVersion.c	(revision 10292)
@@ -0,0 +1,26 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <pslib.h>
+#include <psmodules.h>
+#include "ppStatsVersion.h"
+
+static const char *cvsTag = "$Name: not supported by cvs2svn $";// CVS tag name
+
+psString ppStatsVersion(void)
+{
+    psString version = NULL;            // Version, to return
+    psStringAppend(&version, "%s-%s",PACKAGE_NAME,PACKAGE_VERSION);
+    return version;
+}
+
+psString ppStatsVersionLong(void)
+{
+    psString version = ppStatsVersion(); // Version, to return
+    psString tag = psStringStripCVS(cvsTag, "Name"); // CVS tag
+    psStringAppend(&version, " (cvs tag %s) %s, %s", tag, __DATE__, __TIME__);
+    psFree(tag);
+    return version;
+}
Index: /trunk/ppStats/src/ppStatsVersion.h
===================================================================
--- /trunk/ppStats/src/ppStatsVersion.h	(revision 10292)
+++ /trunk/ppStats/src/ppStatsVersion.h	(revision 10292)
@@ -0,0 +1,10 @@
+#ifndef PP_STATS_VERSION_H
+#define PP_STATS_VERSION_H
+
+/// Return short version information
+psString ppStatsVersion(void);
+
+/// Return long version information
+psString ppStatsVersionLong(void);
+
+#endif
Index: /trunk/psastro/src/Makefile.am
===================================================================
--- /trunk/psastro/src/Makefile.am	(revision 10291)
+++ /trunk/psastro/src/Makefile.am	(revision 10292)
@@ -35,5 +35,6 @@
 psastroMosaicRescaleChips.c \
 psastroWCS.c	            \
-psastroErrorCodes.c
+psastroErrorCodes.c         \
+psastroVersion.c
 
 include_HEADERS = \
Index: /trunk/psastro/src/psastro.h
===================================================================
--- /trunk/psastro/src/psastro.h	(revision 10291)
+++ /trunk/psastro/src/psastro.h	(revision 10292)
@@ -22,5 +22,5 @@
 
 // this structure represents a fit to the logN / logS curve for a set of stars
-// logN = offset + slope * logS 
+// logN = offset + slope * logS
 typedef struct {
   double mMin;
@@ -68,2 +68,6 @@
 bool pmAstromWriteBilevelChip (psPlaneTransform *toFPA, psMetadata *header, double plateScale);
 psMetadata *pmAstromWriteBilevelMosaic (psProjection *toSky, psPlaneDistort *toTP, double plateScale);
+
+// Return version strings.
+psString psastroVersion(void);
+psString psastroVersionLong(void);
Index: /trunk/psastro/src/psastroVersion.c
===================================================================
--- /trunk/psastro/src/psastroVersion.c	(revision 10292)
+++ /trunk/psastro/src/psastroVersion.c	(revision 10292)
@@ -0,0 +1,27 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <pslib.h>
+#include <psmodules.h>
+#include "psastro.h"
+
+static const char *cvsTag = "$Name: not supported by cvs2svn $";// CVS tag name
+
+psString psastroVersion(void)
+{
+    psString version = NULL;            // Version, to return
+    psStringAppend(&version, "%s-%s",PACKAGE_NAME,PACKAGE_VERSION);
+    return version;
+}
+
+psString psastroVersionLong(void)
+{
+    psString version = psastroVersion(); // Version, to return
+    psString tag = psStringStripCVS(cvsTag, "Name"); // CVS tag
+    psStringAppend(&version, " (cvs tag %s) %s, %s", tag, __DATE__, __TIME__);
+    psFree(tag);
+    return version;
+}
+
Index: /trunk/psphot/src/psphot.h
===================================================================
--- /trunk/psphot/src/psphot.h	(revision 10291)
+++ /trunk/psphot/src/psphot.h	(revision 10292)
@@ -15,4 +15,6 @@
 // top-level psphot functions
 const char *psphotCVSName(void);
+psString psphotVersion(void);
+psString psphotVersionLong(void);
 
 // XXX test functions
Index: /trunk/psphot/src/psphotVersion.c
===================================================================
--- /trunk/psphot/src/psphotVersion.c	(revision 10291)
+++ /trunk/psphot/src/psphotVersion.c	(revision 10292)
@@ -1,6 +1,31 @@
-# include "psphot.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
+#include <stdio.h>
+#include <pslib.h>
+#include <psmodules.h>
+#include "psphot.h"
+
+static const char *cvsTag = "$Name: not supported by cvs2svn $";// CVS tag name
+
+psString psphotVersion(void)
+{
+    psString version = NULL;            // Version, to return
+    psStringAppend(&version, "%s-%s",PACKAGE_NAME,PACKAGE_VERSION);
+    return version;
+}
+
+psString psphotVersionLong(void)
+{
+    psString version = psphotVersion(); // Version, to return
+    psString tag = psStringStripCVS(cvsTag, "Name"); // CVS tag
+    psStringAppend(&version, " (cvs tag %s) %s, %s", tag, __DATE__, __TIME__);
+    psFree(tag);
+    return version;
+}
+
+// Defined by RHL; leaving for backwards compatibility.
 const char *psphotCVSName(void) {
-   static char *name = "$Name: not supported by cvs2svn $";
-   return(name);
+   return cvsTag;
 }
