189 lines
6.0 KiB
Python
189 lines
6.0 KiB
Python
import os
|
|
import sys
|
|
from pprint import pformat
|
|
|
|
__all__ = ['interactive_sys_argv']
|
|
|
|
def show_information(*args):
|
|
print 'Python',sys.version
|
|
for a in ['platform','prefix','byteorder','path']:
|
|
print 'sys.%s = %s' % (a,pformat(getattr(sys,a)))
|
|
for a in ['name']:
|
|
print 'os.%s = %s' % (a,pformat(getattr(os,a)))
|
|
if hasattr(os,'uname'):
|
|
print 'system,node,release,version,machine = ',os.uname()
|
|
|
|
def show_environ(*args):
|
|
for k,i in os.environ.items():
|
|
print ' %s = %s' % (k, i)
|
|
|
|
def show_fortran_compilers(*args):
|
|
from fcompiler import show_fcompilers
|
|
show_fcompilers()
|
|
|
|
def show_compilers(*args):
|
|
from distutils.ccompiler import show_compilers
|
|
show_compilers()
|
|
|
|
def show_tasks(argv,ccompiler,fcompiler):
|
|
print """\
|
|
|
|
Tasks:
|
|
i - Show python/platform/machine information
|
|
ie - Show environment information
|
|
c - Show C compilers information
|
|
c<name> - Set C compiler (current:%s)
|
|
f - Show Fortran compilers information
|
|
f<name> - Set Fortran compiler (current:%s)
|
|
e - Edit proposed sys.argv[1:].
|
|
|
|
Task aliases:
|
|
0 - Configure
|
|
1 - Build
|
|
2 - Install
|
|
2<prefix> - Install with prefix.
|
|
3 - Inplace build
|
|
4 - Source distribution
|
|
5 - Binary distribution
|
|
|
|
Proposed sys.argv = %s
|
|
""" % (ccompiler, fcompiler, argv)
|
|
|
|
|
|
import shlex
|
|
|
|
def edit_argv(*args):
|
|
argv = args[0]
|
|
readline = args[1]
|
|
if readline is not None:
|
|
readline.add_history(' '.join(argv[1:]))
|
|
try:
|
|
s = raw_input('Edit argv [UpArrow to retrive %r]: ' % (' '.join(argv[1:])))
|
|
except EOFError:
|
|
return
|
|
if s:
|
|
argv[1:] = shlex.split(s)
|
|
return
|
|
|
|
def interactive_sys_argv(argv):
|
|
print '='*72
|
|
print 'Starting interactive session'
|
|
print '-'*72
|
|
|
|
readline = None
|
|
try:
|
|
try:
|
|
import readline
|
|
except ImportError:
|
|
pass
|
|
else:
|
|
import tempfile
|
|
tdir = tempfile.gettempdir()
|
|
username = os.environ.get('USER',os.environ.get('USERNAME','UNKNOWN'))
|
|
histfile = os.path.join(tdir,".pyhist_interactive_setup-" + username)
|
|
try:
|
|
try: readline.read_history_file(histfile)
|
|
except IOError: pass
|
|
import atexit
|
|
atexit.register(readline.write_history_file, histfile)
|
|
except AttributeError: pass
|
|
except Exception, msg:
|
|
print msg
|
|
|
|
task_dict = {'i':show_information,
|
|
'ie':show_environ,
|
|
'f':show_fortran_compilers,
|
|
'c':show_compilers,
|
|
'e':edit_argv,
|
|
}
|
|
c_compiler_name = None
|
|
f_compiler_name = None
|
|
|
|
while 1:
|
|
show_tasks(argv,c_compiler_name, f_compiler_name)
|
|
try:
|
|
task = raw_input('Choose a task (^D to quit, Enter to continue with setup): ')
|
|
except EOFError:
|
|
print
|
|
task = 'quit'
|
|
ltask = task.lower()
|
|
if task=='': break
|
|
if ltask=='quit': sys.exit()
|
|
task_func = task_dict.get(ltask,None)
|
|
if task_func is None:
|
|
if ltask[0]=='c':
|
|
c_compiler_name = task[1:]
|
|
if c_compiler_name=='none':
|
|
c_compiler_name = None
|
|
continue
|
|
if ltask[0]=='f':
|
|
f_compiler_name = task[1:]
|
|
if f_compiler_name=='none':
|
|
f_compiler_name = None
|
|
continue
|
|
if task[0]=='2' and len(task)>1:
|
|
prefix = task[1:]
|
|
task = task[0]
|
|
else:
|
|
prefix = None
|
|
if task == '4':
|
|
argv[1:] = ['sdist','-f']
|
|
continue
|
|
elif task in '01235':
|
|
cmd_opts = {'config':[],'config_fc':[],
|
|
'build_ext':[],'build_src':[],
|
|
'build_clib':[]}
|
|
if c_compiler_name is not None:
|
|
c = '--compiler=%s' % (c_compiler_name)
|
|
cmd_opts['config'].append(c)
|
|
if task != '0':
|
|
cmd_opts['build_ext'].append(c)
|
|
cmd_opts['build_clib'].append(c)
|
|
if f_compiler_name is not None:
|
|
c = '--fcompiler=%s' % (f_compiler_name)
|
|
cmd_opts['config_fc'].append(c)
|
|
if task != '0':
|
|
cmd_opts['build_ext'].append(c)
|
|
cmd_opts['build_clib'].append(c)
|
|
if task=='3':
|
|
cmd_opts['build_ext'].append('--inplace')
|
|
cmd_opts['build_src'].append('--inplace')
|
|
conf = []
|
|
sorted_keys = ['config','config_fc','build_src',
|
|
'build_clib','build_ext']
|
|
for k in sorted_keys:
|
|
opts = cmd_opts[k]
|
|
if opts: conf.extend([k]+opts)
|
|
if task=='0':
|
|
if 'config' not in conf:
|
|
conf.append('config')
|
|
argv[1:] = conf
|
|
elif task=='1':
|
|
argv[1:] = conf+['build']
|
|
elif task=='2':
|
|
if prefix is not None:
|
|
argv[1:] = conf+['install','--prefix=%s' % (prefix)]
|
|
else:
|
|
argv[1:] = conf+['install']
|
|
elif task=='3':
|
|
argv[1:] = conf+['build']
|
|
elif task=='5':
|
|
if sys.platform=='win32':
|
|
argv[1:] = conf+['bdist_wininst']
|
|
else:
|
|
argv[1:] = conf+['bdist']
|
|
else:
|
|
print 'Skipping unknown task:',`task`
|
|
else:
|
|
print '-'*68
|
|
try:
|
|
task_func(argv,readline)
|
|
except Exception,msg:
|
|
print 'Failed running task %s: %s' % (task,msg)
|
|
break
|
|
print '-'*68
|
|
print
|
|
|
|
print '-'*72
|
|
return argv
|