[cig-commits] commit: Wasn't configuring for parallel HDF5, so I've

Mercurial hg at geodynamics.org
Mon Nov 24 11:22:58 PST 2008


changeset:   63:9a5fcf16bce3
user:        LukeHodkinson
date:        Fri Mar 28 01:21:04 2008 +0000
files:       config/SConfig/Package.py config/SConfig/packages/HDF5.py config/packages/stgMagma.py
description:
Wasn't configuring for parallel HDF5, so I've
added some symbol checks for this. Also, I've
added a mechanism for including extra libraries
required by certain packages.


diff -r 1483f61ab37e -r 9a5fcf16bce3 config/SConfig/Package.py
--- a/config/SConfig/Package.py	Thu Mar 27 23:48:58 2008 +0000
+++ b/config/SConfig/Package.py	Fri Mar 28 01:21:04 2008 +0000
@@ -22,6 +22,7 @@ class Package(SConfig.Node):
 
         # Library options.
         self.libraries           = [] #[['']]
+        self.extra_libraries     = [] #['']
         self.shared_libraries    = [] # Only libraries listed here will be considered
                                       # when checking for shared libraries.
         self.require_shared      = False
@@ -371,9 +372,9 @@ int main(int argc, char* argv[]) {
 
     def generate_libraries(self, location):
         if location[3]: # Try any frameworks by themselves first.
-            yield []
+            yield self.extra_libraries
         for libs in self.libraries:
-            yield libs
+            yield libs + self.extra_libraries
 
     def enable_location_state(self, location):
         """Modify our environment to include search paths for the current location."""
diff -r 1483f61ab37e -r 9a5fcf16bce3 config/SConfig/packages/HDF5.py
--- a/config/SConfig/packages/HDF5.py	Thu Mar 27 23:48:58 2008 +0000
+++ b/config/SConfig/packages/HDF5.py	Fri Mar 28 01:21:04 2008 +0000
@@ -4,5 +4,45 @@ class HDF5(SConfig.Package):
 class HDF5(SConfig.Package):
     def __init__(self, scons_env, scons_opts, required=False):
         SConfig.Package.__init__(self, scons_env, scons_opts, required)
-        self.headers = [['hdf5.h']]
-        self.libraries = [['hdf5']]
+        self.require_parallel = False
+        self.headers = [["hdf5.h"]]
+        self.libraries = [["hdf5"]]
+
+    def setup(self):
+        if self.require_parallel:
+            self.dependency(SConfig.packages.MPI)
+            self.symbols = [(["H5Pset_dxpl_mpio", "H5Pset_fapl_mpio"], "")]
+            self.symbol_calls = ["%s( dxpl_props, H5FD_MPIO_COLLECTIVE );",
+                                 "%s( fapl_props, MPI_COMM_WORLD, MPI_INFO_NULL );"]
+            self.symbol_setup = """hid_t dxpl_props, fapl_props;
+MPI_Init( &argc, &argv );
+dxpl_props = H5Pcreate( H5P_DATASET_XFER );
+fapl_props = H5Pcreate( H5P_FILE_ACCESS );
+"""
+            self.symbol_teardown = """H5Pclose( dxpl_props );
+H5Pclose( fapl_props );
+MPI_Finalize();
+"""
+
+    def generate_locations(self):
+        for loc in SConfig.Package.generate_locations(self):
+            extra_libs = []
+            for lib_dir in loc[2]:
+                set_file = os.path.join(loc[0], lib_dir, "libhdf5.settings")
+                if os.path.exists(set_file):
+                    f = open(set_file, "r")
+                    for line in f.readlines():
+                        if line.find("Extra libraries") != -1:
+                            dict = self.env.ParseFlags(line.split(":")[1])
+                            extra_libs = dict.get('LIBS', [])
+                            break
+            old_libs = self.extra_libraries
+            self.extra_libraries += extra_libs
+            yield loc
+            self.extra_libraries = old_libs
+
+    def get_check_symbols_fail_reason(self, fail_logs):
+        for log in fail_logs:
+            if log.find("_mpio'"):
+                return "Not a parallel HDF5 implementation."
+        return ''
diff -r 1483f61ab37e -r 9a5fcf16bce3 config/packages/stgMagma.py
--- a/config/packages/stgMagma.py	Thu Mar 27 23:48:58 2008 +0000
+++ b/config/packages/stgMagma.py	Fri Mar 28 01:21:04 2008 +0000
@@ -12,7 +12,7 @@ class stgMagma(SConfig.Node):
         self.dependency(SConfig.packages.BlasLapack)
         self.dependency(SConfig.packages.PETSc)
         self.dependency(SConfig.packages.PETScExt)
-        self.dependency(SConfig.packages.HDF5)
+        self.dependency(SConfig.packages.HDF5).require_parallel = True
         if self.env['with_glucifer']:
             self.dependency(SConfig.packages.OpenGL)
             self.dependency(SConfig.packages.OSMesa, False)



More information about the CIG-COMMITS mailing list