]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
change build system to use subpackages pristinely and ask them to install themselves...
authorZooko O'Whielacronx <zooko@zooko.com>
Tue, 30 Jan 2007 21:57:59 +0000 (14:57 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Tue, 30 Jan 2007 21:57:59 +0000 (14:57 -0700)
Makefile
setup.py

index 6814a5e9a64562c1d08a9664a4013612a7ba3743..439e00e3c97ef78845235c292414cfa3743e32f5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,24 @@
 
 default: build
 
+BASE=$(shell pwd)
+
 .PHONY: build
-build:
-       python setup.py build
-# where does this go? in a platform-specific directory under build/ . Use
-# builddir.py to locate it.
+build: build-pyfec build-Crypto
+       python setup.py install --prefix=$(BASE)/instdir
+
+build-pyfec:
+       cd src/pyfec && python ./setup.py install --prefix=$(BASE)/instdir
+
+build-Crypto:
+       cd src/Crypto && python ./setup.py install --prefix=$(BASE)/instdir
+
+INSTDIR=$(PWD)/instdir/lib/python$(shell python -c 'import sys;print sys.version_info[0]').$(shell python -c 'import sys;print sys.version_info[1]')/site-packages
 
 ifneq ($(PYTHONPATH),)
-PP=PYTHONPATH=${PYTHONPATH}:$(shell python ./builddir.py -a)
+PP=PYTHONPATH=${PYTHONPATH}:$(INSTDIR)
 else
-PP=PYTHONPATH=$(shell python ./builddir.py -a)
+PP=PYTHONPATH=$(INSTDIR)
 endif
 
 .PHONY: run-queen run-client test
index 9c14a6ca0cb541da5ed6a9750eaa2d1921c9bf90..1f51cdc77f20cce706cc85bcbde0d7cf19ddef23 100644 (file)
--- a/setup.py
+++ b/setup.py
 #! /usr/bin/python
 
-#from setuptools import setup, find_packages
 from distutils.core import setup
 from distutils.core import Extension
 from distutils.command.build_ext import build_ext
 import os, sys
 
 
-# we build and install a copy of pycrypto as allmydata.Crypto, because we've
-# made some improvements that have not yet made it upstream (specifically a
-# much faster version of CTR mode). To accomplish this, we must include a
-# couple of pieces from the pycrypto setup.py file here.
-
-if sys.platform == 'win32':
-    HTONS_LIBS = ['ws2_32']
-    plat_ext = [
-                Extension("Crypto.Util.winrandom",
-                          libraries = HTONS_LIBS + ['advapi32'],
-                          include_dirs=['src/Crypto/src/'],
-                          extra_compile_args=['-O0 -g',],
-                          extra_link_args=['-g',],
-                          undef_macros=['NDEBUG',],
-                          sources=["src/Crypto/src/winrand.c"],
-                          **debug_build_kw)
-               ]
-else:
-    HTONS_LIBS = []
-    plat_ext = []
-
-# Functions for finding libraries and files, copied from Python's setup.py.
-
-def find_file(filename, std_dirs, paths):
-    """Searches for the directory where a given file is located,
-    and returns a possibly-empty list of additional directories, or None
-    if the file couldn't be found at all.
-
-    'filename' is the name of a file, such as readline.h or libcrypto.a.
-    'std_dirs' is the list of standard system directories; if the
-        file is found in one of them, no additional directives are needed.
-    'paths' is a list of additional locations to check; if the file is
-        found in one of them, the resulting list will contain the directory.
-    """
-
-    # Check the standard locations
-    for dir in std_dirs:
-        f = os.path.join(dir, filename)
-        if os.path.exists(f): return []
-
-    # Check the additional directories
-    for dir in paths:
-        f = os.path.join(dir, filename)
-        if os.path.exists(f):
-            return [dir]
-
-    # Not found anywhere
-    return None
-
-def find_library_file(compiler, libname, std_dirs, paths):
-    filename = compiler.library_filename(libname, lib_type='shared')
-    result = find_file(filename, std_dirs, paths)
-    if result is not None: return result
-
-    filename = compiler.library_filename(libname, lib_type='static')
-    result = find_file(filename, std_dirs, paths)
-    return result
-
-
-def cc_remove_option (compiler, option):
-    """
-    Remove option from Unix-style compiler.
-    """
-    for optlist in (compiler.compiler, compiler.compiler_so):
-        if option in optlist:
-            optlist.remove(option)
-
-
-class PCTBuildExt (build_ext):
-    def build_extensions(self):
-        debug_build_kw = {}
-        self.extensions += [
-            # Hash functions
-            Extension("allmydata.Crypto.Hash.MD4",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/MD4.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Hash.SHA256",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/SHA256.c"],
-                      **debug_build_kw),
-
-            # Block encryption algorithms
-            Extension("allmydata.Crypto.Cipher.AES",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/AES.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.ARC2",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/ARC2.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.Blowfish",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/Blowfish.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.CAST",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/CAST.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.DES",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/DES.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.DES3",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/DES3.c"],
-                      **debug_build_kw),
-
-            # Stream ciphers
-            Extension("allmydata.Crypto.Cipher.ARC4",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/ARC4.c"],
-                      **debug_build_kw),
-            Extension("allmydata.Crypto.Cipher.XOR",
-                      include_dirs=['src/Crypto/src/'],
-                      sources=["src/Crypto/src/XOR.c"],
-                      **debug_build_kw),
-            ]
-
-        # Detect which modules should be compiled
-        self.detect_modules()
-        if self.compiler.compiler_type == 'unix':
-            if os.uname()[4] == 'm68k':
-                # work around ICE on m68k machines in gcc 4.0.1
-                cc_remove_option(self.compiler, "-O3")
-        build_ext.build_extensions(self)
-
-    def detect_modules (self):
-        lib_dirs = self.compiler.library_dirs + ['/lib', '/usr/lib']
-        inc_dirs = self.compiler.include_dirs + ['/usr/include']
-        exts = []
-        if (self.compiler.find_library_file(lib_dirs, 'gmp')):
-            exts.append(Extension("allmydata.Crypto.PublicKey._fastmath",
-                                  include_dirs=['src/Crypto/src/'],
-                                  libraries=['gmp'],
-                                  sources=["src/Crypto/src/_fastmath.c"]))
-        self.extensions += exts
-
-
-# these are the setup() args for the original pycrypto module. We only use a
-# subset of them.
-"""
-kw = {'name':"pycrypto",
-      'version':"2.0.1",
-      'description':"Cryptographic modules for Python.",
-      'author':"A.M. Kuchling",
-      'author_email':"amk@amk.ca",
-      'url':"http://www.amk.ca/python/code/crypto",
-
-      'cmdclass' : {'build_ext':PCTBuildExt},
-      'packages' : ["Crypto", "Crypto.Hash", "Crypto.Cipher", "Crypto.Util",
-                  "Crypto.Protocol", "Crypto.PublicKey"],
-      'package_dir' : { "Crypto":"." },
-      # One module is defined here, because build_ext won't be
-      # called unless there's at least one extension module defined.
-      'ext_modules':[Extension("Crypto.Hash.MD2",
-                             include_dirs=['src/'],
-                             sources=["src/MD2.c"],
-                               **debug_build_kw)],
-      'classifiers': [
-          'Development Status :: 4 - Beta',
-          'License :: Public Domain',
-          'Intended Audience :: Developers',
-          'Operating System :: Unix',
-          'Operating System :: Microsoft :: Windows',
-          'Operating System :: MacOS :: MacOS X',
-          'Topic :: Security :: Cryptography',
-          ]
-     }
-"""
-
-# this is our actual setup() call
 setup(
     name="AllMyData",
     version="0.0.1",
-    #packages=find_packages('.'),
     packages=["allmydata", "allmydata.test", "allmydata.util",
               "allmydata.filetree", "allmydata.scripts",
-              "allmydata.Crypto", "allmydata.Crypto.Hash",
-              "allmydata.Crypto.Cipher", "allmydata.Crypto.Util",
-              "allmydata.Crypto.Protocol", "allmydata.Crypto.PublicKey",
               "allmydata.py_ecc",
               ],
     package_dir={ "allmydata": "src/allmydata",
-                  "allmydata.Crypto": "src/Crypto",
                   "allmydata.py_ecc": "src/py_ecc",
                   },
     scripts = ["bin/allmydata-tahoe"],
     package_data={ 'allmydata': ['web/*.xhtml'] },
 
-    cmdclass= {'build_ext': PCTBuildExt},
-      # One module is defined here, because build_ext won't be
-      # called unless there's at least one extension module defined.
-    ext_modules=[Extension("allmydata.Crypto.Hash.MD2",
-                           include_dirs=['src/Crypto/src/'],
-                           sources=["src/Crypto/src/MD2.c"])],
-
     description="AllMyData (tahoe2)",
     )