mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-24 05:18:07 +00:00
change build system to use subpackages pristinely and ask them to install themselves into an "instdir"
This commit is contained in:
parent
cc0de7b5a1
commit
22e9e2eb0b
20
Makefile
20
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
|
||||
|
185
setup.py
185
setup.py
@ -1,209 +1,24 @@
|
||||
#! /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)",
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user