#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# setup.py --- Setup script for pythondialog
# Copyright (c) 2002-2019 Florent Rougon
#
# This file is part of pythondialog.
#
# pythondialog is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# pythondialog is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301 USA.
import os, sys, subprocess, traceback
from setuptools import setup
PACKAGE = "pythondialog"
# This is OK because dialog.py has no dependency outside the standard library.
from dialog import __version__ as VERSION
def run_gitlog_to_changelog(after_this_commit, output=None):
args = [ "gitlog-to-changelog", "--format=%s%n%n%b%n", "--",
"{0}..".format(after_this_commit) ]
try:
subprocess.check_call(args, stdout=output)
except os.error:
print(traceback.format_exc(), file=sys.stderr)
print("""\
Error (see above for a traceback): unable to run {prg}
================================================={underlining}
Maybe this program is not installed on your system. You can download it from:
{url}
Note: if you have problems with the infamous shell+Perl crap in the first lines
of that file, you can replace it with a simple shebang line such as
"#! /usr/bin/perl".""".format(
prg=args[0],
underlining="=" * len(args[0]),
url="https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;"
"f=build-aux/gitlog-to-changelog"), file=sys.stderr)
sys.exit(1)
def generate_changelog(ch_name, write_to_stdout=False):
print("Converting the Git log into ChangeLog format...", end=' ',
file=sys.stderr)
orig_ch_name = "{0}.init".format(ch_name)
# Most recent commit in the file referenced by 'orig_ch_name' (normally,
# ChangeLog.init)
last_commit_in_ch_init = "df4f82a63cc11f9ba389810e1a913c97a8fa5029"
if write_to_stdout:
run_gitlog_to_changelog(last_commit_in_ch_init)
with open(orig_ch_name, "r", encoding="utf-8") as orig_ch:
# Make sure the output is encoded in UTF-8
sys.stdout.buffer.write(("\n" + orig_ch.read()).encode("utf-8"))
else:
tmp_ch_name = "{0}.new".format(ch_name)
try:
with open(tmp_ch_name, "w", encoding="utf-8") as tmp_ch:
run_gitlog_to_changelog(last_commit_in_ch_init, output=tmp_ch)
with open(orig_ch_name, "r", encoding="utf-8") as orig_ch:
tmp_ch.write("\n" + orig_ch.read())
os.rename(tmp_ch_name, ch_name)
finally:
if os.path.exists(tmp_ch_name):
os.unlink(tmp_ch_name)
print("done.", file=sys.stderr)
def main():
ch_name = "ChangeLog"
if os.path.isdir(".git"):
generate_changelog(ch_name)
elif not os.path.isfile(ch_name):
msg = """\
There is no {cl!r} file here and it seems you are not operating from a
clone of the Git repository (no .git directory); therefore, it is impossible to
generate the {cl!r} file from the Git log. Aborting.""".format(cl=ch_name)
sys.exit(msg)
with open("README.rst", "r", encoding="utf-8") as f:
long_description = f.read()
setup(name=PACKAGE,
version=VERSION,
description="A Python interface to the UNIX dialog utility and "
"mostly-compatible programs",
# According to
# <https://packaging.python.org/specifications/core-metadata/> and
# the rendering on PyPI, it appears that only the original author can
# be listed in 'author'. See the AUTHORS file for other contributors.
author="Robb Shecter",
author_email="robb@acm.org",
maintainer="Florent Rougon",
maintainer_email="f.rougon@free.fr",
url="https://pythondialog.sourceforge.io/",
project_urls={
"Documentation": "https://pythondialog.sourceforge.io/doc/",
"SourceForge project page":
"https://sourceforge.net/projects/pythondialog",
"Git repository": "https://sourceforge.net/p/pythondialog/code/",
"Mailing list": "https://sourceforge.net/p/pythondialog/mailman/",
"Issue tracker":
"https://sourceforge.net/p/pythondialog/_list/tickets",
},
long_description=long_description,
long_description_content_type="text/x-rst",
keywords="dialog,ncurses,Xdialog,text-mode interface,terminal",
# Well, there isn't much UNIX-specific code in dialog.py, if at all.
# I am putting Unix here only because of the dialog dependency...
# Note: using the "Unix" case instead of "UNIX", because it is
# spelled this way in Trove classifiers. This argument should be
# unneeded given the Trove classifers, however omitting it leads to
# an ugly 'Platform: UNKNOWN' in pythondialog.egg-info/PKG-INFO.
platforms=["Unix"],
classifiers=[
"Programming Language :: Python :: 3",
"Development Status :: 5 - Production/Stable",
"Environment :: Console :: Curses",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Library or Lesser General Public "
"License (LGPL)",
"Operating System :: Unix",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: User Interfaces",
"Topic :: Software Development :: Widget Sets"],
py_modules=["dialog"],
python_requires=">=3")
if __name__ == "__main__": main()