From 0602373a2c9c8d213da66507230867a7a266c99a Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Fri, 7 Dec 2018 08:15:20 +0100
Subject: [PATCH] Using functions to make sure initialization order is correct

---
 src/config/Config.inc.in | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/config/Config.inc.in b/src/config/Config.inc.in
index b4739b647..91cac0d3f 100644
--- a/src/config/Config.inc.in
+++ b/src/config/Config.inc.in
@@ -29,17 +29,15 @@ namespace PLMD {
 namespace config {
 
 // This is a fix to allow conda to correctly replace paths in binary files.
-// These variables should not be static or they will be optimized away!
-// I guess the compiler thinks that they could be replaced from outside
-// (even though they are const) and thus cannot optimize them.
-const char* plumed_root="@PLUMED_ROOT@";
-const char* plumed_soext="@SOEXT@";
-const char* plumed_htmldir="@htmldir@";
-const char* plumed_includedir="@includedir@";
-const char* plumed_program_name="@program_name@";
+// These functions should not be static or they will be optimized away!
+const char* plumed_root(){return "@PLUMED_ROOT@";}
+const char* plumed_soext(){return "@SOEXT@";}
+const char* plumed_htmldir(){return "@htmldir@";}
+const char* plumed_includedir(){return "@includedir@";}
+const char* plumed_program_name(){return "@program_name@";}
 
 std::string getSoExt() {
-  return plumed_soext;
+  return plumed_soext();
 }
 
 bool isInstalled() {
@@ -50,7 +48,7 @@ std::string getPlumedRoot() {
   char *env = std::getenv("PLUMED_ROOT");
   std::string ss;
   if( env == NULL) {
-    ss=plumed_root;
+    ss=plumed_root();
   } else {
     ss=std::string( env );
   }
@@ -62,7 +60,7 @@ std::string getPlumedHtmldir() {
   char *env = std::getenv("PLUMED_HTMLDIR");
   std::string ss;
   if( env == NULL) {
-    ss=plumed_htmldir;
+    ss=plumed_htmldir();
   } else {
     ss=std::string( env );
   }
@@ -74,7 +72,7 @@ std::string getPlumedIncludedir() {
   char *env = std::getenv("PLUMED_INCLUDEDIR");
   std::string ss;
   if( env == NULL) {
-    ss=plumed_includedir;
+    ss=plumed_includedir();
   } else {
     ss=std::string( env );
   }
@@ -86,7 +84,7 @@ std::string getPlumedProgramName() {
   char *env = std::getenv("PLUMED_PROGRAM_NAME");
   std::string ss;
   if( env == NULL) {
-    ss=plumed_program_name;
+    ss=plumed_program_name();
   } else {
     ss=std::string( env );
   }
-- 
GitLab