]> git.rkrishnan.org Git - tahoe-lafs/zfec.git/blobdiff - zfec/setup.py
setup: upgrade the bundled copy of zetuptoolz from 0.6c10dev to 0.6c12dev and increas...
[tahoe-lafs/zfec.git] / zfec / setup.py
index 287b630f7b9bca7cadd8c929ccc2d62fba47dc2c..cda9ed0144fe360a77829e09c0c93346d6c6f996 100755 (executable)
@@ -1,44 +1,59 @@
 #!/usr/bin/env python
 
-# zfec -- a fast C implementation of Reed-Solomon erasure coding with
-# command-line, C, and Python interfaces
+# zfec -- fast forward error correction library with Python interface
 # 
-# Copyright (C) 2007 Allmydata, Inc.
+# Copyright (C) 2007-2008 Allmydata, Inc.
 # Author: Zooko Wilcox-O'Hearn
-# mailto:zooko@zooko.com
 # 
 # This file is part of zfec.
-# 
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your option)
-# any later version.  This package also comes with the added permission that,
-# in the case that you are obligated to release a derived work under this
-# licence (as per section 2.b of the GPL), you may delay the fulfillment of
-# this obligation for up to 12 months.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# See README.txt for licensing information.
+
+import os, re, sys
+
+miscdeps=os.path.join(os.getcwd(), 'misc', 'dependencies')
 
-from distutils.core import Extension, setup
+try:
+    from ez_setup import use_setuptools
+except ImportError:
+    pass
+else:
+    # 0.6c7 on Windows and 0.6c6 on Ubuntu had a problem with multiple
+    # overlapping dependencies on pyutil -- it would end up with the 'pyutil'
+    # key set in sys.modules but the actual code (and the temporary directory
+    # in the filesystem in which the code used to reside) gone, when it needed
+    # pyutil again later.
+    # On cygwin there was a conflict with swig with setuptools 0.6c7:
+    #   File "/home/Buildslave/windows-cygwin-pycryptopp/windows-cygwin/build/misc/dependencies/setuptools-0.6c7.egg/setuptools/command/build_ext.py", line 77, in swig_sources
+    # TypeError: swig_sources() takes exactly 3 arguments (2 given)
+    # This invokes our own customized version of ez_setup.py to make sure
+    # that setuptools v0.6c12dev (which is our own toothpick of setuptools)
+    # is used to build.
+    use_setuptools(download_delay=0, min_version="0.6c12dev")
 
+from setuptools import Extension, find_packages, setup
 
-DEBUGMODE=False
-# DEBUGMODE=True
+if "--debug" in sys.argv:
+    DEBUGMODE=True
+    sys.argv.remove("--debug")
+else:
+    DEBUGMODE=False
 
 extra_compile_args=[]
 extra_link_args=[]
 
 extra_compile_args.append("-std=c99")
 
+define_macros=[]
 undef_macros=[]
 
+for arg in sys.argv:
+    if arg.startswith("--stride="):
+        stride = int(arg[len("--stride="):])
+        define_macros.append(('STRIDE', stride))
+        sys.argv.remove(arg)
+        break
+
 if DEBUGMODE:
     extra_compile_args.append("-O0")
     extra_compile_args.append("-g")
@@ -47,28 +62,119 @@ if DEBUGMODE:
     undef_macros.append('NDEBUG')
 
 trove_classifiers=[
-    "Development Status :: 4 - Beta", 
-    "Environment :: No Input/Output (Daemon)", 
-    "Intended Audience :: Developers", 
+    "Development Status :: 5 - Production/Stable",
+    "Environment :: Console",
     "License :: OSI Approved :: GNU General Public License (GPL)", 
-    "Natural Language :: English", 
+    "License :: DFSG approved",
+    "License :: Other/Proprietary License",
+    "Intended Audience :: Developers", 
+    "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",
+    "Operating System :: Microsoft :: Windows :: Windows NT/2000",
     "Operating System :: OS Independent", 
+    "Natural Language :: English", 
     "Programming Language :: C", 
     "Programming Language :: Python", 
+    "Programming Language :: Python :: 2",
+    "Programming Language :: Python :: 2.4",
+    "Programming Language :: Python :: 2.5",
+    "Topic :: Utilities",
+    "Topic :: System :: Systems Administration",
+    "Topic :: System :: Filesystems",
+    "Topic :: System :: Distributed Computing",
+    "Topic :: Software Development :: Libraries",
+    "Topic :: Communications :: Usenet News",
     "Topic :: System :: Archiving :: Backup", 
+    "Topic :: System :: Archiving :: Mirroring", 
+    "Topic :: System :: Archiving", 
     ]
 
-setup(name='zfec',
-      version='1.0.0a2',
-      summary='a fast C implementation of Reed-Solomon erasure coding with command-line, C, and Python interfaces',
-      description='Erasure coding -- also called "forward error correction" -- is the generation of redundant blocks of information such that if some blocks are lost ("erased") then the original data can be recovered from the remaining blocks.  This package contains an optimized implementation along with command-line, C, and Python interfaces.',
-      author='Zooko O\'Whielacronx',
-      author_email='zooko@zooko.com',
-      url='http://allmydata.com/source/zfec',
-      license='GNU GPL',
-      platform='Any',
-      packages=['zfec', 'zfec.util', 'zfec.test'],
-      classifiers=trove_classifiers,
-      scripts=['bin/zfec', 'bin/zunfec',],
-      ext_modules=[Extension('_fec', ['zfec/fec.c', 'zfec/_fecmodule.c',], extra_link_args=extra_link_args, extra_compile_args=extra_compile_args, undef_macros=undef_macros),],
-      )
+PKG = "zfec"
+VERSIONFILE = os.path.join(PKG, "_version.py")
+verstr = "unknown"
+try:
+    verstrline = open(VERSIONFILE, "rt").read()
+except EnvironmentError:
+    pass # Okay, there is no version file.
+else:
+    VSRE = r"^verstr = ['\"]([^'\"]*)['\"]"
+    mo = re.search(VSRE, verstrline, re.M)
+    if mo:
+        verstr = mo.group(1)
+    else:
+        print "unable to find version in %s" % (VERSIONFILE,)
+        raise RuntimeError("if %s.py exists, it is required to be well-formed" % (VERSIONFILE,))
+
+dependency_links=[os.path.join(miscdeps, t) for t in os.listdir(miscdeps) if t.endswith(".tar")]
+setup_requires = []
+
+# The darcsver command from the darcsver plugin is needed to initialize the
+# distribution's .version attribute correctly. (It does this either by
+# examining darcs history, or if that fails by reading the
+# zfec/_version.py file). darcsver will also write a new version
+# stamp in zfec/_version.py, with a version number derived from
+# darcs history. Note that the setup.cfg file has an "[aliases]" section
+# which enumerates commands that you might run and specifies that it will run
+# darcsver before each one. If you add different commands (or if I forgot
+# some that are already in use), you may need to add it to setup.cfg and
+# configure it to run darcsver before your command, if you want the version
+# number to be correct when that command runs.
+# http://pypi.python.org/pypi/darcsver
+setup_requires.append('darcsver >= 1.2.0')
+
+# setuptools_darcs is required to produce complete distributions (such as with
+# "sdist" or "bdist_egg"), unless there is a zfec.egg-info/SOURCE.txt file
+# present which contains a complete list of files that should be included.
+# http://pypi.python.org/pypi/setuptools_darcs
+setup_requires.append('setuptools_darcs >= 1.1.0')
+
+# stdeb is required to build Debian dsc files.
+if "sdist_dsc" in sys.argv:
+    setup_requires.append('stdeb')
+
+data_fnames=[ 'COPYING.GPL', 'changelog', 'COPYING.TGPPL.html', 'TODO', 'README.txt' ]
+
+# In case we are building for a .deb with stdeb's sdist_dsc command, we put the
+# docs in "share/doc/$PKG".
+doc_loc = "share/doc/" + PKG
+data_files = [(doc_loc, data_fnames)]
+
+def _setup(test_suite):
+    setup(name=PKG,
+          version=verstr,
+          description='a fast erasure codec which can be used with the command-line, C, Python, or Haskell',
+          long_description='Fast, portable, programmable erasure coding a.k.a. "forward error correction": the generation of redundant blocks of information such that if some blocks are lost then the original data can be recovered from the remaining blocks.  The zfec package includes command-line tools, C API, Python API, and Haskell API',
+          author='Zooko O\'Whielacronx',
+          author_email='zooko@zooko.com',
+          url='http://allmydata.org/trac/'+PKG,
+          license='GNU GPL',
+          dependency_links=dependency_links,
+          install_requires=["argparse >= 0.8", "pyutil >= 1.3.19"],
+          tests_require=["pyutil >= 1.3.19"],
+          packages=find_packages(),
+          include_package_data=True,
+          data_files=data_files,
+          setup_requires=setup_requires,
+          classifiers=trove_classifiers,
+          entry_points = { 'console_scripts': [ 'zfec = %s.cmdline_zfec:main' % PKG, 'zunfec = %s.cmdline_zunfec:main' % PKG ] },
+          ext_modules=[Extension(PKG+'._fec', [PKG+'/fec.c', PKG+'/_fecmodule.c',], extra_link_args=extra_link_args, extra_compile_args=extra_compile_args, undef_macros=undef_macros, define_macros=define_macros),],
+          test_suite=test_suite,
+          zip_safe=False, # I prefer unzipped for easier access.
+          )
+
+test_suite_name=PKG+".test"
+try:
+    _setup(test_suite=test_suite_name)
+except Exception, le:
+    # to work around a bug in Elisa v0.3.5
+    # https://bugs.launchpad.net/elisa/+bug/263697
+    if "test_suite must be a list" in str(le):
+        _setup(test_suite=[test_suite_name])
+    else:
+        raise