From ebd308609782f00cbde044dfbe7fa75685348f17 Mon Sep 17 00:00:00 2001
From: Thomas Mueller <th.mueller@fz-juelich.de>
Date: Fri, 11 Aug 2023 13:03:46 +0200
Subject: [PATCH]  updated for open source MIT version of CPMD

---
 Custom_EasyBlocks/cpmd.py | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/Custom_EasyBlocks/cpmd.py b/Custom_EasyBlocks/cpmd.py
index 25b382968..8885f4b26 100644
--- a/Custom_EasyBlocks/cpmd.py
+++ b/Custom_EasyBlocks/cpmd.py
@@ -36,7 +36,8 @@ EasyBuild support for building and installing CPMD, implemented as an easyblock
 #the pseudo-fix is to remove installdir/obj as postinstallcmds from the easyconfig file
 #the documentation was missing and is now added in a somewhat weird procedure
 #to the builddir and subsequently copied to the installdir/doc via postinstallcmds from the easyconfig file
-#the hybrid MPI/OMP version can solely installed through the openmp toolchain option
+#the hybrid version is installed via prefix_opt = '-omp -DEST=' independent of toolchain options in easyconfig file
+# 
 #the cuda implementation is ignored
 #
 
@@ -68,6 +69,7 @@ class EB_CPMD(ConfigureMake):
         """Custom easyconfig parameters for CPMD."""
         extra_vars = {
             'base_configuration': [None, "Base configuration from which to start (file name)", CUSTOM],
+            'MIT' : [None, "Open-Source Version of CPMD (MIT licence)",CUSTOM],
         }
         return ConfigureMake.extra_options(extra_vars)
 
@@ -89,7 +91,12 @@ class EB_CPMD(ConfigureMake):
         config_file_candidates = []
 
         for confdirname in ["configure", "CONFIGURE"]:
-            config_file_prefix = os.path.join(self.builddir, "CPMD", confdirname)
+            if self.cfg['MIT']:
+                 cpmdname = 'CPMD-%s' % self.version
+            else:
+                 cpmdname = 'CPMD'
+
+            config_file_prefix = os.path.join(self.builddir, cpmdname , confdirname)
             if os.path.isdir(config_file_prefix):
                 break
         else:
@@ -149,6 +156,8 @@ class EB_CPMD(ConfigureMake):
                 (r"^(\s*CC=.*)", r"#\1"),
                 (r"^(\s*FC=.*)", r"#\1"),
                 (r"^(\s*LD)=.*", r"\1='$(FC)'"),
+                (r" -openmp ", r" -qopenmp "),
+                (r"-mkl=", r"-qmkl="),
             ])
         except IOError as err:
             raise EasyBuildError("Failed to patch %s: %s", selected_base_config, err)
@@ -174,8 +183,8 @@ class EB_CPMD(ConfigureMake):
         options = [self.cfg['configopts']]
 
         # enable OpenMP support if desired
-        if self.toolchain.options.get('openmp', None) and LooseVersion(self.version) >= LooseVersion('4.0'):
-            options.append("-omp")
+#       if self.toolchain.options.get('openmp', None) and LooseVersion(self.version) >= LooseVersion('4.0'):
+#           options.append("-omp")
 
         # This "option" has to come last as it's the chief argument, coming after
         # all flags and so forth.
@@ -240,11 +249,12 @@ class EB_CPMD(ConfigureMake):
             if preproc_flag is None:
                 preproc_flag = ''
 
+# do not use default='None' for CPPFLAGS
             apply_regex_substitutions(makefile, [
-                (r"^(\s*CPPFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CPPFLAGS'))),
-                (r"^(\s*CFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('CFLAGS'))),
-                (r"^(\s*FFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('FFLAGS'))),
-                (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('LDFLAGS'))),
+                (r"^(\s*CPPFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CPPFLAGS','  '))),
+                (r"^(\s*CFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('CFLAGS','  '))),
+                (r"^(\s*FFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('FFLAGS','  '))),
+                (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('LDFLAGS','  '))),
 
                 # Allow to define own XFLAGS
                 (r"# CPPFLAGS =", r"CPPFLAGS +="),
@@ -259,14 +269,14 @@ class EB_CPMD(ConfigureMake):
             ])
             if self.toolchain.options.get('openmp', None):
                 apply_regex_substitutions(makefile, [
-                    (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0} {1}".format(os.getenv('LIBLAPACK_MT'), os.getenv('LIBBLAS_MT')))
+                    (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0} {1}".format(os.getenv('LIBLAPACK_MT',' '), os.getenv('LIBBLAS_MT',' ')))
                 ])
             else:
                 apply_regex_substitutions(makefile, [
-                    (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0} {1}".format(os.getenv('LIBLAPACK'), os.getenv('LIBBLAS')))
+                    (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0} {1}".format(os.getenv('LIBLAPACK',' '), os.getenv('LIBBLAS',' ')))
                 ])
             apply_regex_substitutions(makefile, [
-                (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('LIBFFT'))),
+                (r"^(\s*LFLAGS\s*=.*)",   r"\1 {0}".format(os.getenv('LIBFFT',' '))),
             ])
 
             if get_software_root('imkl'):
-- 
GitLab