mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-25 06:48:01 -05:00
178 lines
6.5 KiB
Python
178 lines
6.5 KiB
Python
#!/usr/bin/env python
|
|
|
|
# The contents of this file are subject to the Common Public Attribution
|
|
# License Version 1.0. (the "License"); you may not use this file except in
|
|
# compliance with the License. You may obtain a copy of the License at
|
|
# http://code.reddit.com/LICENSE. The License is based on the Mozilla Public
|
|
# License Version 1.1, but Sections 14 and 15 have been added to cover use of
|
|
# software over a computer network and provide for limited attribution for the
|
|
# Original Developer. In addition, Exhibit A has been modified to be consistent
|
|
# with Exhibit B.
|
|
#
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
# the specific language governing rights and limitations under the License.
|
|
#
|
|
# The Original Code is Reddit.
|
|
#
|
|
# The Original Developer is the Initial Developer. The Initial Developer of the
|
|
# Original Code is CondeNet, Inc.
|
|
#
|
|
# All portions of the code written by CondeNet are Copyright (c) 2006-2010
|
|
# CondeNet, Inc. All Rights Reserved.
|
|
################################################################################
|
|
|
|
from ez_setup import use_setuptools
|
|
use_setuptools()
|
|
from setuptools import find_packages#, setup
|
|
|
|
try:
|
|
from babel.messages import frontend as babel
|
|
except:
|
|
class null(): pass
|
|
babel = null()
|
|
babel.compile_catalog = None
|
|
babel.extract_messages = None
|
|
babel.init_catalog = None
|
|
babel.update_catalog = None
|
|
|
|
from distutils.core import setup, Extension
|
|
|
|
from setuptools.command.easy_install import main as easy_install
|
|
import os
|
|
|
|
# check the PIL is installed; since its package name isn't the same as
|
|
# the distribution name, setuptools can't manage it as a dependency
|
|
try:
|
|
import Image
|
|
except ImportError:
|
|
print "Installing the Python Imaging Library"
|
|
easy_install(["http://effbot.org/downloads/Imaging-1.1.6.tar.gz"])
|
|
|
|
# same with the captcha library
|
|
try:
|
|
import Captcha
|
|
except ImportError:
|
|
print "Installing the PyCaptcha Module"
|
|
easy_install(["http://svn.navi.cx/misc/trunk/pycaptcha"])
|
|
|
|
# ditto for pylons
|
|
try:
|
|
import pylons
|
|
vers = pylons.__version__
|
|
assert vers.startswith('0.9.6.') or vers == '0.9.6', \
|
|
("reddit is only compatible with pylons 0.9.6, not '%s'" % vers)
|
|
except ImportError:
|
|
print "Installing Pylons 0.9.6.2 from the cheese shop"
|
|
easy_install(["http://pypi.python.org/packages/source/P/Pylons/Pylons-0.9.6.2.tar.gz"])
|
|
|
|
# Install our special version of paste that dies on first zombie sighting
|
|
try:
|
|
import paste
|
|
vers = getattr(paste, "__version__", "(undefined)")
|
|
assert vers == '1.7.2-reddit-0.2', \
|
|
("reddit is only compatible with its own magical version of paste, not '%s'" % vers)
|
|
except (ImportError, AssertionError):
|
|
print "Installing reddit's magical version of paste"
|
|
easy_install(["http://addons.reddit.com/paste/Paste-1.7.2-reddit-0.2.tar.gz"])
|
|
|
|
#install the devel version of py-amqplib until the cheeseshop version is updated
|
|
try:
|
|
import amqplib
|
|
except ImportError:
|
|
print "Installing the py-amqplib"
|
|
easy_install(["http://addons.reddit.com/amqp/py-amqplib-0.6.1-devel.tgz"])
|
|
|
|
# we're using a custom build of pylibmc at the moment, so we need to
|
|
# be sure that we have the right version
|
|
pylibmc_version = '1.1.1-reddit-0.1'
|
|
try:
|
|
import pylibmc
|
|
assert pylibmc.__version__ == pylibmc_version
|
|
except (ImportError, AssertionError):
|
|
print "Installing pylibmc"
|
|
easy_install(["https://github.com/downloads/reddit/pylibmc/pylibmc-1.1.1-reddit-0.1.tgz"])
|
|
|
|
filtermod = Extension('Cfilters',
|
|
sources = ['r2/lib/c/filters.c'])
|
|
|
|
discount_path = "r2/lib/contrib/discount"
|
|
discountmod = Extension('reddit-discount',
|
|
include_dirs = [discount_path],
|
|
define_macros = [("VERSION", '"1.6.8"')],
|
|
sources = ([ "r2/lib/c/reddit-discount-wrapper.c" ]
|
|
+ map(lambda x: os.path.join(discount_path, x),
|
|
["Csio.c",
|
|
"css.c",
|
|
"docheader.c",
|
|
"dumptree.c",
|
|
"generate.c",
|
|
"main.c",
|
|
"markdown.c",
|
|
"mkdio.c",
|
|
"resource.c",
|
|
"html5.c",
|
|
"tags.c",
|
|
"toc.c",
|
|
"version.c",
|
|
"emmatch.c",
|
|
"basename.c",
|
|
"xml.c",
|
|
"xmlpage.c"])))
|
|
|
|
ext_modules = [filtermod, discountmod]
|
|
|
|
setup(
|
|
name='r2',
|
|
version="",
|
|
#description="",
|
|
#author="",
|
|
#author_email="",
|
|
#url="",
|
|
install_requires=["Routes<=1.8",
|
|
"Pylons<=0.9.6.2",
|
|
"boto >= 1.9b",
|
|
"pytz",
|
|
"pycrypto",
|
|
"Babel>=0.9.1",
|
|
"flup",
|
|
"cython==0.14",
|
|
"simplejson",
|
|
"SQLAlchemy==0.5.3",
|
|
"BeautifulSoup",
|
|
"cssutils==0.9.5.1",
|
|
"chardet",
|
|
"psycopg2",
|
|
"py_interface",
|
|
"pycountry",
|
|
"thrift05",
|
|
"pycassa==1.1.0",
|
|
],
|
|
packages=find_packages(),
|
|
include_package_data=True,
|
|
test_suite = 'nose.collector',
|
|
package_data={'r2': ['i18n/*/LC_MESSAGES/*.mo']},
|
|
cmdclass = {'compile_catalog': babel.compile_catalog,
|
|
'extract_messages': babel.extract_messages,
|
|
'init_catalog': babel.init_catalog,
|
|
'update_catalog': babel.update_catalog,
|
|
},
|
|
ext_modules = ext_modules,
|
|
entry_points="""
|
|
[paste.app_factory]
|
|
main=r2:make_app
|
|
[paste.app_install]
|
|
main=pylons.util:PylonsInstaller
|
|
[paste.paster_command]
|
|
run = r2.commands:RunCommand
|
|
shell = pylons.commands:ShellCommand
|
|
controller = pylons.commands:ControllerCommand
|
|
restcontroller = pylons.commands:RestControllerCommand
|
|
""",
|
|
)
|
|
|
|
# running setup.py always fucks up the build directory, which we don't
|
|
# need anyway.
|
|
import shutil
|
|
shutil.rmtree("build")
|