2007-03-29 21:01:28 +00:00
#! /usr/bin/env python
2009-09-20 18:03:43 +00:00
# -*- coding: utf-8 -*-
2013-03-15 05:13:30 +00:00
import sys ; assert sys . version_info < ( 3 , ) , ur " Tahoe-LAFS does not run under Python 3. Please use a version of Python between 2.6 and 2.7.x inclusive. "
2006-12-05 08:29:26 +00:00
2010-05-04 09:43:40 +00:00
# Tahoe-LAFS -- secure, distributed storage grid
2008-07-14 21:53:25 +00:00
#
2012-03-13 20:50:57 +00:00
# Copyright © 2006-2012 The Tahoe-LAFS Software Foundation
2008-07-14 21:53:25 +00:00
#
2009-08-02 02:57:10 +00:00
# This file is part of Tahoe-LAFS.
2008-07-14 21:53:25 +00:00
#
2011-05-10 19:16:50 +00:00
# See the docs/about.rst file for licensing information.
2006-12-05 08:29:26 +00:00
2014-10-07 18:28:53 +00:00
import os , stat , subprocess , re
2008-09-12 01:03:21 +00:00
##### sys.path management
2008-12-06 00:30:54 +00:00
def pylibdir ( prefixdir ) :
pyver = " python %d . %d " % ( sys . version_info [ : 2 ] )
if sys . platform == " win32 " :
return os . path . join ( prefixdir , " Lib " , " site-packages " )
else :
return os . path . join ( prefixdir , " lib " , pyver , " site-packages " )
2008-09-12 01:03:21 +00:00
basedir = os . path . dirname ( os . path . abspath ( __file__ ) )
2008-12-06 00:30:54 +00:00
supportlib = pylibdir ( os . path . join ( basedir , " support " ) )
2009-08-18 01:00:57 +00:00
# locate our version number
def read_version_py ( infname ) :
try :
verstrline = open ( infname , " rt " ) . read ( )
except EnvironmentError :
return None
else :
VSRE = r " ^verstr = [ ' \" ]([^ ' \" ]*)[ ' \" ] "
mo = re . search ( VSRE , verstrline , re . M )
if mo :
return mo . group ( 1 )
2014-11-21 07:56:21 +00:00
VERSION_PY_FILENAME = ' src/allmydata/_version.py '
version = read_version_py ( VERSION_PY_FILENAME )
2009-08-18 01:00:57 +00:00
2010-10-29 22:28:25 +00:00
APPNAME = ' allmydata-tahoe '
APPNAMEFILE = os . path . join ( ' src ' , ' allmydata ' , ' _appname.py ' )
APPNAMEFILESTR = " __appname__ = ' %s ' " % ( APPNAME , )
try :
curappnamefilestr = open ( APPNAMEFILE , ' rU ' ) . read ( )
except EnvironmentError :
# No file, or unreadable or something, okay then let's try to write one.
open ( APPNAMEFILE , " w " ) . write ( APPNAMEFILESTR )
else :
if curappnamefilestr . strip ( ) != APPNAMEFILESTR :
2013-03-15 04:28:35 +00:00
print ( " Error -- this setup.py file is configured with the ' application name ' to be ' %s ' , but there is already a file in place in ' %s ' which contains the contents ' %s ' . If the file is wrong, please remove it and setup.py will regenerate it and write ' %s ' into it. " % ( APPNAME , APPNAMEFILE , curappnamefilestr , APPNAMEFILESTR ) )
2010-10-29 22:28:25 +00:00
sys . exit ( - 1 )
# setuptools/zetuptoolz looks in __main__.__requires__ for a list of
# requirements. When running "python setup.py test", __main__ is
# setup.py, so we put the list here so that the requirements will be
# available for tests:
# Tahoe's dependencies are managed by the find_links= entry in setup.cfg and
# the _auto_deps.install_requires list, which is used in the call to setup()
# below.
adglobals = { }
execfile ( ' src/allmydata/_auto_deps.py ' , adglobals )
install_requires = adglobals [ ' install_requires ' ]
2011-01-15 02:26:51 +00:00
if len ( sys . argv ) > 1 and sys . argv [ 1 ] == ' --fakedependency ' :
del sys . argv [ 1 ]
install_requires + = [ " fakedependency >= 1.0.0 " ]
2010-11-19 07:40:43 +00:00
__requires__ = install_requires [ : ]
2010-10-29 22:28:25 +00:00
2015-04-28 17:52:59 +00:00
egg = os . path . realpath ( ' setuptools-0.6c16dev6.egg ' )
2010-05-23 20:52:28 +00:00
sys . path . insert ( 0 , egg )
import setuptools ; setuptools . bootstrap_install_from = egg
2007-09-13 21:51:19 +00:00
2012-01-08 18:16:54 +00:00
from setuptools import setup
2008-08-27 18:26:44 +00:00
from setuptools . command import sdist
2009-01-29 14:00:58 +00:00
from setuptools import Command
2008-12-01 18:48:04 +00:00
2007-04-27 20:47:15 +00:00
trove_classifiers = [
2008-04-14 18:08:23 +00:00
" Development Status :: 5 - Production/Stable " ,
2007-04-27 20:47:15 +00:00
" Environment :: Console " ,
" Environment :: Web Environment " ,
2008-07-14 21:53:25 +00:00
" License :: OSI Approved :: GNU General Public License (GPL) " ,
2008-01-08 18:45:00 +00:00
" License :: DFSG approved " ,
" License :: Other/Proprietary License " ,
2008-07-14 21:53:25 +00:00
" Intended Audience :: Developers " ,
2007-04-27 20:47:15 +00:00
" Intended Audience :: End Users/Desktop " ,
" Intended Audience :: System Administrators " ,
" Operating System :: Microsoft " ,
" Operating System :: Microsoft :: Windows " ,
" Operating System :: Unix " ,
" Operating System :: POSIX :: Linux " ,
" Operating System :: POSIX " ,
" Operating System :: MacOS :: MacOS X " ,
2008-07-14 21:53:25 +00:00
" Operating System :: OS Independent " ,
" Natural Language :: English " ,
" Programming Language :: C " ,
" Programming Language :: Python " ,
2008-10-21 16:32:00 +00:00
" Programming Language :: Python :: 2 " ,
2009-01-29 01:26:28 +00:00
" Programming Language :: Python :: 2.6 " ,
2011-01-08 21:12:12 +00:00
" Programming Language :: Python :: 2.7 " ,
2007-04-27 20:47:15 +00:00
" Topic :: Utilities " ,
" Topic :: System :: Systems Administration " ,
" Topic :: System :: Filesystems " ,
" Topic :: System :: Distributed Computing " ,
" Topic :: Software Development :: Libraries " ,
2008-07-14 21:53:25 +00:00
" Topic :: System :: Archiving :: Backup " ,
" Topic :: System :: Archiving :: Mirroring " ,
" Topic :: System :: Archiving " ,
2007-04-27 20:47:15 +00:00
]
2006-12-14 10:25:30 +00:00
2007-05-04 03:14:07 +00:00
2008-04-09 18:30:53 +00:00
setup_requires = [ ]
2008-09-17 01:36:27 +00:00
2011-07-21 23:49:41 +00:00
# Nevow imports itself when building, which causes Twisted and zope.interface
# to be imported. We need to make sure that the versions of Twisted and
# zope.interface used at build time satisfy Nevow's requirements. If not
# then there are two problems:
# - prior to Nevow v0.9.33, Nevow didn't declare its dependency on Twisted
# in a way that enabled setuptools to satisfy that requirement at
# build time.
# - some versions of zope.interface, e.g. v3.6.4, are incompatible with
# Nevow, and we need to avoid those both at build and run-time.
#
# This only matters when compatible versions of Twisted and zope.interface
# are not already installed. Retire this hack when
2011-07-21 23:36:58 +00:00
# https://bugs.launchpad.net/nevow/+bug/812537 has been fixed.
2011-07-21 23:49:41 +00:00
setup_requires + = [ req for req in install_requires if req . startswith ( ' Twisted ' ) or req . startswith ( ' zope.interface ' ) ]
2008-10-25 13:50:42 +00:00
2011-01-18 20:51:14 +00:00
# We no longer have any requirements specific to tests.
tests_require = [ ]
2010-06-09 05:05:42 +00:00
2011-01-19 02:45:32 +00:00
class Trial ( Command ) :
description = " run trial (use ' bin %s tahoe debug trial ' for the full set of trial options) " % ( os . sep , )
# This is just a subset of the most useful options, for compatibility.
2012-05-31 22:00:00 +00:00
user_options = [ ( " no-rterrors " , None , " Don ' t print out tracebacks as they occur. " ) ,
2012-05-31 22:23:07 +00:00
( " rterrors " , " e " , " Print out tracebacks as they occur (default, so ignored). " ) ,
2012-05-31 22:00:00 +00:00
( " until-failure " , " u " , " Repeat a test (specified by -s) until it fails. " ) ,
2011-01-19 02:45:32 +00:00
( " reporter= " , None , " The reporter to use for this test run. " ) ,
( " suite= " , " s " , " Specify the test suite. " ) ,
2011-01-21 08:03:28 +00:00
( " quiet " , None , " Don ' t display version numbers and paths of Tahoe dependencies. " ) ,
2014-09-08 21:45:24 +00:00
( " coverage " , " c " , " Collect branch coverage information. " ) ,
2011-01-19 02:45:32 +00:00
]
def initialize_options ( self ) :
2012-05-31 22:23:07 +00:00
self . rterrors = False
2012-05-31 22:00:00 +00:00
self . no_rterrors = False
self . until_failure = False
2011-01-19 02:45:32 +00:00
self . reporter = None
self . suite = " allmydata "
2011-01-21 08:03:28 +00:00
self . quiet = False
2014-09-08 21:45:24 +00:00
self . coverage = False
2011-01-19 02:45:32 +00:00
def finalize_options ( self ) :
pass
def run ( self ) :
args = [ sys . executable , os . path . join ( ' bin ' , ' tahoe ' ) ]
2014-09-08 21:45:24 +00:00
if self . coverage :
from errno import ENOENT
coverage_cmd = ' coverage '
try :
subprocess . call ( [ coverage_cmd , ' help ' ] )
except OSError as e :
if e . errno != ENOENT :
raise
coverage_cmd = ' python-coverage '
try :
rc = subprocess . call ( [ coverage_cmd , ' help ' ] )
except OSError as e :
if e . errno != ENOENT :
raise
print >> sys . stderr
print >> sys . stderr , " Couldn ' t find the command ' coverage ' nor ' python-coverage ' . "
print >> sys . stderr , " coverage can be installed using ' pip install coverage ' , or on Debian-based systems, ' apt-get install python-coverage ' . "
sys . exit ( 1 )
args + = [ ' @ ' + coverage_cmd , ' run ' , ' --branch ' , ' --source=src/allmydata ' , ' @tahoe ' ]
2011-01-21 08:03:28 +00:00
if not self . quiet :
2011-01-19 02:45:32 +00:00
args . append ( ' --version-and-path ' )
args + = [ ' debug ' , ' trial ' ]
2012-05-31 22:23:07 +00:00
if self . rterrors and self . no_rterrors :
raise AssertionError ( " --rterrors and --no-rterrors conflict. " )
2012-05-31 22:00:00 +00:00
if not self . no_rterrors :
2011-01-19 02:45:32 +00:00
args . append ( ' --rterrors ' )
2012-05-31 22:00:00 +00:00
if self . until_failure :
args . append ( ' --until-failure ' )
2011-01-19 02:45:32 +00:00
if self . reporter :
args . append ( ' --reporter= ' + self . reporter )
if self . suite :
args . append ( self . suite )
rc = subprocess . call ( args )
sys . exit ( rc )
2009-01-29 01:07:16 +00:00
class MakeExecutable ( Command ) :
2011-01-19 23:33:05 +00:00
description = " make the ' bin %s tahoe ' scripts " % ( os . sep , )
2008-09-12 01:03:21 +00:00
user_options = [ ]
2011-01-19 23:33:05 +00:00
2008-09-12 01:03:21 +00:00
def initialize_options ( self ) :
pass
def finalize_options ( self ) :
pass
def run ( self ) :
2009-01-29 01:07:16 +00:00
bin_tahoe_template = os . path . join ( " bin " , " tahoe-script.template " )
2011-01-19 23:31:45 +00:00
# tahoe.pyscript is really only necessary for Windows, but we also
# create it on Unix for consistency.
script_names = [ " tahoe.pyscript " , " tahoe " ]
2010-07-25 08:32:16 +00:00
# Create the tahoe script file under the 'bin' directory. This
# file is exactly the same as the 'tahoe-script.template' script
# except that the shebang line is rewritten to use our sys.executable
# for the interpreter.
2009-01-29 01:07:16 +00:00
f = open ( bin_tahoe_template , " rU " )
script_lines = f . readlines ( )
f . close ( )
2010-07-25 08:32:16 +00:00
script_lines [ 0 ] = ' #! %s \n ' % ( sys . executable , )
for script_name in script_names :
tahoe_script = os . path . join ( " bin " , script_name )
2009-01-29 01:07:16 +00:00
try :
2010-07-25 08:32:16 +00:00
os . remove ( tahoe_script )
except Exception :
if os . path . exists ( tahoe_script ) :
raise
f = open ( tahoe_script , " wb " )
for line in script_lines :
f . write ( line )
f . close ( )
2011-01-31 00:58:09 +00:00
# chmod +x
unix_script = os . path . join ( " bin " , " tahoe " )
old_mode = stat . S_IMODE ( os . stat ( unix_script ) [ stat . ST_MODE ] )
new_mode = old_mode | ( stat . S_IXUSR | stat . S_IRUSR |
stat . S_IXGRP | stat . S_IRGRP |
stat . S_IXOTH | stat . S_IROTH )
os . chmod ( unix_script , new_mode )
2010-07-25 08:32:16 +00:00
old_tahoe_exe = os . path . join ( " bin " , " tahoe.exe " )
try :
os . remove ( old_tahoe_exe )
except Exception :
if os . path . exists ( old_tahoe_exe ) :
raise
2008-09-12 01:03:21 +00:00
2011-12-05 04:40:01 +00:00
GIT_VERSION_BODY = '''
# This _version.py is generated from git metadata by the tahoe setup.py.
2013-04-25 01:14:50 +00:00
__pkgname__ = % ( pkgname ) r
real_version = % ( version ) r
full_version = % ( full ) r
branch = % ( branch ) r
verstr = % ( normalized ) r
2011-12-05 05:49:16 +00:00
__version__ = verstr
2011-12-05 04:40:01 +00:00
'''
2014-11-21 05:14:18 +00:00
def run_command ( args , cwd = None ) :
2015-02-17 19:10:54 +00:00
use_shell = sys . platform == " win32 "
2011-12-05 04:40:01 +00:00
try :
2015-02-17 19:10:54 +00:00
p = subprocess . Popen ( args , stdout = subprocess . PIPE , cwd = cwd , shell = use_shell )
2013-03-17 18:27:58 +00:00
except EnvironmentError as e : # if this gives a SyntaxError, note that Tahoe-LAFS requires Python 2.6+
2014-11-21 05:14:18 +00:00
print ( " Warning: unable to run %r . " % ( " " . join ( args ) , ) )
print ( e )
2011-12-05 04:40:01 +00:00
return None
stdout = p . communicate ( ) [ 0 ] . strip ( )
if p . returncode != 0 :
2014-11-21 05:14:18 +00:00
print ( " Warning: %r returned error code %r . " % ( " " . join ( args ) , p . returncode ) )
2011-12-05 04:40:01 +00:00
return None
return stdout
2014-11-21 05:14:18 +00:00
def versions_from_git ( tag_prefix ) :
# This runs 'git' from the directory that contains this file. That either
2011-12-05 04:40:01 +00:00
# means someone ran a setup.py command (and this code is in
# versioneer.py, thus the containing directory is the root of the source
# tree), or someone ran a project-specific entry point (and this code is
# in _version.py, thus the containing directory is somewhere deeper in
# the source tree). This only gets called if the git-archive 'subst'
# variables were *not* expanded, and _version.py hasn't already been
# rewritten with a short version string, meaning we're inside a checked
# out source tree.
# versions_from_git (as copied from python-versioneer) returns strings
# like "1.9.0-25-gb73aba9-dirty", which means we're in a tree with
# uncommited changes (-dirty), the latest checkin is revision b73aba9,
# the most recent tag was 1.9.0, and b73aba9 has 25 commits that weren't
# in 1.9.0 . The narrow-minded NormalizedVersion parser that takes our
# output (meant to enable sorting of version strings) refuses most of
# that. Tahoe uses a function named suggest_normalized_version() that can
# handle "1.9.0.post25", so dumb down our output to match.
try :
source_dir = os . path . dirname ( os . path . abspath ( __file__ ) )
2014-11-21 05:14:18 +00:00
except NameError as e :
2011-12-05 04:40:01 +00:00
# some py2exe/bbfreeze/non-CPython implementations don't do __file__
2014-11-21 05:14:18 +00:00
print ( " Warning: unable to find version because we could not obtain the source directory. " )
print ( e )
return { }
2015-02-17 19:10:54 +00:00
stdout = run_command ( [ " git " , " describe " , " --tags " , " --dirty " , " --always " ] ,
2011-12-05 04:40:01 +00:00
cwd = source_dir )
if stdout is None :
2014-11-21 05:14:18 +00:00
# run_command already complained.
2011-12-05 04:40:01 +00:00
return { }
if not stdout . startswith ( tag_prefix ) :
2014-11-21 05:14:18 +00:00
print ( " Warning: tag %r doesn ' t start with prefix %r . " % ( stdout , tag_prefix ) )
2011-12-05 04:40:01 +00:00
return { }
version = stdout [ len ( tag_prefix ) : ]
pieces = version . split ( " - " )
if len ( pieces ) == 1 :
normalized_version = pieces [ 0 ]
else :
normalized_version = " %s .post %s " % ( pieces [ 0 ] , pieces [ 1 ] )
2013-04-25 01:14:50 +00:00
2015-02-17 19:10:54 +00:00
stdout = run_command ( [ " git " , " rev-parse " , " HEAD " ] , cwd = source_dir )
2011-12-05 04:40:01 +00:00
if stdout is None :
2014-11-21 05:14:18 +00:00
# run_command already complained.
2011-12-05 04:40:01 +00:00
return { }
full = stdout . strip ( )
if version . endswith ( " -dirty " ) :
full + = " -dirty "
2011-12-05 05:49:16 +00:00
normalized_version + = " .dev0 "
2013-04-25 01:14:50 +00:00
# Thanks to Jistanidiot at <http://stackoverflow.com/questions/6245570/get-current-branch-name>.
2015-02-17 19:10:54 +00:00
stdout = run_command ( [ " git " , " rev-parse " , " --abbrev-ref " , " HEAD " ] , cwd = source_dir )
2013-04-25 01:14:50 +00:00
branch = ( stdout or " unknown " ) . strip ( )
return { " version " : version , " normalized " : normalized_version , " full " : full , " branch " : branch }
2011-12-05 04:40:01 +00:00
2013-03-19 22:26:21 +00:00
# setup.cfg has an [aliases] section which runs "update_version" before many
# commands (like "build" and "sdist") that need to know our package version
# ahead of time. If you add different commands (or if we forgot some), you
# may need to add it to setup.cfg and configure it to run update_version
# before your command.
2011-12-05 04:40:01 +00:00
class UpdateVersion ( Command ) :
description = " update _version.py from revision-control metadata "
user_options = [ ]
def initialize_options ( self ) :
pass
def finalize_options ( self ) :
pass
def run ( self ) :
2014-11-21 08:38:37 +00:00
global version
verstr = version
2013-03-19 22:26:21 +00:00
if os . path . isdir ( os . path . join ( basedir , " .git " ) ) :
verstr = self . try_from_git ( )
2014-11-21 08:38:37 +00:00
2011-12-05 04:40:01 +00:00
if verstr :
self . distribution . metadata . version = verstr
2014-11-21 08:38:37 +00:00
else :
print ( """ \
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Warning : no version information found . This may cause tests to fail .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
""" )
2011-12-05 04:40:01 +00:00
2013-03-19 22:26:21 +00:00
def try_from_git ( self ) :
2014-11-21 05:00:05 +00:00
# If we change APPNAME, the release tag names should also change from then on.
versions = versions_from_git ( APPNAME + ' - ' )
2011-12-05 04:40:01 +00:00
if versions :
2014-11-21 07:56:21 +00:00
f = open ( VERSION_PY_FILENAME , " wb " )
2013-03-19 22:26:21 +00:00
f . write ( GIT_VERSION_BODY %
{ " pkgname " : self . distribution . get_name ( ) ,
" version " : versions [ " version " ] ,
" normalized " : versions [ " normalized " ] ,
2013-04-25 01:14:50 +00:00
" full " : versions [ " full " ] ,
" branch " : versions [ " branch " ] ,
} )
2013-03-19 22:26:21 +00:00
f . close ( )
2014-11-21 08:38:37 +00:00
print ( " Wrote normalized version %r into ' %s ' " % ( versions [ " normalized " ] , VERSION_PY_FILENAME ) )
2014-11-21 07:56:21 +00:00
2011-12-05 04:40:01 +00:00
return versions . get ( " normalized " , None )
2008-08-27 18:26:44 +00:00
class MySdist ( sdist . sdist ) :
""" A hook in the sdist command so that we can determine whether this the
tarball should be ' SUMO ' or not , i . e . whether or not to include the
2008-09-17 20:01:19 +00:00
external dependency tarballs . Note that we always include
misc / dependencies / * in the tarball ; - - sumo controls whether tahoe - deps / *
is included as well .
2008-08-27 18:26:44 +00:00
"""
user_options = sdist . sdist . user_options + \
2008-09-17 20:01:19 +00:00
[ ( ' sumo ' , ' s ' ,
" create a ' sumo ' sdist which includes the contents of tahoe-deps/* " ) ,
]
2008-08-27 18:26:44 +00:00
boolean_options = [ ' sumo ' ]
def initialize_options ( self ) :
sdist . sdist . initialize_options ( self )
2008-09-17 20:01:19 +00:00
self . sumo = False
def make_distribution ( self ) :
# add our extra files to the list just before building the
# tarball/zipfile. We override make_distribution() instead of run()
# because setuptools.command.sdist.run() does not lend itself to
# easy/robust subclassing (the code we need to add goes right smack
# in the middle of a 12-line method). If this were the distutils
# version, we'd override get_file_list().
if self . sumo :
# If '--sumo' was specified, include tahoe-deps/* in the sdist.
# We assume that the user has fetched the tahoe-deps.tar.gz
# tarball and unpacked it already.
self . filelist . extend ( [ os . path . join ( " tahoe-deps " , fn )
for fn in os . listdir ( " tahoe-deps " ) ] )
# In addition, we want the tarball/zipfile to have -SUMO in the
# name, and the unpacked directory to have -SUMO too. The easiest
# way to do this is to patch self.distribution and override the
# get_fullname() method. (an alternative is to modify
# self.distribution.metadata.version, but that also affects the
# contents of PKG-INFO).
fullname = self . distribution . get_fullname ( )
def get_fullname ( ) :
return fullname + " -SUMO "
self . distribution . get_fullname = get_fullname
2011-11-09 18:36:32 +00:00
try :
old_mask = os . umask ( int ( " 022 " , 8 ) )
return sdist . sdist . make_distribution ( self )
finally :
os . umask ( old_mask )
2008-08-27 18:26:44 +00:00
2011-01-19 23:33:05 +00:00
2009-08-18 01:00:57 +00:00
setup_args = { }
if version :
setup_args [ " version " ] = version
versioning: include an "appname" in the application version string in the versioning protocol, and make that appname be controlled by setup.py
It is currently hardcoded in setup.py to be 'allmydata-tahoe'. Ticket #556 is to make it configurable by a runtime command-line argument to setup.py: "--appname=foo", but I suddenly wondered if we really wanted that and at the same time realized that we don't need that for tahoe-1.3.0 release, so this patch just hardcodes it in setup.py.
setup.py inspects a file named 'src/allmydata/_appname.py' and assert that it contains the string "__appname__ = 'allmydata-tahoe'", and creates it if it isn't already present. src/allmydata/__init__.py import _appname and reads __appname__ from it. The rest of the Python code imports allmydata and inspects "allmydata.__appname__", although actually every use it uses "allmydata.__full_version__" instead, where "allmydata.__full_version__" is created in src/allmydata/__init__.py to be:
__full_version__ = __appname + '-' + str(__version__).
All the code that emits an "application version string" when describing what version of a protocol it supports (introducer server, storage server, upload helper), or when describing itself in general (introducer client), usese allmydata.__full_version__.
This fixes ticket #556 at least well enough for tahoe-1.3.0 release.
2009-02-12 00:18:16 +00:00
setup ( name = APPNAME ,
2008-01-22 17:22:51 +00:00
description = ' secure, decentralized, fault-tolerant filesystem ' ,
2014-09-09 17:51:44 +00:00
long_description = open ( ' README.rst ' , ' rU ' ) . read ( ) ,
2010-05-04 09:43:40 +00:00
author = ' the Tahoe-LAFS project ' ,
2010-09-30 15:37:08 +00:00
author_email = ' tahoe-dev@tahoe-lafs.org ' ,
2011-10-29 18:39:46 +00:00
url = ' https://tahoe-lafs.org/ ' ,
2014-09-09 17:51:44 +00:00
license = ' GNU GPL ' , # see README.rst -- there is an alternative licence
2011-08-01 03:19:52 +00:00
cmdclass = { " trial " : Trial ,
2009-01-29 01:07:16 +00:00
" make_executable " : MakeExecutable ,
2011-12-05 04:40:01 +00:00
" update_version " : UpdateVersion ,
2008-09-12 01:03:21 +00:00
" sdist " : MySdist ,
} ,
2007-11-10 01:04:19 +00:00
package_dir = { ' ' : ' src ' } ,
2012-01-08 18:16:54 +00:00
packages = [ ' allmydata ' ,
' allmydata.frontends ' ,
' allmydata.immutable ' ,
' allmydata.immutable.downloader ' ,
' allmydata.introducer ' ,
' allmydata.mutable ' ,
' allmydata.scripts ' ,
' allmydata.storage ' ,
' allmydata.test ' ,
' allmydata.util ' ,
' allmydata.web ' ,
' allmydata.windows ' ,
' buildtest ' ] ,
2007-04-27 20:47:15 +00:00
classifiers = trove_classifiers ,
test_suite = " allmydata.test " ,
2008-09-12 01:03:21 +00:00
install_requires = install_requires ,
2010-06-09 05:05:42 +00:00
tests_require = tests_require ,
2014-03-29 00:41:33 +00:00
package_data = { " allmydata.web " : [ " *.xhtml " ,
" static/*.js " , " static/*.png " , " static/*.css " ,
" static/img/*.png " ,
" static/css/*.css " ,
]
2012-01-08 18:16:54 +00:00
} ,
2008-01-01 06:28:31 +00:00
setup_requires = setup_requires ,
2007-10-11 10:38:24 +00:00
entry_points = { ' console_scripts ' : [ ' tahoe = allmydata.scripts.runner:run ' ] } ,
2007-09-13 22:37:55 +00:00
zip_safe = False , # We prefer unzipped for easier access.
2009-08-18 01:00:57 +00:00
* * setup_args
2007-04-27 20:47:15 +00:00
)