Adding environment variable HPCTIXDIR, a directory to place tix results.
[ghc-hetmet.git] / rts / Hpc.c
index 014319c..3c725f4 100644 (file)
--- a/rts/Hpc.c
+++ b/rts/Hpc.c
 #include "Hpc.h"
 #include "Trace.h"
 
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -165,14 +173,26 @@ readTix(void) {
 }
 
 static void hpc_init(void) {
+  char *hpc_tixdir;
   if (hpc_inited != 0) {
     return;
   }
   hpc_inited = 1;
   hpc_pid    = getpid();
-
-  tixFilename = (char *) malloc(strlen(prog_name) + 6);
-  sprintf(tixFilename, "%s.tix", prog_name);
+  hpc_tixdir = getenv("HPCTIXDIR");
+
+  if (hpc_tixdir != NULL) {
+    /* Make sure the directory is present
+     */
+    mkdir(hpc_tixdir,0777);
+    /* Then, try open the file
+     */
+    tixFilename = (char *) malloc(strlen(hpc_tixdir) + strlen(prog_name) + 12);
+    sprintf(tixFilename,"%s/%s-%d.tix",hpc_tixdir,prog_name,hpc_pid);
+  } else {
+    tixFilename = (char *) malloc(strlen(prog_name) + 6);
+    sprintf(tixFilename, "%s.tix", prog_name);
+  }
 
   if (init_open(fopen(tixFilename,"r"))) {
     readTix();