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