Index: trunk/pswarp/src/pswarp.c
===================================================================
--- trunk/pswarp/src/pswarp.c	(revision 23170)
+++ trunk/pswarp/src/pswarp.c	(revision 23195)
@@ -39,4 +39,6 @@
     if (!config) usage();
 
+    pswarpVersionPrint();
+
     // load identify the data sources
     if (!pswarpParseCamera(config)) {
Index: trunk/pswarp/src/pswarp.h
===================================================================
--- trunk/pswarp/src/pswarp.h	(revision 23170)
+++ trunk/pswarp/src/pswarp.h	(revision 23195)
@@ -126,2 +126,5 @@
     psMetadata *header                  ///< Header to populate
     );
+
+/// Print version information
+void pswarpVersionPrint(void);
Index: trunk/pswarp/src/pswarpVersion.c
===================================================================
--- trunk/pswarp/src/pswarpVersion.c	(revision 23170)
+++ trunk/pswarp/src/pswarpVersion.c	(revision 23195)
@@ -92,2 +92,31 @@
     return true;
 }
+
+void pswarpVersionPrint(void)
+{
+    psTime *time = psTimeGetNow(PS_TIME_TAI); // The time now
+    psString timeString = psTimeToISO(time); // The time in an ISO string
+    psFree(time);
+    psLogMsg("pswarp", PS_LOG_INFO, "pswarp at %s", timeString);
+    psFree(timeString);
+
+    psString pslib = psLibVersionLong();// psLib version
+    psString psmodules = psModulesVersionLong(); // psModules version
+    psString psphot = psphotVersionLong(); // psphot version
+    psString ppStats = ppStatsVersionLong(); // ppStats version
+    psString pswarp = pswarpVersionLong(); // pswarp version
+
+    psLogMsg("pswarp", PS_LOG_INFO, "%s", pslib);
+    psLogMsg("pswarp", PS_LOG_INFO, "%s", psmodules);
+    psLogMsg("pswarp", PS_LOG_INFO, "%s", psphot);
+    psLogMsg("pswarp", PS_LOG_INFO, "%s", ppStats);
+    psLogMsg("pswarp", PS_LOG_INFO, "%s", pswarp);
+
+    psFree(pslib);
+    psFree(psmodules);
+    psFree(psphot);
+    psFree(ppStats);
+    psFree(pswarp);
+
+    return;
+}
