Dedup meta data, use README as long_description
diff --git a/setup.py b/setup.py
index c4fbbd5..2e2e394 100755
--- a/setup.py
+++ b/setup.py
@@ -5,17 +5,45 @@
 #
 
 """
-Installation script for the OpenSSL module
+Installation script for the OpenSSL module.
 """
 
+import codecs
+import os
+import re
 import sys
 
 from setuptools import setup
 from setuptools.command.test import test as TestCommand
 
 
-# XXX Deduplicate this
-__version__ = '0.15.1'
+HERE = os.path.abspath(os.path.dirname(__file__))
+META_PATH = os.path.join("OpenSSL", "version.py")
+
+
+def read_file(*parts):
+    """
+    Build an absolute path from *parts* and and return the contents of the
+    resulting file.  Assume UTF-8 encoding.
+    """
+    with codecs.open(os.path.join(HERE, *parts), "rb", "ascii") as f:
+        return f.read()
+
+
+META_FILE = read_file(META_PATH)
+
+
+def find_meta(meta):
+    """
+    Extract __*meta*__ from META_FILE.
+    """
+    meta_match = re.search(
+        r"^__{meta}__ = ['\"]([^'\"]*)['\"]".format(meta=meta),
+        META_FILE, re.M
+    )
+    if meta_match:
+        return meta_match.group(1)
+    raise RuntimeError("Unable to find __{meta}__ string.".format(meta=meta))
 
 
 class PyTest(TestCommand):
@@ -38,38 +66,18 @@
         sys.exit(errno)
 
 
-setup(name='pyOpenSSL', version=__version__,
-      packages = ['OpenSSL'],
-      package_dir = {'OpenSSL': 'OpenSSL'},
-      py_modules  = ['OpenSSL.__init__',
-                     'OpenSSL.tsafe',
-                     'OpenSSL.rand',
-                     'OpenSSL.crypto',
-                     'OpenSSL.SSL',
-                     'OpenSSL.version',
-                     'OpenSSL.test.__init__',
-                     'OpenSSL.test.util',
-                     'OpenSSL.test.test_crypto',
-                     'OpenSSL.test.test_rand',
-                     'OpenSSL.test.test_ssl',
-                     'OpenSSL.test.test_tsafe',
-                     'OpenSSL.test.test_util',],
-      description = 'Python wrapper module around the OpenSSL library',
-      author = 'Jean-Paul Calderone',
-      author_email = 'exarkun@twistedmatrix.com',
-      maintainer = 'Jean-Paul Calderone',
-      maintainer_email = 'exarkun@twistedmatrix.com',
-      url = 'https://github.com/pyca/pyopenssl',
-      license = 'APL2',
-      install_requires=["cryptography>=0.7", "six>=1.5.2"],
-      long_description = """\
-High-level wrapper around a subset of the OpenSSL library, includes
- * SSL.Connection objects, wrapping the methods of Python's portable
-   sockets
- * Callbacks written in Python
- * Extensive error-handling mechanism, mirroring OpenSSL's error codes
-...  and much more ;)""",
-      classifiers = [
+setup(
+    name=find_meta("title"),
+    version=find_meta("version"),
+    description=find_meta("summary"),
+    long_description=read_file("README.rst"),
+    author=find_meta("author"),
+    author_email=find_meta("email"),
+    maintainer="Hynek Schlawack",
+    maintainer_email="hs@ox.cx",
+    url=find_meta("uri"),
+    license=find_meta("license"),
+    classifiers=[
         'Development Status :: 6 - Mature',
         'Intended Audience :: Developers',
         'License :: OSI Approved :: Apache Software License',
@@ -77,19 +85,10 @@
         'Operating System :: Microsoft :: Windows',
         'Operating System :: POSIX',
 
-        # General classifiers to indicate "this project supports Python 2" and
-        # "this project supports Python 3".
         'Programming Language :: Python :: 2',
-        # In particular, this makes pyOpenSSL show up on
-        # https://pypi.python.org/pypi?:action=browse&c=533&show=all and is in
-        # accordance with
-        # http://docs.python.org/2/howto/pyporting.html#universal-bits-of-advice
-        'Programming Language :: Python :: 3',
-
-        # More specific classifiers to indicate more precisely which versions
-        # of those languages the project supports.
         'Programming Language :: Python :: 2.6',
         'Programming Language :: Python :: 2.7',
+        'Programming Language :: Python :: 3',
         'Programming Language :: Python :: 3.2',
         'Programming Language :: Python :: 3.3',
 
@@ -98,11 +97,32 @@
         'Topic :: Security :: Cryptography',
         'Topic :: Software Development :: Libraries :: Python Modules',
         'Topic :: System :: Networking',
-        ],
-      test_suite="OpenSSL",
-      tests_require=[
-          "pytest",
-      ],
-      cmdclass={
-          "test": PyTest,
-      })
+    ],
+
+    packages=['OpenSSL'],
+    package_dir={'OpenSSL': 'OpenSSL'},
+    py_modules=['OpenSSL.__init__',
+                'OpenSSL.tsafe',
+                'OpenSSL.rand',
+                'OpenSSL.crypto',
+                'OpenSSL.SSL',
+                'OpenSSL.version',
+                'OpenSSL.test.__init__',
+                'OpenSSL.test.util',
+                'OpenSSL.test.test_crypto',
+                'OpenSSL.test.test_rand',
+                'OpenSSL.test.test_ssl',
+                'OpenSSL.test.test_tsafe',
+                'OpenSSL.test.test_util',],
+    install_requires=[
+        "cryptography>=0.7",
+        "six>=1.5.2"
+    ],
+    test_suite="OpenSSL",
+    tests_require=[
+        "pytest",
+    ],
+    cmdclass={
+        "test": PyTest,
+    }
+)