virtualenv/res/lib/lib_create_env.py
changeset 731 aba6c30b6d2a
parent 727 0e91e924b945
child 732 fa3f1f436ecd
equal deleted inserted replaced
727:0e91e924b945 731:aba6c30b6d2a
     5 import tarfile
     5 import tarfile
     6 import zipfile
     6 import zipfile
     7 import urllib
     7 import urllib
     8 import platform
     8 import platform
     9 import patch
     9 import patch
       
    10 import struct
       
    11 import glob
       
    12 import re
    10 
    13 
    11 join = os.path.join
    14 join = os.path.join
    12 system_str = platform.system()
    15 system_str = platform.system()
    13 
    16 
    14 URLS = {
    17 URLS = {
    20     'DJANGO-TAGGING': { 'setup': 'django-tagging', 'url':'http://django-tagging.googlecode.com/files/django-tagging-0.3.1.tar.gz', 'local':"django-tagging-0.3.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    23     'DJANGO-TAGGING': { 'setup': 'django-tagging', 'url':'http://django-tagging.googlecode.com/files/django-tagging-0.3.1.tar.gz', 'local':"django-tagging-0.3.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    21     'DJANGO-PISTON': { 'setup': 'django-piston', 'url':'django-piston-7c90898072ce-modifed.tar.gz', 'local':'django-piston-7c90898072ce-modifed.tar.gz', 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    24     'DJANGO-PISTON': { 'setup': 'django-piston', 'url':'django-piston-7c90898072ce-modifed.tar.gz', 'local':'django-piston-7c90898072ce-modifed.tar.gz', 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    22     'OAUTH2': { 'setup': 'python-oauth2', 'url':"https://github.com/simplegeo/python-oauth2/tarball/hudson-python-oauth2-211", 'local':"oauth2-1.5.211.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    25     'OAUTH2': { 'setup': 'python-oauth2', 'url':"https://github.com/simplegeo/python-oauth2/tarball/hudson-python-oauth2-211", 'local':"oauth2-1.5.211.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    23     'HTTPLIB2': { 'setup': 'python-httplib2', 'url':'http://code.google.com/p/httplib2/downloads/detail?name=httplib2-0.7.4.tar.gz&can=2&q=', 'local':"httplib2-0.7.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    26     'HTTPLIB2': { 'setup': 'python-httplib2', 'url':'http://code.google.com/p/httplib2/downloads/detail?name=httplib2-0.7.4.tar.gz&can=2&q=', 'local':"httplib2-0.7.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    24     'DJANGO-OAUTH-PLUS': { 'setup': 'django-oauth-plus', 'url':'http://bitbucket.org/david/django-oauth-plus/get/f314f018e473.gz', 'local':"django-oauth-plus.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    27     'DJANGO-OAUTH-PLUS': { 'setup': 'django-oauth-plus', 'url':'http://bitbucket.org/david/django-oauth-plus/get/f314f018e473.gz', 'local':"django-oauth-plus.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    25     'MYSQL': { 'setup': 'mysql-python', 'url': 'http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz/download', 'local':"MySQL-python-1.2.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
       
    26     'OPENID': {'setup':'openid', 'url':'http://pypi.python.org/packages/source/p/python-openid/python-openid-2.2.5.tar.gz', 'local':"python-openid-2.2.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    28     'OPENID': {'setup':'openid', 'url':'http://pypi.python.org/packages/source/p/python-openid/python-openid-2.2.5.tar.gz', 'local':"python-openid-2.2.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    27     'DJANGO_OPENID_CONSUMER': {'setup':'django_openid_consumer', 'url':'http://pypi.python.org/packages/source/d/django-openid-consumer/django-openid-consumer-0.1.1.tar.gz', 'local':"django-openid-consumer-0.1.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    29     'DJANGO_OPENID_CONSUMER': {'setup':'django_openid_consumer', 'url':'http://pypi.python.org/packages/source/d/django-openid-consumer/django-openid-consumer-0.1.1.tar.gz', 'local':"django-openid-consumer-0.1.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    28     'SOCIAL_AUTH': {'setup':'social_auth', 'url':'https://github.com/omab/django-social-auth/tarball/v0.3.10', 'local':"omab-django-social-auth-v0.3.10-modified.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    30     'SOCIAL_AUTH': {'setup':'social_auth', 'url':'https://github.com/omab/django-social-auth/tarball/v0.3.10', 'local':"omab-django-social-auth-v0.3.10-modified.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    29     'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.7.5.tar.gz', 'local':"south-0.7.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    31     'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.7.5.tar.gz', 'local':"south-0.7.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    30     'DJANGO_GUARDIAN' : { 'setup': 'django-guardian', 'url':'http://pypi.python.org/packages/source/d/django-guardian/django-guardian-1.0.3.tar.gz', 'local':"django-guardian-1.0.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    32     'DJANGO_GUARDIAN' : { 'setup': 'django-guardian', 'url':'http://pypi.python.org/packages/source/d/django-guardian/django-guardian-1.0.3.tar.gz', 'local':"django-guardian-1.0.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    40     'PYELASTICSEARCH': {'setup': 'pyelasticsearch', 'url':'https://github.com/toastdriven/pyelasticsearch/tarball/master', 'local':'pyelasticsearch.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
    42     'PYELASTICSEARCH': {'setup': 'pyelasticsearch', 'url':'https://github.com/toastdriven/pyelasticsearch/tarball/master', 'local':'pyelasticsearch.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
    41     'WHOOSH': {'setup': 'whoosh', 'url':'https://bitbucket.org/mchaput/whoosh/get/tip.tar.bz2', 'local':'whoosh-2.5.tar.bz2', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
    43     'WHOOSH': {'setup': 'whoosh', 'url':'https://bitbucket.org/mchaput/whoosh/get/tip.tar.bz2', 'local':'whoosh-2.5.tar.bz2', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
    42 }
    44 }
    43 
    45 
    44 if system_str == 'Windows':
    46 if system_str == 'Windows':
       
    47     
       
    48     size = 8 * struct.calcsize("P")
       
    49     if size==32:
       
    50         mysqlres = "MySQL-python-1.2.3.win32-py2.7.exe"
       
    51     else:
       
    52         mysqlres = "MySQL-python-1.2.3.win-amd64-py2.7.exe"
       
    53     
    45     URLS.update({
    54     URLS.update({
    46         'PSYCOPG2': {'setup': 'psycopg2','url': 'psycopg2-2.0.14.win32-py2.6-pg8.4.3-release.zip', 'local':"psycopg2-2.0.14.win32-py2.6-pg8.4.3-release.zip", 'install': {'method': 'install_psycopg2', 'option_str': None, 'dict_extra_env': None}},
    55         'PSYCOPG2': {'setup': 'psycopg2','url': 'psycopg2-2.0.14.win32-py2.6-pg8.4.3-release.zip', 'local':"psycopg2-2.0.14.win32-py2.6-pg8.4.3-release.zip", 'install': {'method': 'install_psycopg2', 'option_str': None, 'dict_extra_env': None}},
    47         'PIL': {'setup': 'pil', 'url': 'http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.6.exe', 'local':"PIL-1.1.7.win32-py2.6.exe", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    56         'PIL': {'setup': 'pil', 'url': 'http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.6.exe', 'local':"PIL-1.1.7.win32-py2.6.exe", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    48         'LXML': {'setup': 'lxml', 'url': 'http://pypi.python.org/packages/2.6/l/lxml/lxml-2.2.2-py2.6-win32.egg', 'local':"lxml-2.2.2-py2.6-win32.egg", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}}
    57         'LXML': {'setup': 'lxml', 'url': 'http://pypi.python.org/packages/2.6/l/lxml/lxml-2.2.2-py2.6-win32.egg', 'local':"lxml-2.2.2-py2.6-win32.egg", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
       
    58         'MYSQL': { 'setup': 'mysql-python', 'url': mysqlres, 'local': mysqlres, 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    49     })
    59     })
    50 else:
    60 else:
    51     if system_str == "Darwin":        
    61     if system_str == "Darwin":        
    52         lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.8.0', 'LIBXSLT_VERSION': '1.1.26', 'LIBICONV_VERSION': '1.14'}
    62         lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.8.0', 'LIBXSLT_VERSION': '1.1.26', 'LIBICONV_VERSION': '1.14'}
    53         lxml_method = 'easy_install'
    63         lxml_method = 'easy_install'
       
    64         mysql_method = 'install_mysql'
    54     else:
    65     else:
    55         lxml_options = None
    66         lxml_options = None
    56         lxml_method = 'pip'
    67         lxml_method = 'pip'
       
    68         mysql_method = 'pip'
    57 
    69 
    58     URLS.update({
    70     URLS.update({
    59         'PSYCOPG2': {'setup': 'psycopg2','url': 'http://www.psycopg.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.5.tar.gz', 'local':"psycopg2-2.4.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    71         'PSYCOPG2': {'setup': 'psycopg2','url': 'http://www.psycopg.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.5.tar.gz', 'local':"psycopg2-2.4.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
    60         'PIL': {'setup': 'pil', 'url': 'http://effbot.org/downloads/Imaging-1.1.7.tar.gz', 'local':"Imaging-1.1.7.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    72         'PIL': {'setup': 'pil', 'url': 'http://effbot.org/downloads/Imaging-1.1.7.tar.gz', 'local':"Imaging-1.1.7.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
    61         'LXML': {'setup': 'lxml', 'url':"lxml-2.3.4.tar.bz2", 'local':"lxml-2.3.4.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
    73         'LXML': {'setup': 'lxml', 'url':"lxml-2.3.4.tar.bz2", 'local':"lxml-2.3.4.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
       
    74         'MYSQL': { 'setup': 'mysql-python', 'url': 'http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz/download', 'local':"MySQL-python-1.2.3.tar.gz", 'install': {'method': mysql_method, 'option_str': None, 'dict_extra_env': None}},
    62     })
    75     })
    63     
    76     
    64 
    77 
    65 class ResourcesEnv(object):
    78 class ResourcesEnv(object):
    66 
    79 
   105     parser.add_option(
   118     parser.add_option(
   106         '--ignore-packages',
   119         '--ignore-packages',
   107         metavar='ignore_packages',
   120         metavar='ignore_packages',
   108         dest='ignore_packages',
   121         dest='ignore_packages',
   109         default=None,
   122         default=None,
   110         help='list of comma separated keys for package to ignore')
   123         help='list of comma separated keys for package to ignore')    
   111 
       
   112 def install_pylucene(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
       
   113     
       
   114     logger.notify("PYLUCENE Custom install")
       
   115     logger.notify("Get Pylucene from %s " % res_env.URLS['PYLUCENE'][res_source_key])
       
   116     pylucene_src = os.path.join(src_dir,"pylucene.tar.gz")
       
   117     if res_source_key == 'local':
       
   118         shutil.copy(res_env.URLS['PYLUCENE'][res_source_key], pylucene_src)
       
   119     else:
       
   120         urllib.urlretrieve(res_env.URLS['PYLUCENE'][res_source_key], pylucene_src)
       
   121     tf = tarfile.open(pylucene_src,'r:gz')
       
   122     pylucene_base_path = os.path.join(src_dir,"pylucene") 
       
   123     logger.notify("Extract Pylucene to %s " % pylucene_base_path)
       
   124     tf.extractall(pylucene_base_path)
       
   125     tf.close()
       
   126     
       
   127     pylucene_src_path = os.path.join(pylucene_base_path, os.listdir(pylucene_base_path)[0])
       
   128     jcc_src_path = os.path.abspath(os.path.join(pylucene_src_path,"jcc"))
       
   129     
       
   130     #install jcc
       
   131 
       
   132     #patch for linux
       
   133     if system_str == 'Linux' :
       
   134         olddir = os.getcwd()
       
   135         setuptools_path = os.path.join(lib_dir, 'site-packages', 'setuptools')
       
   136         if os.path.exists(setuptools_path) and os.path.isdir(setuptools_path):
       
   137             patch_dest_path = os.path.join(lib_dir, 'site-packages')
       
   138         else:
       
   139             patch_dest_path = os.path.join(lib_dir,'site-packages','setuptools-0.6c11-py%s.%s.egg' % (sys.version_info[0], sys.version_info[1]))
       
   140             if os.path.isfile(patch_dest_path):
       
   141                 # must unzip egg
       
   142                 # rename file and etract all
       
   143                 shutil.move(patch_dest_path, patch_dest_path + ".zip")
       
   144                 zf = zipfile.ZipFile(patch_dest_path + ".zip",'r')
       
   145                 zf.extractall(patch_dest_path)
       
   146                 os.remove(patch_dest_path + ".zip")
       
   147         logger.notify("Patch jcc : %s " % (patch_dest_path))
       
   148         os.chdir(patch_dest_path)
       
   149         p = patch.fromfile(os.path.join(jcc_src_path,"jcc","patches","patch.43.0.6c11"))
       
   150         p.apply()
       
   151         os.chdir(olddir)
       
   152 
       
   153     logger.notify("Install jcc")
       
   154     call_subprocess([os.path.abspath(os.path.join(home_dir, 'bin', 'python')), 'setup.py', 'install'],
       
   155                     cwd=jcc_src_path,
       
   156                     filter_stdout=filter_python_develop,
       
   157                     show_stdout=True)
       
   158     #install pylucene
       
   159     
       
   160     logger.notify("Install pylucene")
       
   161     #modify makefile
       
   162     makefile_path = os.path.join(pylucene_src_path,"Makefile")
       
   163     logger.notify("Modify makefile %s " % makefile_path)
       
   164     shutil.move( makefile_path, makefile_path+"~" )
       
   165 
       
   166     destination= open( makefile_path, "w" )
       
   167     source= open( makefile_path+"~", "r" )
       
   168     destination.write("PREFIX_PYTHON="+os.path.abspath(home_dir)+"\n")
       
   169     destination.write("ANT=ant\n")
       
   170     destination.write("PYTHON=$(PREFIX_PYTHON)/bin/python\n")
       
   171     
       
   172     if system_str == "Darwin":
       
   173         if sys.version_info >= (2,6):
       
   174             destination.write("JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64 --arch i386\n")
       
   175         else:
       
   176             destination.write("JCC=$(PYTHON) -m jcc --shared --arch x86_64 --arch i386\n")
       
   177         destination.write("NUM_FILES=2\n")
       
   178     elif system_str == "Windows":
       
   179         destination.write("JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64 --arch i386\n")
       
   180         destination.write("NUM_FILES=2\n")
       
   181     else:
       
   182         if sys.version_info >= (2,6) and sys.version_info <= (2,7):
       
   183             destination.write("JCC=$(PYTHON) -m jcc.__main__ --shared\n")
       
   184         else:
       
   185             destination.write("JCC=$(PYTHON) -m jcc --shared\n")
       
   186         destination.write("NUM_FILES=2\n")
       
   187     for line in source:
       
   188         destination.write( line )
       
   189     source.close()
       
   190     destination.close()
       
   191     os.remove(makefile_path+"~" )
       
   192 
       
   193     logger.notify("pylucene make")
       
   194     call_subprocess(['make'],
       
   195                     cwd=os.path.abspath(pylucene_src_path),
       
   196                     filter_stdout=filter_python_develop,
       
   197                     show_stdout=True)
       
   198 
       
   199     logger.notify("pylucene make install")
       
   200     call_subprocess(['make', 'install'],
       
   201                     cwd=os.path.abspath(pylucene_src_path),
       
   202                     filter_stdout=filter_python_develop,
       
   203                     show_stdout=True)
       
   204     
       
   205 
   124 
   206 def install_psycopg2(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
   125 def install_psycopg2(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
   207     psycopg2_src = os.path.join(src_dir,"psycopg2.zip")
   126     psycopg2_src = os.path.join(src_dir,"psycopg2.zip")
   208     shutil.copy(res_env.URLS['PSYCOPG2'][res_source_key], psycopg2_src)
   127     shutil.copy(res_env.URLS['PSYCOPG2'][res_source_key], psycopg2_src)
   209     #extract psycopg2
   128     #extract psycopg2
   213     zf.close()
   132     zf.close()
   214     
   133     
   215     psycopg2_src_path = os.path.join(psycopg2_base_path, os.listdir(psycopg2_base_path)[0])
   134     psycopg2_src_path = os.path.join(psycopg2_base_path, os.listdir(psycopg2_base_path)[0])
   216     shutil.copytree(os.path.join(psycopg2_src_path, 'psycopg2'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'psycopg2')))
   135     shutil.copytree(os.path.join(psycopg2_src_path, 'psycopg2'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'psycopg2')))
   217     shutil.copy(os.path.join(psycopg2_src_path, 'psycopg2-2.0.14-py2.6.egg-info'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'site-packages')))
   136     shutil.copy(os.path.join(psycopg2_src_path, 'psycopg2-2.0.14-py2.6.egg-info'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'site-packages')))
       
   137     
       
   138 
       
   139 def install_mysql(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
       
   140     
       
   141     args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', res_env.URLS['MYSQL'][res_source_key]]                
       
   142     if option_str :
       
   143         args.insert(4,option_str)
       
   144     call_subprocess(args,
       
   145             cwd=os.path.abspath(tmp_dir),
       
   146             filter_stdout=filter_python_develop,
       
   147             show_stdout=True,
       
   148             extra_env=extra_env)
       
   149 
       
   150     mysqlconfig_output = []
       
   151     
       
   152     call_subprocess(['mysql_config', '--libmysqld-libs'],
       
   153         cwd=os.path.abspath(tmp_dir),
       
   154         filter_stdout=lambda line: mysqlconfig_output.append(line),
       
   155         show_stdout=True)
       
   156         
       
   157     mysqlconfig_output = "".join(mysqlconfig_output)
       
   158     m = re.search("\-L[\'\"]?([\w\/]+)[\'\"]?", mysqlconfig_output)
       
   159     if m:
       
   160         repdylibpath = m.group(1)
       
   161     else:
       
   162         repdylibpath = '/usr/local/mysql/lib'
       
   163         
       
   164     dyliblist = glob.glob(repdylibpath+"/libmysqlclient.*.dylib")
       
   165     def key_func(s):
       
   166         m = re.match(repdylibpath+"/libmysqlclient\.([\d]+)\.dylib", s)
       
   167         if m:
       
   168             return int(m.group(1))
       
   169         else:
       
   170             return sys.maxint
       
   171     dyliblist.sort(key=key_func)
       
   172     
       
   173     if dyliblist:
       
   174         dylibpath = dyliblist[0]
       
   175     else:
       
   176         dylibpath = '/usr/local/mysql/lib/libmysqlclient.18.dylib'
       
   177         
       
   178     dylibname = os.path.basename(dylibpath)    
       
   179     sopath = os.path.join(os.path.abspath(lib_dir), 'site-packages', '_mysql.so')
       
   180     
       
   181     call_subprocess(['install_name_tool', '-change', dylibname, dylibpath, sopath],
       
   182         cwd=os.path.abspath(tmp_dir),
       
   183         filter_stdout=filter_python_develop,
       
   184         show_stdout=True)
       
   185 
   218 
   186 
   219 def gen_install_comp_lib(lib_name, lib_key, configure_options=[]):
   187 def gen_install_comp_lib(lib_name, lib_key, configure_options=[]):
   220     
   188     
   221     def install_lib(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
   189     def install_lib(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
   222         lib_src = os.path.join(src_dir,lib_name+".tar.gz")
   190         lib_src = os.path.join(src_dir,lib_name+".tar.gz")
   227         tf.extractall(lib_base_path)
   195         tf.extractall(lib_base_path)
   228         tf.close()
   196         tf.close()
   229         
   197         
   230         lib_src_path = os.path.join(lib_base_path, os.listdir(lib_base_path)[0])
   198         lib_src_path = os.path.join(lib_base_path, os.listdir(lib_base_path)[0])
   231     
   199     
   232         logger.notify("libjpeg configure")
   200         logger.notify(libname + " configure")
   233         call_subprocess(['configure', '--prefix='+os.path.abspath(home_dir)] + configure_options,
   201         call_subprocess(['configure', '--prefix='+os.path.abspath(home_dir)] + configure_options,
   234                         cwd=os.path.abspath(lib_src_path),
   202                         cwd=os.path.abspath(lib_src_path),
   235                         filter_stdout=filter_python_develop,
   203                         filter_stdout=filter_python_develop,
   236                         show_stdout=True)
   204                         show_stdout=True)
   237         
   205         
   238         logger.notify("libjpeg make")
   206         logger.notify(libname + " make")
   239         call_subprocess(['make'],
   207         call_subprocess(['make'],
   240                         cwd=os.path.abspath(lib_src_path),
   208                         cwd=os.path.abspath(lib_src_path),
   241                         filter_stdout=filter_python_develop,
   209                         filter_stdout=filter_python_develop,
   242                         show_stdout=True)
   210                         show_stdout=True)
   243     
   211     
   244         logger.notify("zlib make install")
   212         logger.notify(libname + "make install")
   245         call_subprocess(['make', 'install'],
   213         call_subprocess(['make', 'install'],
   246                         cwd=os.path.abspath(lib_src_path),
   214                         cwd=os.path.abspath(lib_src_path),
   247                         filter_stdout=filter_python_develop,
   215                         filter_stdout=filter_python_develop,
   248                         show_stdout=True)
   216                         show_stdout=True)
   249         return install_lib
   217         return install_lib