forked from ondratu/formiko
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
191 lines (159 loc) · 6.32 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#!/usr/bin/env python
from setuptools import setup
from docutils.core import publish_string
from docutils.writers.manpage import Writer
from io import open
from gzip import open as zopen
from distutils.command.build import build
from distutils.command.clean import clean
from distutils.command.install_data import install_data
from distutils.core import Command
from distutils.version import StrictVersion
from distutils.errors import DistutilsError
from distutils import log
from os import path, makedirs, listdir
from shutil import rmtree
from formiko import __version__, __url__, __comment__
def doc():
with open("README.rst", "r", encoding="utf-8") as readme:
return readme.read().strip()
def icons_data():
path = 'share/icons/hicolor'
icons = [("%s/scalable/apps" % path, ["icons/formiko.svg"])]
for size in (16, 22, 24, 32, 48, 64, 128, 256, 512):
icons.append(("%s/%dx%d/apps" % (path, size, size),
["icons/%dx%d/formiko.png" % (size, size)]))
return icons
def man_page(writer, src, dst):
with open(src, encoding="utf-8") as source:
rst = source.read().format(version=__version__)
with zopen(dst, 'wb') as destination:
destination.write(publish_string(source=rst, writer=writer))
class XBuild(build):
def initialize_options(self):
build.initialize_options(self)
self.man_base = None
def finalize_options(self):
build.finalize_options(self)
if self.man_base is None:
self.man_base = path.join(self.build_base, 'man')
def run(self):
build.run(self)
log.info("building man pages")
if self.dry_run:
return
writer = Writer()
if not path.exists(self.man_base):
makedirs(self.man_base)
for page in ('formiko', 'formiko-vim'):
log.info('manpage %s.rst -> %s/%s.1.gz'
% (page, self.man_base, page))
man_page(writer, page+'.rst', '%s/%s.1.gz' % (self.man_base, page))
class XClean(clean):
def initialize_options(self):
clean.initialize_options(self)
self.man_base = None
def finalize_options(self):
clean.finalize_options(self)
if self.man_base is None:
self.man_base = path.join(self.build_base, 'man')
def run(self):
clean.run(self)
log.info("clean man pages")
if self.dry_run:
return
if path.exists(self.man_base):
rmtree(self.man_base)
class XInstallData(install_data):
def initialize_options(self):
install_data.initialize_options(self)
self.man_base = None
self.build_base = None
def finalize_options(self):
install_data.finalize_options(self)
self.set_undefined_options('build', ('build_base', 'build_base'))
if self.man_base is None:
self.man_base = path.join(self.build_base, 'man')
def run(self):
self.data_files.append(
('share/man/man1',
list("%s/%s" % (self.man_base, page)
for page in listdir(self.man_base))))
install_data.run(self)
return False
class XCheckVersion(Command):
description = "check if all all versions in all files are same"
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
pkg_version = StrictVersion(__version__)
log.info("package version is %s", pkg_version)
ch_version = StrictVersion(self.read_changelog())
log.info("ChangeLog version is %s", ch_version)
meta_version = StrictVersion(self.read_metainfo())
log.info("metainfo version is %s", meta_version)
if not pkg_version == ch_version == meta_version:
raise DistutilsError("Versions are not same!")
def read_changelog(self):
"""Read last version From ChangeLog."""
with open("ChangeLog", encoding="utf-8") as chl:
for line in chl:
if line.startswith("Version"):
return line[8:].strip()
def read_metainfo(self):
"""Read last version from formiko.metainfo.xml."""
with open("formiko.metainfo.xml", encoding="utf-8") as meta:
for line in meta:
if "<release " in line:
vals = dict((x.split('=') for x in
filter(lambda x: '=' in x, line.split(' '))))
return vals.get("version", "").strip('"')
setup(
name="formiko",
version=__version__,
description=__comment__,
author="Ondrej Tuma",
author_email="mcbig@zeropage.cz",
url=__url__,
packages=['formiko'],
data_files=[('share/doc/formiko', ['README.rst', 'COPYING', 'ChangeLog',
'AUTHORS']),
("share/applications", ["formiko.desktop",
"formiko-vim.desktop"]),
("share/metainfo", ['formiko.metainfo.xml']),
('share/formiko/icons', ['icons/formiko.svg'])] + icons_data(),
keywords=["doc", "html", "rst", "docutils", "md", "markdown", "editor"],
license="BSD",
long_description=doc(),
classifiers=[
"Development Status :: 5 - Production/Stable",
"Environment :: X11 Applications :: GTK",
"Intended Audience :: Developers",
"Intended Audience :: End Users/Desktop",
"License :: OSI Approved :: BSD License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Topic :: Documentation",
"Topic :: Software Development :: Documentation",
"Topic :: Text Editors :: Documentation",
"Topic :: Text Editors :: Text Processing",
"Topic :: Text Processing",
"Topic :: Text Processing :: Markup",
"Topic :: Text Processing :: Markup :: HTML",
"Topic :: Utilities"],
requires=['docutils (>= 0.12)', 'python_gi', 'webkit2', 'gtksourceview'],
install_requires=['docutils >= 0.12'],
entry_points={
'gui_scripts': [
'formiko = formiko.main:main',
'formiko-vim = formiko.main:main_vim'
]
},
cmdclass={'build': XBuild, 'clean': XClean, 'install_data': XInstallData,
'check_version': XCheckVersion}
)