From d6a9332f800f51b6ba352a66a975a2d246101ad6 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 20 Dec 2024 11:04:13 -0500 Subject: [PATCH] Modernize installation. --- pyproject.toml | 52 ++++++++++++++ setup.py | 183 ++++++++++++++++++------------------------------- 2 files changed, 120 insertions(+), 115 deletions(-) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..0b9c5ac1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,52 @@ +[build-system] +requires = ["setuptools>=64.0.0", "wheel", "setuptools_scm[toml]>=6.2"] +build-backend = "setuptools.build_meta" + +[project] +name = "fenrir-screenreader" +dynamic = ["version"] +description = "A TTY Screen Reader for Linux" +readme = "README.md" +requires-python = ">=3.8" +license = {text = "GNU General Public License v3 or later (GPLv3+)"} +keywords = ["screenreader", "a11y", "accessibility", "terminal", "TTY", "console"] +authors = [ + {name = "Storm Dragon, Jeremiah, Chrys and others", email = "storm_dragon@stormux.org"} +] +classifiers = [ + "Programming Language :: Python", + "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", + "Development Status :: 5 - Production/Stable", + "Topic :: Multimedia :: Sound/Audio :: Speech", + "Environment :: Console", +] +dependencies = [ + "evdev>=1.1.2", + "daemonize>=2.5.0", + "dbus-python>=1.2.8", + "pyudev>=0.21.0", + "setuptools", + "pexpect", + "pyttsx3", + "pyte>=0.7.0", +] + +[project.urls] +Homepage = "https://git.stormux.org/storm/fenrir/" + +[tool.setuptools] +package-dir = {"" = "src"} +include-package-data = true +zip-safe = false + +[tool.setuptools.packages.find] +where = ["src"] +include = ["fenrirscreenreader*"] +namespaces = true + +[tool.setuptools_scm] +write_to = "src/fenrirscreenreader/_version.py" + +[tool.setuptools.data-files] +"usr/share/man/man1" = ["docs/fenrir.1"] +"usr/share/fenrirscreenreader/tools" = ["tools/*"] diff --git a/setup.py b/setup.py index ecd1b48c..c46fe774 100755 --- a/setup.py +++ b/setup.py @@ -1,128 +1,81 @@ #!/usr/bin/env python3 -#https://python-packaging.readthedocs.io/en/latest/minimal.html -import os, glob, sys -import os.path +import os +import sys +import glob from shutil import copyfile -from setuptools import find_packages from setuptools import setup -# handle flags for package manager like aurman and pacaur. -forceSettingsFlag = False -if "--force-settings" in sys.argv: - forceSettingsFlag = True - sys.argv.remove("--force-settings") +def get_data_files(force_settings=False): + data_files = [] + + # Handle locale files + locale_files = glob.glob('locale/*/LC_MESSAGES/*.mo') + for locale_file in locale_files: + lang = locale_file.split(os.sep)[1] + dest_dir = f'/usr/share/locale/{lang}/LC_MESSAGES' + data_files.append((dest_dir, [locale_file])) -dataFiles = [] + # Handle configuration files + directories = glob.glob('config/*') + for directory in directories: + files = glob.glob(directory+'/*') + dest_dir = '' + if 'config/punctuation' in directory: + dest_dir = '/etc/fenrirscreenreader/punctuation' + elif 'config/keyboard' in directory: + dest_dir = '/etc/fenrirscreenreader/keyboard' + elif 'config/settings' in directory: + dest_dir = '/etc/fenrirscreenreader/settings' + if not force_settings: + try: + files.remove('config/settings/settings.conf') + except ValueError: + pass + elif 'config/scripts' in directory: + dest_dir = '/usr/share/fenrirscreenreader/scripts' + if dest_dir: + data_files.append((dest_dir, files)) -# Handle locale files -localeFiles = glob.glob('locale/*/LC_MESSAGES/*.mo') -for localeFile in localeFiles: - lang = localeFile.split(os.sep)[1] - destDir = f'/usr/share/locale/{lang}/LC_MESSAGES' - dataFiles.append((destDir, [localeFile])) + # Handle sound files + files = glob.glob('config/sound/default/*') + data_files.append(('/usr/share/sounds/fenrirscreenreader/default', files)) + files = glob.glob('config/sound/template/*') + data_files.append(('/usr/share/sounds/fenrirscreenreader/template', files)) -# Handle other configuration files -directories = glob.glob('config/*') -for directory in directories: - files = glob.glob(directory+'/*') - destDir = '' - if 'config/punctuation' in directory : - destDir = '/etc/fenrirscreenreader/punctuation' - elif 'config/keyboard' in directory: - destDir = '/etc/fenrirscreenreader/keyboard' - elif 'config/settings' in directory: - destDir = '/etc/fenrirscreenreader/settings' - if not forceSettingsFlag: + return data_files + +def post_install_actions(): + if '--force-settings' not in sys.argv: + print('') + # create settings file from example if not exist + if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'): try: - del(files[files.index('config/settings/settings.conf')]) + copyfile('/etc/fenrirscreenreader/settings/settings.conf.example', + '/etc/fenrirscreenreader/settings/settings.conf') + print('create settings file in /etc/fenrirscreenreader/settings/settings.conf') except: pass - elif 'config/scripts' in directory: - destDir = '/usr/share/fenrirscreenreader/scripts' - if destDir != '': - dataFiles.append((destDir, files)) + else: + print('settings.conf file found. It is not overwritten automatically') -files = glob.glob('config/sound/default/*') -destDir = '/usr/share/sounds/fenrirscreenreader/default' -dataFiles.append((destDir, files)) -files = glob.glob('config/sound//template/*') -destDir = '/usr/share/sounds/fenrirscreenreader/template' -dataFiles.append((destDir, files)) -files = glob.glob('tools/*') -dataFiles.append(('/usr/share/fenrirscreenreader/tools', files)) -dataFiles.append(('/usr/share/man/man1', ['docs/fenrir.1'])) - -def read(fname): - return open(os.path.join(os.path.dirname(__file__), fname)).read() - -setup( - # Application name: - name="fenrir-screenreader", - # Version is now handled by setuptools_scm - use_scm_version=True, - setup_requires=['setuptools_scm'], - # description - description="A TTY Screen Reader for Linux.", - long_description=read('README.md'), - keywords=['screenreader', 'a11y', 'accessibility', 'terminal', 'TTY', 'console'], - license="License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - url="https://git.stormux.org/storm/fenrir/", - # Remove download_url as it contained hardcoded version - classifiers=[ - "Programming Language :: Python", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Development Status :: 5 - Production/Stable", - "Topic :: Multimedia :: Sound/Audio :: Speech", - "Environment :: Console", - ], - - # Application author details: - author="Storm Dragon, Jeremiah, Chrys and others", - author_email="storm_dragon@stormux.org", - - # Packages - packages=find_packages('src/'), - package_dir={'': 'src/'}, - scripts=['src/fenrir'], - - # Include additional files into the package - include_package_data=True, - zip_safe=False, - - data_files=dataFiles, - - # Dependent packages (distributions) - install_requires=[ - "evdev>=1.1.2", - "daemonize>=2.5.0", - "dbus-python>=1.2.8", - "pyudev>=0.21.0", - "setuptools", - "pexpect", - "pyttsx3", - "pyte>=0.7.0", - ], -) - -if not forceSettingsFlag: print('') - # create settings file from example if not exist - if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'): - try: - copyfile('/etc/fenrirscreenreader/settings/settings.conf.example', '/etc/fenrirscreenreader/settings/settings.conf') - print('create settings file in /etc/fenrirscreenreader/settings/settings.conf') - except: - pass - else: - print('settings.conf file found. It is not overwritten automatical') + print('To have Fenrir start at boot:') + print('sudo systemctl enable fenrir') + print('Pulseaudio users may want to run:') + print('/usr/share/fenrirscreenreader/tools/configure_pulse.sh') + print('once as their user account and once as root to configure Pulseaudio.') + print('Please install the following packages manually:') + print('- Speech-dispatcher: for the default speech driver') + print('- Espeak: as basic TTS engine') + print('- sox: is a player for the generic sound driver') -print('') -print('To have Fenrir start at boot:') -print('sudo systemctl enable fenrir') -print('Pulseaudio users may want to run:') -print('/usr/share/fenrirscreenreader/tools/configure_pulse.sh') -print('once as their user account and once as root to configure Pulseaudio.') -print('Please install the following packages manually:') -print('- Speech-dispatcher: for the default speech driver') -print('- Espeak: as basic TTS engine') -print('- sox: is a player for the generic sound driver') +if __name__ == "__main__": + force_settings = '--force-settings' in sys.argv + if force_settings: + sys.argv.remove('--force-settings') + + setup( + data_files=get_data_files(force_settings), + ) + + post_install_actions()