1
2import os
3import sys
4import subprocess
5import signal
6import glob
7
8admin_dir = os.path.dirname(os.path.abspath(__file__))
9
10# Local packages to include in the Python virtualenv
11packages=[('admin','acro-admin'), ('tpl','cxxtest','python'), ('packages','*','python')]
12local_packages = []
13for package in packages:
14    tmp_ = package
15    for pkg in glob.glob( os.path.join(*tmp_) ):
16        local_packages.append(pkg)
17
18
19def signal_handler(signum, frame):
20    pid=os.getpid()
21    pgid=os.getpgid(pid)
22    if pgid == -1:
23        sys.stderr.write("  ERROR: invalid pid %s\n" % (pid,))
24        sys.exit(1)
25    os.killpg(pgid,signal.SIGTERM)
26    sys.exit(1)
27
28signal.signal(signal.SIGINT,signal_handler)
29if sys.platform[0:3] != "win":
30    signal.signal(signal.SIGHUP, signal_handler)
31signal.signal(signal.SIGTERM, signal_handler)
32
33
34def run():
35    # Copy any / all setup scripts from the bootstrap directory
36    rc = subprocess.call([os.path.join('.','bootstrap','bootstrap'), 'all'])
37    if rc != 0:
38        sys.stderr.write("ERROR bootstrapping the source tree\n")
39        sys.exit(rc)
40
41    # Set up the virtual environment (if it doesn't exist)
42    trunk = (len(sys.argv) > 1 and '--trunk' in sys.argv)
43    if trunk:
44        sys.argv.remove('--trunk')
45    rc=0
46    if os.path.exists('python'):
47        logfile = open('tpl/python.log', 'w+')
48    else:
49        logfile = open('tpl/python.log', 'w')
50        cmd = [ sys.executable,
51                os.path.join('bin','pyomo_install'),'--venv', 'python' ]
52        if trunk:
53            sys.stdout.write("Installing Python from trunk\n")
54            cmd.append('--trunk')
55            cmd.extend([ '--config', os.path.join(admin_dir,'vpy','dev.ini') ])
56        else:
57            sys.stdout.write("Installing Python from cached packages\n")
58            cmd.extend(['--zip', os.path.join(admin_dir,'vpy','python.zip')])
59
60        # Add any local packages that also need to be installed in editable mode
61        cmd.extend(local_packages)
62
63        print cmd
64        sys.stdout.flush()
65        rc = subprocess.call(cmd, stdout=logfile, stderr=subprocess.STDOUT)
66        logfile.flush()
67    if rc != 0:
68        sys.stderr.write("ERROR installing Python virtual environment.  "
69                         "See tpl/python.log\n")
70        sys.exit(rc)
71
72
73    # Set up the (autotools) build: targets include:
74    #     configure, reconfigure, build
75    if len(sys.argv) > 1:
76        rc = subprocess.call([
77                os.path.join('.','python','bin','python'),
78                os.path.join('python','bin','driver') ] + sys.argv[1:])
79    sys.exit(rc)
80
81