|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import absolute_import |
|
|
from __future__ import print_function |
|
|
from distutils.command.build import build as _build |
|
|
import io |
|
|
import os.path |
|
|
import subprocess |
|
|
import sys |
|
|
|
|
|
|
|
|
def setupdir(f): |
|
|
''' Decorate f to run inside the directory where setup.py resides. |
|
|
''' |
|
|
setup_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
|
|
|
def wrapped(*args, **kwargs): |
|
|
old_dir = os.path.abspath(os.curdir) |
|
|
try: |
|
|
os.chdir(setup_dir) |
|
|
return f(*args, **kwargs) |
|
|
finally: |
|
|
os.chdir(old_dir) |
|
|
|
|
|
return wrapped |
|
|
|
|
|
|
|
|
@setupdir |
|
|
def import_setuptools(): |
|
|
import setuptools |
|
|
return setuptools |
|
|
|
|
|
|
|
|
@setupdir |
|
|
def readfile(filename): |
|
|
with io.open(filename, 'r', encoding='utf-8') as f: |
|
|
return f.read() |
|
|
|
|
|
|
|
|
def get_version(): |
|
|
version = readfile('VERSION.txt') |
|
|
version = version.strip() |
|
|
return version |
|
|
|
|
|
|
|
|
def get_long_description(): |
|
|
long_description = readfile('README') + '\n' + readfile('CHANGES') |
|
|
return long_description |
|
|
|
|
|
|
|
|
def get_classifiers(): |
|
|
return [ |
|
|
'Development Status :: 4 - Beta', |
|
|
'Intended Audience :: Developers', |
|
|
'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)', |
|
|
'Programming Language :: Python :: 3', |
|
|
'Programming Language :: Python :: 3.11', |
|
|
'Topic :: Software Development :: Libraries :: Python Modules', |
|
|
'Topic :: Text Processing', |
|
|
] |
|
|
|
|
|
|
|
|
def get_install_requires(): |
|
|
requires = readfile('requirements.in') |
|
|
requires = requires.strip() |
|
|
requires = requires.split('\n') |
|
|
requires = list(requires) |
|
|
return requires |
|
|
|
|
|
|
|
|
class build(_build): |
|
|
def run(self): |
|
|
|
|
|
|
|
|
|
|
|
domains = [ |
|
|
'hwp5proc', |
|
|
'hwp5html', |
|
|
'hwp5odt', |
|
|
'hwp5txt', |
|
|
'hwp5view', |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_build.run(self) |
|
|
|
|
|
|
|
|
setup_info = { |
|
|
|
|
|
|
|
|
|
|
|
'name': 'pyhwp2', |
|
|
'version': get_version(), |
|
|
'description': 'hwp file format parser', |
|
|
'long_description': get_long_description(), |
|
|
|
|
|
|
|
|
|
|
|
'author': 'mete0r', |
|
|
'author_email': '137794+mete0r@users.noreply.github.com', |
|
|
'license': 'GNU Affero General Public License v3 or later (AGPLv3+)', |
|
|
'url': 'https://github.com/mete0r/pyhwp', |
|
|
|
|
|
|
|
|
|
|
|
'classifiers': get_classifiers(), |
|
|
|
|
|
'keywords': 'hwp', |
|
|
|
|
|
|
|
|
|
|
|
'setup_requires': [ |
|
|
'babel', |
|
|
], |
|
|
|
|
|
'packages': [ |
|
|
'hwp5', |
|
|
'hwp5.binmodel', |
|
|
'hwp5.binmodel.controls', |
|
|
'hwp5.plat', |
|
|
'hwp5.plat._uno', |
|
|
'hwp5.proc', |
|
|
'hwp5.storage', |
|
|
'hwp5.transforms', |
|
|
'pyhwp', |
|
|
], |
|
|
|
|
|
'package_dir': { |
|
|
'': 'src', |
|
|
}, |
|
|
|
|
|
'package_data': { |
|
|
'hwp5': [ |
|
|
'README', |
|
|
'COPYING', |
|
|
'VERSION.txt', |
|
|
'xsl/*.xsl', |
|
|
'xsl/odt/*.xsl', |
|
|
'odf-relaxng/OpenDocument-v1.2-os-*.rng', |
|
|
'locale/*/*/*.mo', |
|
|
], |
|
|
}, |
|
|
|
|
|
'python_requires': '>=3.6', |
|
|
|
|
|
|
|
|
|
|
|
'zip_safe': False, |
|
|
|
|
|
'entry_points': { |
|
|
'console_scripts': [ |
|
|
'hwp2html=pyhwp.html_converter:main', |
|
|
'hwp5spec=hwp5.binspec:main', |
|
|
'hwp5proc=hwp5.hwp5proc:main', |
|
|
'hwp5odt=hwp5.hwp5odt:main', |
|
|
'hwp5txt=hwp5.hwp5txt:main', |
|
|
'hwp5html=hwp5.hwp5html:main', |
|
|
'hwp5view=hwp5.hwp5view:main', |
|
|
] |
|
|
}, |
|
|
|
|
|
'install_requires': get_install_requires(), |
|
|
} |
|
|
|
|
|
|
|
|
@setupdir |
|
|
def main(): |
|
|
setuptools = import_setuptools() |
|
|
setup_info['cmdclass'] = { |
|
|
'build': build, |
|
|
} |
|
|
setuptools.setup(**setup_info) |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
main() |
|
|
|