Code

- fix mailgw list of methods -- use getattr so that a derived class will
[roundup.git] / setup.py
index e2e226d7889d0f0caaca584192a440f96da340b6..8fe03db6e38a8a163c7d92e1d990ecf15e61d512 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,7 @@ from roundup.dist.command.build_scripts import build_scripts
 from roundup.dist.command.build_py import build_py
 from roundup.dist.command.build import build, list_message_files
 from roundup.dist.command.bdist_rpm import bdist_rpm
+from roundup.dist.command.install_lib import install_lib
 from distutils.core import setup
 
 import sys, os
@@ -40,7 +41,7 @@ def include(d, e):
     'd' -- A directory
 
     'e' -- A glob pattern"""
-    
+
     return (d, [f for f in glob('%s/%s'%(d, e)) if os.path.isfile(f)])
 
 def scriptname(path):
@@ -52,11 +53,8 @@ def scriptname(path):
     return script
 
 def main():
-    # build list of scripts from their implementation modules
-    roundup_scripts = map(scriptname, glob('roundup/scripts/[!_]*.py'))
-
     # template munching
-    packagelist = [
+    packages = [
         'roundup',
         'roundup.anypy',
         'roundup.cgi',
@@ -66,55 +64,59 @@ def main():
         'roundup.backends',
         'roundup.scripts',
     ]
-    installdatafiles = [
-        ('share/roundup/cgi-bin', ['frontends/roundup.cgi']),
-    ]
     py_modules = ['roundup.demo',]
 
+    # build list of scripts from their implementation modules
+    scripts = [scriptname(f) for f in glob('roundup/scripts/[!_]*.py')]
+
+    data_files = [
+        ('share/roundup/cgi-bin', ['frontends/roundup.cgi']),
+    ]
     # install man pages on POSIX platforms
     if os.name == 'posix':
-        installdatafiles.append(('man/man1', ['doc/roundup-admin.1',
-            'doc/roundup-mailgw.1', 'doc/roundup-server.1',
-            'doc/roundup-demo.1']))
+        data_files.append(include('share/man/man1', '*'))
 
     # add the templates to the data files lists
     from roundup.init import listTemplates
-    templates = [t['path'] for t in listTemplates(os.path.join('share','roundup','templates')).values()]
+    templates = [t['path']
+                 for t in listTemplates('share/roundup/templates').values()]
     for tdir in templates:
-        # scan for data files
         for idir in '. detectors extensions html'.split():
-            idir = os.path.join(tdir, idir)
-            if not os.path.isdir(idir):
-                continue
-            tfiles = []
-            for f in os.listdir(idir):
-                if f.startswith('.'):
-                    continue
-                ifile = os.path.join(idir, f)
-                if os.path.isfile(ifile):
-                    tfiles.append(ifile)
-            installdatafiles.append(
-                (os.path.join('share', 'roundup', idir), tfiles)
-            )
+            data_files.append(include(os.path.join(tdir, idir), '*'))
 
     # add message files
     for (_dist_file, _mo_file) in list_message_files():
-        installdatafiles.append((os.path.dirname(_mo_file),
-            [os.path.join("build", _mo_file)]))
+        data_files.append((os.path.dirname(_mo_file),
+                           [os.path.join("build", _mo_file)]))
 
     # add docs
-    installdatafiles.append(include(os.path.join('share', 'doc', 'roundup', 'html'), '*'))
+    data_files.append(include('share/doc/roundup/html', '*'))
 
     # perform the setup action
     from roundup import __version__
-    
+
+    # long_description may not contain non-ascii characters. Distutils
+    # will produce an non-installable installer on linux *and* we can't
+    # run the bdist_wininst on Linux if there are non-ascii characters
+    # because the distutils installer will try to use the mbcs codec
+    # which isn't available on non-windows platforms. See also
+    # http://bugs.python.org/issue10945
+    long_description=open('doc/announcement.txt').read().decode('utf8')
+    try:
+        long_description = long_description.encode('ascii')
+    except UnicodeEncodeError, cause:
+        print >> sys.stderr, "doc/announcement.txt contains non-ascii: %s" \
+            % cause
+        sys.exit(42)
+
     setup(name='roundup',
           version=__version__,
           author="Richard Jones",
           author_email="richard@users.sourceforge.net",
-          description='Issue-tracking System.',
-          long_description="""Roundup is a simple-to-use and -install issue-tracking system
-with command-line, web and e-mail interfaces. Highly customisable.""",
+          description="A simple-to-use and -install issue-tracking system"
+            " with command-line, web and e-mail interfaces. Highly"
+            " customisable.",
+          long_description=long_description,
           url='http://www.roundup-tracker.org',
           download_url='http://pypi.python.org/pypi/roundup',
           classifiers=['Development Status :: 5 - Production/Stable',
@@ -139,11 +141,12 @@ with command-line, web and e-mail interfaces. Highly customisable.""",
                      'build_py': build_py,
                      'build': build,
                      'bdist_rpm': bdist_rpm,
+                     'install_lib': install_lib,
                      },
-          packages=packagelist,
+          packages=packages,
           py_modules=py_modules,
-          scripts=roundup_scripts,
-          data_files=installdatafiles)
+          scripts=scripts,
+          data_files=data_files)
 
 if __name__ == '__main__':
     main()