setup.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/usr/bin/env python
  2. # $Id: setup.py 8147 2017-08-03 09:01:16Z grubert $
  3. # Copyright: This file has been placed in the public domain.
  4. import sys
  5. import os
  6. import glob
  7. try:
  8. from distutils.core import setup, Command
  9. from distutils.command.build import build
  10. from distutils.command.build_py import build_py
  11. if sys.version_info >= (3,):
  12. from distutils.command.build_py import build_py_2to3
  13. from distutils.util import copydir_run_2to3
  14. from distutils.command.install_data import install_data
  15. from distutils.util import convert_path
  16. from distutils import log
  17. except ImportError:
  18. print ('Error: The "distutils" standard module, which is required for the ')
  19. print ('installation of Docutils, could not be found. You may need to ')
  20. print ('install a package called "python-devel" (or similar) on your ')
  21. print ('system using your package manager.')
  22. sys.exit(1)
  23. if sys.version_info >= (3,):
  24. # copy-convert auxiliary python sources
  25. class copy_build_py_2to3(build_py_2to3):
  26. """Copy/convert Python source files in given directories recursively.
  27. Build py3k versions of the modules and packages.
  28. Also copy 'test/' suite and run 2to3 on *.py files.
  29. """
  30. manifest_in = """\
  31. exclude *.pyc *~ .DS_Store
  32. recursive-exclude * *.pyc *~ .DS_Store
  33. recursive-exclude functional/output *
  34. include functional/output/README.txt
  35. prune .svn
  36. prune */.svn
  37. prune */*/.svn
  38. prune */*/*/.svn
  39. prune */*/*/*/.svn
  40. prune */*/*/*/*/.svn
  41. """
  42. def run(self):
  43. # fix
  44. print("build_py_2to3")
  45. build_py_2to3.run(self)
  46. print("copy/convert test suite")
  47. loglevel = log.set_threshold(log.ERROR)
  48. copydir_run_2to3('test', 'test3', template=self.manifest_in)
  49. log.set_threshold(loglevel)
  50. class smart_install_data(install_data):
  51. # From <http://wiki.python.org/moin/DistutilsInstallDataScattered>,
  52. # by Pete Shinners.
  53. def run(self):
  54. #need to change self.install_dir to the library dir
  55. install_cmd = self.get_finalized_command('install')
  56. self.install_dir = getattr(install_cmd, 'install_lib')
  57. return install_data.run(self)
  58. class build_data(Command):
  59. def initialize_options(self):
  60. pass
  61. def finalize_options(self):
  62. pass
  63. def run(self):
  64. build_py = self.get_finalized_command('build_py')
  65. data_files = self.distribution.data_files
  66. for f in data_files:
  67. dir = convert_path(f[0])
  68. dir = os.path.join(build_py.build_lib, dir)
  69. self.mkpath(dir)
  70. for data in f[1]:
  71. data = convert_path(data)
  72. self.copy_file(data, dir)
  73. # let our build_data run
  74. build.sub_commands.append(('build_data', lambda *a: True))
  75. def do_setup():
  76. kwargs = package_data.copy()
  77. kwargs['classifiers'] = classifiers
  78. # Install data files properly.
  79. kwargs['cmdclass'] = {'build_data': build_data,
  80. 'install_data': smart_install_data}
  81. # Auto-convert source code for Python 3
  82. if sys.version_info >= (3,):
  83. kwargs['cmdclass']['build_py'] = copy_build_py_2to3
  84. else:
  85. kwargs['cmdclass']['build_py'] = build_py
  86. dist = setup(**kwargs)
  87. return dist
  88. s5_theme_files = []
  89. for dir in glob.glob('docutils/writers/s5_html/themes/*'):
  90. if os.path.isdir(dir):
  91. theme_files = glob.glob('%s/*' % dir)
  92. s5_theme_files.append((dir, theme_files))
  93. package_data = {
  94. 'name': 'docutils',
  95. 'description': 'Docutils -- Python Documentation Utilities',
  96. 'long_description': """\
  97. Docutils is a modular system for processing documentation
  98. into useful formats, such as HTML, XML, and LaTeX. For
  99. input Docutils supports reStructuredText, an easy-to-read,
  100. what-you-see-is-what-you-get plaintext markup syntax.""", # wrap at col 60
  101. 'url': 'http://docutils.sourceforge.net/',
  102. 'version': '0.14',
  103. 'author': 'David Goodger',
  104. 'author_email': 'goodger@python.org',
  105. 'maintainer': 'docutils-develop list',
  106. 'maintainer_email': 'docutils-develop@lists.sourceforge.net',
  107. 'license': 'public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)',
  108. 'platforms': 'OS-independent',
  109. 'package_dir': {'docutils': 'docutils',
  110. 'docutils.tools': 'tools'},
  111. 'packages': ['docutils',
  112. 'docutils.languages',
  113. 'docutils.parsers',
  114. 'docutils.parsers.rst',
  115. 'docutils.parsers.rst.directives',
  116. 'docutils.parsers.rst.languages',
  117. 'docutils.readers',
  118. # 'docutils.readers.python', # in the sandbox since 0.8
  119. 'docutils.transforms',
  120. 'docutils.utils',
  121. 'docutils.utils.math',
  122. 'docutils.writers',
  123. 'docutils.writers.html4css1',
  124. 'docutils.writers.html5_polyglot',
  125. # 'docutils.writers.xhtml11', # moved to the sandbox
  126. 'docutils.writers.pep_html',
  127. 'docutils.writers.s5_html',
  128. 'docutils.writers.latex2e',
  129. # 'docutils.writers.newlatex2e', # in the sandbox since 0.8
  130. 'docutils.writers.xetex',
  131. 'docutils.writers.odf_odt',
  132. ],
  133. 'data_files': ([('docutils/parsers/rst/include',
  134. glob.glob('docutils/parsers/rst/include/*.txt')),
  135. ('docutils/writers/html5_polyglot',
  136. ['docutils/writers/html5_polyglot/minimal.css',
  137. 'docutils/writers/html5_polyglot/plain.css',
  138. 'docutils/writers/html5_polyglot/math.css',
  139. 'docutils/writers/html5_polyglot/template.txt']),
  140. ('docutils/writers/html4css1',
  141. ['docutils/writers/html4css1/html4css1.css',
  142. 'docutils/writers/html4css1/template.txt']),
  143. ('docutils/writers/latex2e',
  144. ['docutils/writers/latex2e/default.tex',
  145. 'docutils/writers/latex2e/titlepage.tex',
  146. 'docutils/writers/latex2e/xelatex.tex',]),
  147. ('docutils/writers/pep_html',
  148. ['docutils/writers/pep_html/pep.css',
  149. 'docutils/writers/pep_html/template.txt']),
  150. ('docutils/writers/s5_html/themes',
  151. ['docutils/writers/s5_html/themes/README.txt']),
  152. ('docutils/writers/odf_odt',
  153. ['docutils/writers/odf_odt/styles.odt']),
  154. ]
  155. + s5_theme_files),
  156. 'scripts' : ['tools/rst2html.py',
  157. 'tools/rst2html4.py',
  158. 'tools/rst2html5.py',
  159. 'tools/rst2s5.py',
  160. 'tools/rst2latex.py',
  161. 'tools/rst2xetex.py',
  162. 'tools/rst2man.py',
  163. 'tools/rst2xml.py',
  164. 'tools/rst2pseudoxml.py',
  165. 'tools/rstpep2html.py',
  166. 'tools/rst2odt.py',
  167. 'tools/rst2odt_prepstyles.py',
  168. ],}
  169. """Distutils setup parameters."""
  170. classifiers = [
  171. 'Development Status :: 4 - Beta',
  172. 'Environment :: Console',
  173. 'Intended Audience :: End Users/Desktop',
  174. 'Intended Audience :: Other Audience',
  175. 'Intended Audience :: Developers',
  176. 'Intended Audience :: System Administrators',
  177. 'License :: Public Domain',
  178. 'License :: OSI Approved :: Python Software Foundation License',
  179. 'License :: OSI Approved :: BSD License',
  180. 'License :: OSI Approved :: GNU General Public License (GPL)',
  181. 'Operating System :: OS Independent',
  182. 'Programming Language :: Python :: 2.4',
  183. 'Programming Language :: Python :: 2.5',
  184. 'Programming Language :: Python :: 2.6',
  185. 'Programming Language :: Python :: 2.7',
  186. 'Programming Language :: Python :: 3',
  187. 'Topic :: Documentation',
  188. 'Topic :: Software Development :: Documentation',
  189. 'Topic :: Text Processing',
  190. 'Natural Language :: English', # main/default language, keep first
  191. 'Natural Language :: Afrikaans',
  192. 'Natural Language :: Catalan',
  193. 'Natural Language :: Chinese (Simplified)',
  194. 'Natural Language :: Chinese (Traditional)',
  195. 'Natural Language :: Czech',
  196. 'Natural Language :: Dutch',
  197. 'Natural Language :: Esperanto',
  198. 'Natural Language :: Finnish',
  199. 'Natural Language :: French',
  200. 'Natural Language :: Galician',
  201. 'Natural Language :: German',
  202. 'Natural Language :: Italian',
  203. 'Natural Language :: Japanese',
  204. 'Natural Language :: Polish',
  205. 'Natural Language :: Portuguese (Brazilian)',
  206. 'Natural Language :: Russian',
  207. 'Natural Language :: Slovak',
  208. 'Natural Language :: Spanish',
  209. 'Natural Language :: Swedish',
  210. ]
  211. # BUG pypi did not like following languages
  212. # 'Natural Language :: Lithuanian',
  213. """Trove classifiers for the Distutils "register" command."""
  214. if __name__ == '__main__' :
  215. do_setup()