summaryrefslogtreecommitdiff
path: root/setup.py
blob: f8622b7a52ffac562b3070a471d8422e9646caaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/python
# Copyright 2008 The Tor Project.  See LICENSE for licensing information.
# $Id: setup.py,v 1.103 2007-09-15 19:06:37 nickm Exp $

import sys

#
#   Current Thandy version
#
VERSION = '0.0.1-alpha'
# System: 0==alpha, 50==beta, 98=pre, 99==release candidate, 100==release
VERSION_INFO = (0,0,1)

for name in [ "simplejson", "Crypto" ]:
    try:
        __import__(name)
    except ImportError:
        print "Missing support for module %s"%name
        sys.exit(1)

import os, re, shutil, string, struct, sys

os.umask(022)

#======================================================================
# Create startup scripts if we're installing.

if not os.path.isdir("./bin"):
    os.mkdir("./bin")

SCRIPTS = []

def makescripts(extrapath=None):
    del SCRIPTS[:]
    for script_suffix, modname in [ ("server", "ServerCLI"),
                                    ("client", "ClientCLI"),
                                    ("pk", "SignerCLI"), ]:
        fname = os.path.join("./bin", "thandy-%s"%script_suffix)
        if sys.platform == "win32":
            fname += ".py"
        f = open(fname, 'w')
        f.write("#!/bin/sh\n")
        if extrapath:
            f.write('PYTHONPATH="$PYTHONPATH:%s"\n'%extrapath)
            f.write('export PYTHONPATH\n')
        f.write('%s -m thandy/%s "$@"\n' %(sys.executable, modname))
        f.close()
        SCRIPTS.append(fname)

#======================================================================
# Define a helper to let us run commands from the compiled code.
def _haveCmd(cmdname):
    for entry in os.environ.get("PATH", "").split(os.pathsep):
        if os.path.exists(os.path.join(entry, cmdname)):
            return 1
    return 0

def requirePythonDev(e=None):
    if os.path.exists("/etc/debian_version"):
        v = sys.version[:3]
        print "Debian may expect you to install python%s-dev"%v
    elif os.path.exists("/etc/redhat-release"):
        print "Redhat may expect you to install python2-devel"
    else:
        print "You may be missing some 'python development' package for your"
        print "distribution."

    if e:
        print "(Error was: %s)"%e

    sys.exit(1)

try:
    from distutils.core import Command
    from distutils.errors import DistutilsPlatformError
    from distutils.sysconfig import get_makefile_filename
except ImportError, e:
    print "\nUh oh. You have Python installed, but I didn't find the distutils"
    print "module, which is supposed to come with the standard library.\n"

    requirePythonDev()

try:
    # This catches failures to install python2-dev on some redhats.
    get_makefile_filename()
except IOError:
    print "\nUh oh. You have Python installed, but distutils can't find the"
    print "Makefile it needs to build additional Python components.\n"

    requirePythonDev()

#======================================================================
# Now, tell setup.py how to cope.
import distutils.core, distutils.command.install
from distutils.core import setup, Distribution

class InstallCommand(distutils.command.install.install):
    def run(self):
        script_path = None
        sys_path = map(os.path.normpath, sys.path)
        sys_path = map(os.path.normcase, sys_path)
        install_lib = os.path.normcase(os.path.normpath(self.install_lib))

        if install_lib not in sys_path:
            script_path = install_lib

        makescripts(self.install_lib)

        distutils.command.install.install.run(self)

setup(name='Thandy',
      version=VERSION,
      license="3-clause BSD",
      description=
      "Thandy: Secure cross-platform update automation tool.",
      author="Nick Mathewson",
      author_email="nickm@freehaven.net",
      url="http://www.torproject/org",
      package_dir={ '' : 'lib' },
      packages=['thandy'],
      scripts=SCRIPTS,
      cmdclass={'install': InstallCommand},
)