Revision: 492
          http://rpy.svn.sourceforge.net/rpy/?rev=492&view=rev
Author:   lgautier
Date:     2008-04-17 12:12:30 -0700 (Thu, 17 Apr 2008)

Log Message:
-----------
ported/adapted RPy1's multiple-R versions feature

Modified Paths:
--------------
    branches/rpy_nextgen/setup.py

Modified: branches/rpy_nextgen/setup.py
===================================================================
--- branches/rpy_nextgen/setup.py       2008-04-16 19:16:28 UTC (rev 491)
+++ branches/rpy_nextgen/setup.py       2008-04-17 19:12:30 UTC (rev 492)
@@ -1,9 +1,15 @@
 
-import os, os.path, sys, shutil
+import os, os.path, sys, shutil, re, itertools
 from distutils.core import setup, Extension
 from subprocess import Popen, PIPE
 
 
+try:
+    import ctypes
+except Exception, e:
+    print(e)
+    print("A working 'ctypes' module is required.")
+    sys.exit(1)
 
 
 RHOMES = os.getenv('RHOMES')
@@ -19,15 +25,46 @@
     RHOMES = RHOMES.split(os.pathsep)
 
 
+def get_rversion(RHOME):
+    r_exec = os.path.join(RHOME, 'bin', 'R')
+    rp = os.popen(r_exec+' --version')
+    rversion = rp.readline()
+    m = re.match('^R version ([^ ]+) .+$', rversion)
+    rversion = m.groups()[0]
+    rversion = [int(x) for x in rversion.split('.')]
+    return rversion
+
+def cmp_version(x, y):
+    if (x[0] < y[0]):
+        return -1
+    if (x[0] > y[0]):
+        return 1
+    if (x[0] == y[0]):
+        if len(x) == 1 or len(y) == 1:
+            return 0
+        return cmp_version(x[1:], y[1:])
+
+rnewest = [0, 0, 0]
+rversions = []
 for RHOME in RHOMES:
     RHOME = RHOME.strip()
     print('R\'s home is:%s' %RHOME)
+    rversion = get_rversion(RHOME)
+    if (cmp_version(rversion, rnewest) == +1):
+        rnewest = rversion
+    rversions.append(rversion)
 
+def doSetup(RHOME, r_packversion):
     r_libs = [os.path.join(RHOME, 'lib'), os.path.join(RHOME, 'modules')]
 
+    pack_name = 'rpy2'
+    pack_version = '0.0.1'
+    if r_packversion is not None:
+        pack_name = pack_name + '_' + r_packversion
+        pack_version = pack_version + '_' + r_packversion
 
     rinterface = Extension(
-            "rpy2.rinterface.rinterface",
+            pack_name + ".rinterface.rinterface",
             ["rpy/rinterface/rinterface.c", ],
             include_dirs=[ os.path.join(RHOME, 'include'),],
             libraries=['R', 'Rlapack', 'Rblas'],
@@ -36,16 +73,30 @@
             #extra_link_args=[],
             )
 
-    setup(name="rpython",
-          version="0.0.1",
-          description="Python interface to the R language",
-          url="http://rpy.sourceforge.net";,
-          license="(L)GPL",
+    setup(name = "rpython",
+          version = pack_version,
+          description = "Python interface to the R language",
+          url = "http://rpy.sourceforge.net";,
+          license = "(L)GPL",
           ext_modules = [rinterface],
-          package_dir = {'rpy2': 'rpy'},
-          packages = ['rpy2', 'rpy2.robjects', 'rpy2.robjects.tests',
-                      'rpy2.rinterface', 'rpy2.rinterface.tests']
+          package_dir = {pack_name: 'rpy'},
+          packages = [pack_name, 
+                      pack_name+'.robjects', 
+                      pack_name+'.robjects.tests',
+                      pack_name+'.rinterface', 
+                      pack_name+'.rinterface.tests']
           )
 
 
 
+
+for rversion, RHOME in itertools.izip(rversions, RHOMES):        
+
+    if (cmp_version(rversion, rnewest) == 0):
+        r_packversion = None
+        doSetup(RHOME, r_packversion)
+    
+    r_packversion = '%i%02i%i' %(rversion[0], rversion[1], rversion[2])
+    doSetup(RHOME, r_packversion)
+
+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
rpy-list mailing list
rpy-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rpy-list

Reply via email to