# ============================================================================= # ____ _ _ ____ _ # _ __ _ _ / ___| | | | _ \| | # | '_ \| | | | | _| |_| | | | | | # | |_) | |_| | |_| | _ | |_| | |___ # | .__/ \__, |\____|_| |_|____/|_____| # |_| |___/ # ============================================================================= # Authors: # Tristan Gingold # Patrick Lehmann # Unai Martinez-Corral # # Package installer: Python binding for GHDL and high-level APIs. # # License: # ============================================================================ # Copyright (C) 2019-2021 Tristan Gingold # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # SPDX-License-Identifier: GPL-2.0-or-later # ============================================================================ from pathlib import Path from re import compile as re_compile from typing import List from setuptools import ( setup as setuptools_setup, find_packages as setuptools_find_packages, ) gitHubNamespace = "ghdl" projectName = "ghdl" packageName = "pyGHDL" packagePath = Path(packageName) readmeFile = packagePath / "README.md" requirementsFile = packagePath / "requirements.txt" # Read (local) README for upload to PyPI def get_description(file: Path) -> str: with file.open("r") as fh: description = fh.read() return description # Read requirements file and add them to package dependency list def get_requirements(file: Path) -> List[str]: requirements = [] with file.open("r") as fh: for line in fh.read().splitlines(): if line.startswith("#") or line == "": continue elif line.startswith("-r"): # Remove the first word/argument (-r) filename = " ".join(line.split(" ")[1:]) requirements += get_requirements(file.parent / filename) elif line.startswith("https"): # Convert 'URL#NAME' to 'NAME @ URL' splitItems = line.split("#") requirements.append("{} @ {}".format(splitItems[1], splitItems[0])) else: requirements.append(line) return requirements def get_version(): # Try from version.py. Reads it to avoid loading the shared library. pattern = re_compile('^__version__ = "(.*)"\n') try: line = open("pyGHDL/libghdl/version.py").read() match = pattern.match(line) if match: return match.group(1) except Exception: pass raise Exception("Cannot find version") # Derive URLs sourceCodeURL = "https://github.com/{namespace}/{projectName}".format( namespace=gitHubNamespace, projectName=projectName ) documentationURL = ( "https://{namespace}.github.io/{projectName}/using/py/index.html".format( namespace=gitHubNamespace, projectName=projectName ) ) requirements = list(set(get_requirements(requirementsFile))) # Assemble all package information setuptools_setup( name=packageName, version=get_version(), author="Tristan Gingold", author_email="tgingold@free.fr", license="GPL-2.0-or-later", description="Python binding for GHDL and high-level APIs (incl. LSP).", long_description=get_description(readmeFile), long_description_content_type="text/markdown", url=sourceCodeURL, project_urls={ "Documentation": documentationURL, "Source Code": sourceCodeURL, "Issue Tracker": sourceCodeURL + "/issues", }, python_requires=">=3.6", install_requires=requirements, packages=setuptools_find_packages(exclude=("tests",)), entry_points={ "console_scripts": [ "ghdl-ls = pyGHDL.cli.lsp:main", "ghdl-dom = pyGHDL.cli.dom:main", ] }, keywords="Python3 VHDL Parser Compiler Simulator GHDL", classifiers=[ "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Development Status :: 4 - Beta", # "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Compilers", "Topic :: Software Development :: Testing", "Topic :: Utilities", ], )