Code

68e72195d38df26942c3e945f0ca90634da75a86
[roundup.git] / setup.py
1 #! /usr/bin/env python
2 #
3 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
4 # This module is free software, and you may redistribute it and/or modify
5 # under the same terms as Python, so long as this copyright message and
6 # disclaimer are retained in their original form.
7 #
8 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
9 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
10 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
11 # POSSIBILITY OF SUCH DAMAGE.
12 #
13 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
15 # FOR A PARTICULAR PURPOSE.  THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
18 #
21 from roundup.dist.command.build_doc import build_doc
22 from roundup.dist.command.build_scripts import build_scripts
23 from roundup.dist.command.build_py import build_py
24 from roundup.dist.command.build import build, list_message_files
25 from roundup.dist.command.bdist_rpm import bdist_rpm
26 from distutils.core import setup
28 import sys, os
29 from glob import glob
31 # patch distutils if it can't cope with the "classifiers" keyword
32 from distutils.dist import DistributionMetadata
33 if not hasattr(DistributionMetadata, 'classifiers'):
34     DistributionMetadata.classifiers = None
35     DistributionMetadata.download_url = None
37 def include(d, e):
38     """Generate a pair of (directory, file-list) for installation.
40     'd' -- A directory
42     'e' -- A glob pattern"""
44     return (d, [f for f in glob('%s/%s'%(d, e)) if os.path.isfile(f)])
46 def scriptname(path):
47     """ Helper for building a list of script names from a list of
48         module files.
49     """
50     script = os.path.splitext(os.path.basename(path))[0]
51     script = script.replace('_', '-')
52     return script
54 def main():
55     # template munching
56     packages = [
57         'roundup',
58         'roundup.anypy',
59         'roundup.cgi',
60         'roundup.cgi.PageTemplates',
61         'roundup.cgi.TAL',
62         'roundup.cgi.ZTUtils',
63         'roundup.backends',
64         'roundup.scripts',
65     ]
66     py_modules = ['roundup.demo',]
68     # build list of scripts from their implementation modules
69     scripts = [scriptname(f) for f in glob('roundup/scripts/[!_]*.py')]
71     data_files = [
72         ('share/roundup/cgi-bin', ['frontends/roundup.cgi']),
73     ]
74     # install man pages on POSIX platforms
75     if os.name == 'posix':
76         data_files.append(include('share/man/man1', '*'))
78     # add the templates to the data files lists
79     from roundup.init import listTemplates
80     templates = [t['path']
81                  for t in listTemplates('share/roundup/templates').values()]
82     for tdir in templates:
83         for idir in '. detectors extensions html'.split():
84             data_files.append(include(os.path.join(tdir, idir), '*'))
86     # add message files
87     for (_dist_file, _mo_file) in list_message_files():
88         data_files.append((os.path.dirname(_mo_file),
89                            [os.path.join("build", _mo_file)]))
91     # add docs
92     data_files.append(include('share/doc/roundup/html', '*'))
94     # perform the setup action
95     from roundup import __version__
97     setup(name='roundup',
98           version=__version__,
99           author="Richard Jones",
100           author_email="richard@users.sourceforge.net",
101         'description': "A simple-to-use and -install issue-tracking system"
102             " with command-line, web and e-mail interfaces. Highly"
103             " customisable.",
104         'long_description':
105 '''In this release
106 ===============
108 1.4.7 is primarily a bugfix release which contains important security
109 fixes:
111 - a number of security issues were discovered by Daniel Diniz
112 - EditCSV and ExportCSV altered to include permission checks
113 - HTTP POST required on actions which alter data
114 - HTML file uploads served as application/octet-stream
115 - Handle Unauthorised in file serving correctly
116 - New item action reject creation of new users
117 - Item retirement was not being controlled
118 - Roundup is now compatible with Python 2.6
119 - Improved French and German translations
120 - Improve consistency of item sorting in HTML interface
121 - Various other small bug fixes, robustification and optimisation
123 Though some new features made it in also:
125 - Provide a "no selection" option in web interface selection widgets
126 - Debug logging now uses the logging module rather than print
127 - Allow CGI frontend to serve XMLRPC requests.
128 - Added XMLRPC actions, as well as bridging CGI actions to XMLRPC actions.
129 - Optimized large file serving via mod_python / sendfile().
130 - Support resuming downloads for (large) files.
132 If you're upgrading from an older version of Roundup you *must* follow
133 the "Software Upgrade" guidelines given in the maintenance documentation.
135 Roundup requires python 2.3 or later for correct operation.
137 To give Roundup a try, just download (see below), unpack and run::
139     roundup-demo
141 Documentation is available at the website:
142      http://roundup.sourceforge.net/
143 Mailing lists - the place to ask questions:
144      http://sourceforge.net/mail/?group_id=31577
146 About Roundup
147 =============
149 Roundup is a simple-to-use and -install issue-tracking system with
150 command-line, web and e-mail interfaces. It is based on the winning design
151 from Ka-Ping Yee in the Software Carpentry "Track" design competition.
153 Note: Ping is not responsible for this project. The contact for this
154 project is richard@users.sourceforge.net.
156 Roundup manages a number of issues (with flexible properties such as
157 "description", "priority", and so on) and provides the ability to:
159 (a) submit new issues,
160 (b) find and edit existing issues, and
161 (c) discuss issues with other participants.
163 The system will facilitate communication among the participants by managing
164 discussions and notifying interested parties when issues are edited. One of
165 the major design goals for Roundup that it be simple to get going. Roundup
166 is therefore usable "out of the box" with any python 2.3+ installation. It
167 doesn't even need to be "installed" to be operational, though a
168 disutils-based install script is provided.
170 It comes with two issue tracker templates (a classic bug/feature tracker and
171 a minimal skeleton) and five database back-ends (anydbm, sqlite, metakit,
172 mysql and postgresql).
173 ''',
174           url='http://www.roundup-tracker.org',
175           download_url='http://pypi.python.org/pypi/roundup',
176           classifiers=['Development Status :: 5 - Production/Stable',
177                        'Environment :: Console',
178                        'Environment :: Web Environment',
179                        'Intended Audience :: End Users/Desktop',
180                        'Intended Audience :: Developers',
181                        'Intended Audience :: System Administrators',
182                        'License :: OSI Approved :: Python Software Foundation License',
183                        'Operating System :: MacOS :: MacOS X',
184                        'Operating System :: Microsoft :: Windows',
185                        'Operating System :: POSIX',
186                        'Programming Language :: Python',
187                        'Topic :: Communications :: Email',
188                        'Topic :: Office/Business',
189                        'Topic :: Software Development :: Bug Tracking',
190                        ],
192           # Override certain command classes with our own ones
193           cmdclass= {'build_doc': build_doc,
194                      'build_scripts': build_scripts,
195                      'build_py': build_py,
196                      'build': build,
197                      'bdist_rpm': bdist_rpm,
198                      },
199           packages=packages,
200           py_modules=py_modules,
201           scripts=scripts,
202           data_files=data_files)
204 if __name__ == '__main__':
205     main()
207 # vim: set filetype=python sts=4 sw=4 et si :