[Numpy-svn] r4115 - in branches/numpy.scons: . numpy/distutils/command numpy/distutils/scons numpy/scons_fake

numpy-svn@scip... numpy-svn@scip...
Mon Sep 24 06:38:14 CDT 2007


Author: cdavid
Date: 2007-09-24 06:37:58 -0500 (Mon, 24 Sep 2007)
New Revision: 4115

Modified:
   branches/numpy.scons/
   branches/numpy.scons/numpy/distutils/command/scons.py
   branches/numpy.scons/numpy/distutils/scons/__init__.py
   branches/numpy.scons/numpy/scons_fake/SConstruct
Log:
* Start implementing scons checker which take into account site.cfg files
* Intel compiler in non standard path better handled now



Property changes on: branches/numpy.scons
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2007-09-24 17:30:08.612999916 +0900
committer: David Cournapeau <david@ar.media.kyoto-u.ac.jp>
properties: 
	branch-nick: numpy.scons

   + timestamp: 2007-09-24 20:23:51.194999933 +0900
committer: David Cournapeau <david@ar.media.kyoto-u.ac.jp>
properties: 
	branch-nick: numpy.scons

Name: bzr:file-ids
   - numpy/doc/example.py	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fexample.py
numpy/doc/HOWTO_DOCUMENT.txt	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2FHOWTO_DOCUMENT.txt
numpy/doc/html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml
numpy/doc/html/epydoc.js	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fepydoc.js
numpy/doc/html/example-pysrc.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fexample-pysrc.html
numpy/doc/html/example-module.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fexample-module.html
numpy/doc/html/toc-everything.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Ftoc-everything.html
numpy/doc/html/api-objects.txt	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fapi-objects.txt
numpy/doc/html/toc-example-module.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Ftoc-example-module.html
numpy/doc/html/redirect.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fredirect.html
numpy/doc/html/identifier-index.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fidentifier-index.html
numpy/doc/html/index.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Findex.html
numpy/doc/html/help.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fhelp.html
numpy/doc/html/frames.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fframes.html
numpy/doc/html/crarr.png	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fcrarr.png
numpy/doc/html/epydoc.css	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fepydoc.css
numpy/doc/html/module-tree.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Fmodule-tree.html
numpy/doc/html/toc.html	4112@94b884b6-d6fd-0310-90d3-974f1d3f35e1:branches%2Fnumpy.scons:numpy%2Fdoc%2Fhtml%2Ftoc.html

   + 
Name: bzr:revision-id:v3-trunk0
   - 3737 david@david-laptop-20070920080908-n8pj8vmszdir3zoa
3738 david@david-laptop-20070920081509-58kkojgmml3t7jxs
3739 david@david-laptop-20070920081910-phlk1ujthksgpm0z
3740 david@david-laptop-20070920082641-bdhrt6eafeoli50i
3741 david@ar.media.kyoto-u.ac.jp-20070920130730-satdeppbh1k0bq2p
3743 david@ar.media.kyoto-u.ac.jp-20070921073742-vpv8pwv0j8fbd93m
3744 david@david-laptop-20070922101656-61kfi2faucemr2rl
3745 david@david-laptop-20070922113708-ror18thshang1cpu
3747 david@david-laptop-20070922140534-n9xsl096tjrzmct1
3749 david@david-laptop-20070922154007-usit009fr6vp377j
3750 david@david-laptop-20070923070011-leu2ozc2fy1q5cht
3751 david@david-laptop-20070924015925-dhsiao40jp7zsfp9
3752 david@ar.media.kyoto-u.ac.jp-20070924070657-nbw23j0ayan30cli
3753 david@ar.media.kyoto-u.ac.jp-20070924082918-i1lc1zikywi8czj4
3754 david@ar.media.kyoto-u.ac.jp-20070924083008-c0edtt8zs31yeh1q

   + 3737 david@david-laptop-20070920080908-n8pj8vmszdir3zoa
3738 david@david-laptop-20070920081509-58kkojgmml3t7jxs
3739 david@david-laptop-20070920081910-phlk1ujthksgpm0z
3740 david@david-laptop-20070920082641-bdhrt6eafeoli50i
3741 david@ar.media.kyoto-u.ac.jp-20070920130730-satdeppbh1k0bq2p
3743 david@ar.media.kyoto-u.ac.jp-20070921073742-vpv8pwv0j8fbd93m
3744 david@david-laptop-20070922101656-61kfi2faucemr2rl
3745 david@david-laptop-20070922113708-ror18thshang1cpu
3747 david@david-laptop-20070922140534-n9xsl096tjrzmct1
3749 david@david-laptop-20070922154007-usit009fr6vp377j
3750 david@david-laptop-20070923070011-leu2ozc2fy1q5cht
3751 david@david-laptop-20070924015925-dhsiao40jp7zsfp9
3752 david@ar.media.kyoto-u.ac.jp-20070924070657-nbw23j0ayan30cli
3753 david@ar.media.kyoto-u.ac.jp-20070924082918-i1lc1zikywi8czj4
3754 david@ar.media.kyoto-u.ac.jp-20070924083008-c0edtt8zs31yeh1q
3755 david@ar.media.kyoto-u.ac.jp-20070924112351-pnnho638cohz6lj1


Modified: branches/numpy.scons/numpy/distutils/command/scons.py
===================================================================
--- branches/numpy.scons/numpy/distutils/command/scons.py	2007-09-24 11:36:47 UTC (rev 4114)
+++ branches/numpy.scons/numpy/distutils/command/scons.py	2007-09-24 11:37:58 UTC (rev 4115)
@@ -9,13 +9,14 @@
 
 def dist2sconscc(compiler):
     """This converts the name passed to distutils to scons name convention (C
-    compiler).
+    compiler). The argument should be a CCompiler instance.
 
     Example:
-        --compiler=intel -> icc."""
-    # Geez, why does distutils has no common way to get the compiler name...
+        --compiler=intel -> intelc"""
     if compiler.compiler_type == 'msvc':
         return 'msvc'
+    elif compiler.compiler_type == 'intel':
+        return 'intelc'
     else:
         return compiler.compiler[0]
 

Modified: branches/numpy.scons/numpy/distutils/scons/__init__.py
===================================================================
--- branches/numpy.scons/numpy/distutils/scons/__init__.py	2007-09-24 11:36:47 UTC (rev 4114)
+++ branches/numpy.scons/numpy/distutils/scons/__init__.py	2007-09-24 11:37:58 UTC (rev 4115)
@@ -1,10 +1,12 @@
 from os.path import join as pjoin
 import os.path
+import ConfigParser
 
 from SCons.Options import Options
 from SCons.Tool import Tool
 from SCons.Environment import Environment
 from SCons.Script import BuildDir, Help
+#from SCons.Util import BuildDir, Help
 
 # XXX: all this should be put in another files eventually once it is getting in
 # shape
@@ -57,6 +59,8 @@
 
 def GetNumpyEnvironment(args):
     """Call this with args = ARGUMENTS."""
+    # XXX: I would prefer subclassing Environment, because we really expect
+    # some different behaviour than just Environment instances...
     opts = GetNumpyOptions(args)
     env = Environment(options = opts)
 
@@ -66,13 +70,26 @@
                                                   env['pkg_name']))
 
     # Setting tools according to command line options
+    # XXX: how to handle tools which are not in standard location ? Is adding
+    # the full path of the compiler enough ? (I am sure some compilers also
+    # need LD_LIBRARY_SHARED and other variables to be set, too....)
     if len(env['cc_opt']) > 0:
         try:
-            t = Tool(env['cc_opt'])
-            t(env) 
             if len(env['cc_opt_path']) > 0:
-                # XXX: what is the right way to add one directory in the PATH ?
-                env['ENV']['PATH'] += ':%s' % env['cc_opt_path']
+                if env['cc_opt'] == 'intelc':
+                    # Intel Compiler SCons.Tool has a special way to set the
+                    # path, so we use this one instead of changing
+                    # env['ENV']['PATH'].
+                    t = Tool(env['cc_opt'], 
+                             topdir = os.path.split(env['cc_opt_path'])[0])
+                    t(env) 
+                else:
+                    # XXX: what is the right way to add one directory in the
+                    # PATH ? (may not work on windows).
+                    env['ENV']['PATH'] += ':%s' % env['cc_opt_path']
+            else:
+                t = Tool(env['cc_opt'])
+                t(env) 
         except EnvironmentError, e:
             # scons could not understand cc_opt (bad name ?)
             raise AssertionError("SCONS: Could not initialize tool ? Error is %s" % \
@@ -91,13 +108,90 @@
     # Generate help (if calling scons directly during debugging, this could be useful)
     Help(opts.GenerateHelpText(env))
 
-    #print "setup.cfg abspath is %s" % pjoin(env['src_dir'], 'setup.cfg')
-    find_config_file()
+    # Getting the config options from *.cfg files
+    config = get_config()
+    env['NUMPYCONFIG'] = config
+
     return env
 
-def find_config_file(name = 'site.cfg'):
-    import ConfigParser
+def _get_empty(dict, key):
+    print "++++++ Deprecated, do not use _get_empty +++++++++"
+    try:
+        return dict[key]
+    except KeyError, e:
+        return []
 
+def NumpyCheckLib(context, section, libs, symbol = None):
+    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+    # This is really preliminary, and needs a lot of love before being in good
+    # shape !!!!!
+    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+    # XXX: handle extension in arg list
+    extension = '.c'
+    # XXX: handle symbol
+    src = """
+int main(int argc, char** argv)
+{
+    return 0;
+}"""
+    config = context.env['NUMPYCONFIG']
+    context.Message('Checking for library %s...' % libs)
+    if config.has_section(section):
+        #print "Checking %s from section %s" % (library, section)
+        try:
+            # XXX: handle list of directories here
+            # XXX: factorize this away
+            newLIBPATH = config.get(section, 'library_dirs') 
+            newCPPPATH = config.get(section, 'include_dirs') 
+            newLIBS = config.get(section, 'libraries') 
+            lastLIBPATH = _get_empty(context.env, 'LIBPATH')
+            lastLIBS = _get_empty(context.env, 'LIBS')
+            lastCPPPATH = _get_empty(context.env, 'CPPPATH')
+            # TODO: convert newLIBS to a list of libraries
+            # TODO: is library always a string, or can be a list ?
+            context.env.Append(LIBS = [libs], LIBPATH = [newLIBPATH])
+            res = context.TryLink(src, extension)
+            if not res:
+                context.env.Replace(LIBS = lastLIBS, 
+                                    LIBPATH = lastLIBPATH, 
+                                    CPPPATH = lastCPPPATH)
+        except ConfigParser.NoOptionError, e:
+            print "+++++++++++++++++++++++++++++++"
+            print e
+            print "+++++++++++++++++++++++++++++++"
+            res = 0
+    else:
+        lastLIBPATH = _get_empty(context.env, 'LIBPATH')
+        lastCPPPATH = _get_empty(context.env, 'CPPPATH')
+        lastLIBS = context.AppendLIBS([libs])
+        res = context.TryLink(src, extension)
+        if not res:
+            context.env.Replace(LIBS = lastLIBS, 
+                                LIBPATH = lastLIBPATH, 
+                                CPPPATH = lastCPPPATH)
+    return context.Result(res)
+
+def get_config():
+    """ This tries to read .cfg files in several locations, and merge its
+    information into a ConfigParser object for the first found file.
+    
+    Returns the ConfigParser instance. This copies the logic in system_info
+    from numpy.distutils."""
+    # Below is the feature we are copying from numpy.distutils:
+    # 
+    # The file 'site.cfg' is looked for in
+
+    # 1) Directory of main setup.py file being run.
+    # 2) Home directory of user running the setup.py file as ~/.numpy-site.cfg
+    # 3) System wide directory (location of this file...)
+
+    # The first one found is used to get system configuration options The
+    # format is that used by ConfigParser (i.e., Windows .INI style). The
+    # section DEFAULT has options that are the default for each section. The
+    # available sections are fftw, atlas, and x11. Appropiate defaults are
+    # used if nothing is specified.
+
     from numpy.distutils.system_info import default_lib_dirs
     from numpy.distutils.system_info import default_include_dirs
     from numpy.distutils.system_info import default_src_dirs
@@ -120,7 +214,4 @@
             cp.add_section(section)
 
     parse_config_files()
-    #print cp.sections()
-    #print dir(cp)
-    #print cp.get.__doc__
-    print cp.get('sndfile', 'include_dirs')
+    return cp

Modified: branches/numpy.scons/numpy/scons_fake/SConstruct
===================================================================
--- branches/numpy.scons/numpy/scons_fake/SConstruct	2007-09-24 11:36:47 UTC (rev 4114)
+++ branches/numpy.scons/numpy/scons_fake/SConstruct	2007-09-24 11:37:58 UTC (rev 4115)
@@ -1,12 +1,13 @@
 # vim:syntax=python
-from numpy.distutils.scons import GetNumpyEnvironment
+from numpy.distutils.scons import GetNumpyEnvironment, NumpyCheckLib
 
 env = GetNumpyEnvironment(ARGUMENTS)
 
-config = env.Configure()
+config = env.Configure(custom_tests = {'NumpyCheckLib' : NumpyCheckLib})
 config.CheckHeader('stdio.h')
 config.CheckLib('c', 'printf')
-config.CheckLib('sndfile', 'sf_open')
+#config.NumpyCheckLib('sndfile', 'sndfile', 'sf_open')
+config.NumpyCheckLib('bmeps', 'bmeps')
 config.Finish()
 
 source = ['foo.c']



More information about the Numpy-svn mailing list