[cig-commits] commit: Updating.

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


changeset:   42:e1e00dd011f9
user:        LukeHodkinson
date:        Fri Mar 07 01:51:29 2008 +0000
files:       config/SConfig/Package.py config/SConfig/SConscript config/SConfig/packages/BlasLapack.py config/SConfig/packages/PETSc.py config/SConfig/packages/PICellerator.py config/SConfig/packages/SVNRevision.py config/SConfig/packages/StGermain.py config/SConfig/packages/StgDomain.py config/SConfig/packages/StgFEM.py config/SConfig/packages/__init__.py config/packages/stgMagma.py
description:
Updating.


diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/Package.py
--- a/config/SConfig/Package.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/Package.py	Fri Mar 07 01:51:29 2008 +0000
@@ -3,7 +3,7 @@ import SConfig
 import SConfig
 
 class Package(object):
-    def __init__(self, env, options=None, required=True):
+    def __init__(self, env, options=None, required=False):
         # Construct this package's name.
         self.name = self.__module__.split('.')[-1]
         self.option_name = self.name.lower()
@@ -24,9 +24,6 @@ class Package(object):
         self.setup_options()
         if self.opts:
             self.opts.Update(env)
-
-        # Is this package essential?
-        self.required          = required
 
         # Language options.
         self.language          = 'C' # 'C' | 'CXX' | 'F77'
@@ -76,6 +73,7 @@ class Package(object):
         # Private stuff.
         self.env = env
         self.deps = []
+        self.required = required
 
         self.setup_search_defaults()
 
@@ -146,22 +144,29 @@ class Package(object):
         # If we have shared libraries enabled, we must ensure the dynamic loader
         # package is included.
         if self.require_shared:
-            self.pkg_dl = self.require(SConfig.packages.dl)
+            self.pkg_dl = self.dependency(SConfig.packages.dl)
 
         # Process dependencies first.
-        self.process_dependencies()
+        result = self.process_dependencies()
+        if not result[0]:
+            self.ctx.Display('  ' + result[2])
+            self.result = result
+            return result
 
         # Process options.
         self.process_options()
 
         # Perfrom actual configuration.
+        self.ctx.Message('Checking for package %s ... ' % self.name)
+        self.ctx.Display('\n')
         for check in self.checks:
             result = check()
-            if not result[0]:
+            self.result = result
+            if not self.result[0]:
                 break
 
         # Required?
-        if self.required and not result[0]:
+        if self.required and not self.result[0]:
             self.ctx.Display('\nThe required package ' + self.name + ' could not be found.\n')
             self.ctx.Display('The printouts above should provide some information on what went wrong,\n')
             self.ctx.Display('To see further details, please read the \'config.log\' file.\n')
@@ -174,23 +179,32 @@ class Package(object):
             self.env.Exit()
 
         # If we succeeded, store the resulting environment.
-        if result[0]:
+        if self.result[0]:
             if self.have_define:
                 self.cpp_defines += [self.have_define]
             self.build_state()
             self.push_state(self.state)
 
-        return result
-
-    def require(self, package_module):
+        # Display results.
+        if not self.result[0] and self.result[2]:
+            self.ctx.Display('   ' + self.result[2])
+        self.ctx.Display('   ')
+        self.ctx.Result(self.result[0])
+
+        return self.result
+
+    def dependency(self, package_module, required=True):
         pkg = self.env.Package(package_module, self.opts)
-        self.deps += [pkg]
+        self.deps += [(pkg, required)]
         return pkg
 
     def process_dependencies(self):
         """Ensure all dependencies have been configured before this package."""
-        for pkg in self.deps:
+        for pkg, req in self.deps:
             pkg.configure(self.ctx)
+            if req and not pkg.result[0]:
+                return [0, '', 'Missing dependency: ' + pkg.name]
+        return [1, '', '']
 
     def process_options(self):
         """Do any initial option processing, including importing any values from
@@ -208,24 +222,16 @@ class Package(object):
 
     def find_package(self):
         # Search for package locations.
-        self.ctx.Message('Checking for package %s ... ' % self.name)
-        self.ctx.Display('\n   Searching locations:\n')
+        self.ctx.Display('   Searching locations:\n')
         for loc in self.generate_locations():
             result = self.check_location(loc)
             self.ctx.Display('      %s\n' % str(loc))
-
-            # If we succeeded, back out here.
-            if result[0]:
-                break
-
-            # Display an error message.
-            if result[2]:
+            if result[0]: # If we succeeded, back out here.
+                break
+            if result[2]: # Display an error message.
                 self.ctx.Display('         %s\n' % result[2])
 
-        # Display results.
-        self.ctx.Display('   ')
-        self.ctx.Result(result[0])
-
+        result = [result[0], '', '']
         return result
 
     def check_location(self, location):
@@ -531,7 +537,7 @@ int main(int argc, char* argv[]) {
         if not self.result[0]:
             return
         headers += [h for h in self.hdrs if h not in headers]
-        for d in self.deps:
+        for d, r in self.deps:
             d.get_all_headers(headers)
 
     def get_header_source(self, headers=None):
@@ -540,7 +546,7 @@ int main(int argc, char* argv[]) {
             hdrs = list(self.hdrs)
         else:
             hdrs = list(headers)
-        for d in self.deps:
+        for d, r in self.deps:
             d.get_all_headers(hdrs)
         for h in hdrs:
             src += '#include<' + h + '>\n'
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/SConscript
--- a/config/SConfig/SConscript	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/SConscript	Fri Mar 07 01:51:29 2008 +0000
@@ -47,8 +47,23 @@ def load_config(env, filename):
     for k, v in d.iteritems():
         env[k] = v
 
+def force_required(pkg):
+    for d in pkg.deps:
+        d.required = True
+        force_required(d)
+
 def configure_packages(env, options=None, output='config.cfg'):
     sconf = Configure(env, custom_tests={'CheckPackages': CheckPackages})
+
+    # Update dependencies and requirements.
+    pkgs_rem = list(env.package_list)
+    while len(pkgs_rem):
+        pkg = pkgs_rem.pop()
+        if pkg.required:
+            for d, r in pkg.deps:
+                if r and not d.required:
+                    d.required = True
+                    pkgs_rem += [d]
 
     # Call the packages checker.
     sconf.CheckPackages(env.package_list)
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/BlasLapack.py
--- a/config/SConfig/packages/BlasLapack.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/BlasLapack.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,7 +4,7 @@ class BlasLapack(SConfig.Package):
 class BlasLapack(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.cmath = self.require(SConfig.packages.cmath)
+        self.cmath = self.dependency(SConfig.packages.cmath)
         self.libraries = [['blas', 'lapack'],
                           ['cblas', 'clapack'],
                           ['mkl', 'mkl_lapack']]
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/PETSc.py
--- a/config/SConfig/packages/PETSc.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/PETSc.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,7 +4,7 @@ class PETSc(SConfig.Package):
 class PETSc(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.require(SConfig.packages.MPI)
+        self.dependency(SConfig.packages.MPI)
         self.base_patterns = ['petsc*', 'PETSC*', 'PETSc*']
         self.header_sub_dir = 'petsc'
         self.headers = [['petsc.h',
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/PICellerator.py
--- a/config/SConfig/packages/PICellerator.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/PICellerator.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,9 +4,9 @@ class PICellerator(SConfig.Package):
 class PICellerator(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.require(SConfig.packages.StGermain)
-        self.require(SConfig.packages.StgDomain)
-        self.require(SConfig.packages.StgFEM)
+        self.dependency(SConfig.packages.StGermain)
+        self.dependency(SConfig.packages.StgDomain)
+        self.dependency(SConfig.packages.StgFEM)
         self.base_patterns = ['PICellerator*']
         self.headers = [[os.path.join('PICellerator', 'PICellerator.h')]]
         self.libraries = [['PICellerator']]
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/SVNRevision.py
--- a/config/SConfig/packages/SVNRevision.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/SVNRevision.py	Fri Mar 07 01:51:29 2008 +0000
@@ -8,12 +8,13 @@ class SVNRevision(SConfig.Package):
         self.define_name = 'VERSION'
         self.checkout_path = os.getcwd()
 
+    def setup_options(self):
+        pass
+
     def extract_revision(self):
-        print 'Extracting subversion revision number ... ',
         svn_path = os.path.join(self.checkout_path, '.svn', 'entries')
         if not os.path.exists(svn_path):
-            print '\n   Could not find .svn directory.'
-            return [0, '', '']
+            return [0, '', 'Could not find .svn directory']
         f = file(svn_path, 'r')
         f.readline()
         f.readline()
@@ -21,5 +22,4 @@ class SVNRevision(SConfig.Package):
         ver = self.env['ESCAPE']('"' + str(int(f.readline())) + '"')
         f.close()
         self.cpp_defines += [(self.define_name, ver)]
-        print 'okay'
         return [1, '', '']
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/StGermain.py
--- a/config/SConfig/packages/StGermain.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/StGermain.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,9 +4,9 @@ class StGermain(SConfig.Package):
 class StGermain(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.require(SConfig.packages.cmath)
-        self.require(SConfig.packages.libXML2)
-        self.require(SConfig.packages.MPI)
+        self.dependency(SConfig.packages.cmath)
+        self.dependency(SConfig.packages.libXML2)
+        self.dependency(SConfig.packages.MPI)
         self.base_patterns = ['StGermain*']
         self.headers = [[os.path.join('StGermain', 'StGermain.h')]]
         self.libraries = [['StGermain']]
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/StgDomain.py
--- a/config/SConfig/packages/StgDomain.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/StgDomain.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,7 +4,7 @@ class StgDomain(SConfig.Package):
 class StgDomain(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.require(SConfig.packages.StGermain)
+        self.dependency(SConfig.packages.StGermain)
         self.base_patterns = ['StgDomain*']
         self.headers = [[os.path.join('StgDomain', 'StgDomain.h')]]
         self.libraries = [['StgDomain']]
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/StgFEM.py
--- a/config/SConfig/packages/StgFEM.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/StgFEM.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,8 +4,8 @@ class StgFEM(SConfig.Package):
 class StgFEM(SConfig.Package):
     def __init__(self, env, options):
         SConfig.Package.__init__(self, env, options)
-        self.require(SConfig.packages.StGermain)
-        self.require(SConfig.packages.StgDomain)
+        self.dependency(SConfig.packages.StGermain)
+        self.dependency(SConfig.packages.StgDomain)
         self.base_patterns = ['StgFEM*']
         self.headers = [[os.path.join('StgFEM', 'StgFEM.h')]]
         self.libraries = [['StgFEM']]
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/SConfig/packages/__init__.py
--- a/config/SConfig/packages/__init__.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/SConfig/packages/__init__.py	Fri Mar 07 01:51:29 2008 +0000
@@ -1,6 +1,7 @@ from libXML2 import libXML2
 from libXML2 import libXML2
 from MPI import MPI
 from PETSc import PETSc
+from PETScExt import PETScExt
 from cmath import cmath
 from SVNRevision import SVNRevision
 from BlasLapack import BlasLapack
diff -r 7bf48ba7b8e2 -r e1e00dd011f9 config/packages/stgMagma.py
--- a/config/packages/stgMagma.py	Fri Mar 07 00:31:52 2008 +0000
+++ b/config/packages/stgMagma.py	Fri Mar 07 01:51:29 2008 +0000
@@ -4,33 +4,25 @@ import SCons.Script
 
 class stgMagma(SConfig.Package):
     def __init__(self, env, options):
-        SConfig.Package.__init__(self, env, options)
+        SConfig.Package.__init__(self, env, options, True)
         self.checks = [self.setup_environment]
-        self.require(SConfig.packages.cmath)
-        self.require(SConfig.packages.libXML2)
-        self.require(SConfig.packages.MPI)
-        self.require(SConfig.packages.SVNRevision)
-        self.require(SConfig.packages.BlasLapack)
-        self.require(SConfig.packages.PETSc)
-        self.require(SConfig.packages.HDF5)
+        self.dependency(SConfig.packages.cmath)
+        self.dependency(SConfig.packages.libXML2)
+        self.dependency(SConfig.packages.MPI)
+        self.dependency(SConfig.packages.SVNRevision)
+        self.dependency(SConfig.packages.BlasLapack)
+        self.dependency(SConfig.packages.PETSc)
+        self.dependency(SConfig.packages.HDF5)
         if self.env['with_glucifer']:
-            self.require(SConfig.packages.OpenGL)
-            mesa = self.require(SConfig.packages.OSMesa)
-            mesa.required = False
-            x11 = self.require(SConfig.packages.X11)
-            x11.required = False
-            sdl = self.require(SConfig.packages.SDL)
-            sdl.required = False
-            avc = self.require(SConfig.packages.libavcodec)
-            avc.required = False
-            fame = self.require(SConfig.packages.libFAME)
-            fame.required = False
-            png = self.require(SConfig.packages.libPNG)
-            png.required = False
-            jpg = self.require(SConfig.packages.libJPEG)
-            jpg.required = False
-            tiff = self.require(SConfig.packages.libTIFF)
-            tiff.required = False
+            self.dependency(SConfig.packages.OpenGL)
+            self.dependency(SConfig.packages.OSMesa, False)
+            self.dependency(SConfig.packages.X11, False)
+            self.dependency(SConfig.packages.SDL, False)
+            self.dependency(SConfig.packages.libavcodec, False)
+            self.dependency(SConfig.packages.libFAME, False)
+            self.dependency(SConfig.packages.libPNG, False)
+            self.dependency(SConfig.packages.libJPEG, False)
+            self.dependency(SConfig.packages.libTIFF, False)
 
     def setup_options(self):
         SConfig.Package.setup_options(self)



More information about the CIG-COMMITS mailing list