From 03836b00aeddca2fd73f078d7850dc58be632466 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Sun, 12 Dec 2021 14:35:51 +0100
Subject: Changed export decorator from pydecor to pyTooling.Decorators

---
 pyGHDL/cli/dom.py                    |  9 ++++-----
 pyGHDL/cli/lsp.py                    |  7 ++++---
 pyGHDL/dom/Aggregates.py             |  2 +-
 pyGHDL/dom/Attribute.py              |  2 +-
 pyGHDL/dom/Concurrent.py             |  2 +-
 pyGHDL/dom/DesignUnit.py             |  2 +-
 pyGHDL/dom/Expression.py             |  2 +-
 pyGHDL/dom/InterfaceItem.py          |  2 +-
 pyGHDL/dom/Literal.py                |  2 +-
 pyGHDL/dom/Misc.py                   |  2 +-
 pyGHDL/dom/Names.py                  |  2 +-
 pyGHDL/dom/NonStandard.py            |  2 +-
 pyGHDL/dom/Object.py                 |  2 +-
 pyGHDL/dom/PSL.py                    |  2 +-
 pyGHDL/dom/Range.py                  |  2 +-
 pyGHDL/dom/Sequential.py             |  2 +-
 pyGHDL/dom/Subprogram.py             |  2 +-
 pyGHDL/dom/Symbol.py                 |  2 +-
 pyGHDL/dom/Type.py                   |  2 +-
 pyGHDL/dom/_Translate.py             |  2 +-
 pyGHDL/dom/_Utils.py                 |  2 +-
 pyGHDL/dom/__init__.py               |  2 +-
 pyGHDL/dom/formatting/prettyprint.py |  2 +-
 pyGHDL/libghdl/__init__.py           | 10 +++++-----
 pyGHDL/libghdl/_decorator.py         |  2 +-
 pyGHDL/libghdl/_types.py             |  2 +-
 pyGHDL/libghdl/errorout.py           |  2 +-
 pyGHDL/libghdl/errorout_console.py   |  2 +-
 pyGHDL/libghdl/errorout_memory.py    |  2 +-
 pyGHDL/libghdl/files_map.py          |  2 +-
 pyGHDL/libghdl/files_map_editor.py   |  2 +-
 pyGHDL/libghdl/libraries.py          |  2 +-
 pyGHDL/libghdl/name_table.py         |  2 +-
 pyGHDL/libghdl/requirements.txt      |  2 +-
 pyGHDL/libghdl/std_names.py          |  2 +-
 pyGHDL/libghdl/str_table.py          |  2 +-
 pyGHDL/libghdl/utils.py              |  2 +-
 pyGHDL/libghdl/version.py            |  1 -
 pyGHDL/libghdl/vhdl/elocations.py    |  2 +-
 pyGHDL/libghdl/vhdl/flists.py        |  2 +-
 pyGHDL/libghdl/vhdl/formatters.py    |  2 +-
 pyGHDL/libghdl/vhdl/lists.py         |  2 +-
 pyGHDL/libghdl/vhdl/nodes.py         |  2 +-
 pyGHDL/libghdl/vhdl/nodes_meta.py    |  2 +-
 pyGHDL/libghdl/vhdl/nodes_utils.py   |  2 +-
 pyGHDL/libghdl/vhdl/parse.py         |  2 +-
 pyGHDL/libghdl/vhdl/scanner.py       |  2 +-
 pyGHDL/libghdl/vhdl/sem.py           |  2 +-
 pyGHDL/libghdl/vhdl/sem_lib.py       |  2 +-
 pyGHDL/libghdl/vhdl/tokens.py        |  2 +-
 pyGHDL/libghdl/vhdl/utils.py         |  2 +-
 scripts/pnodespy.py                  |  2 +-
 52 files changed, 61 insertions(+), 62 deletions(-)
 delete mode 100644 pyGHDL/libghdl/version.py

diff --git a/pyGHDL/cli/dom.py b/pyGHDL/cli/dom.py
index 99f59c277..f1f860226 100755
--- a/pyGHDL/cli/dom.py
+++ b/pyGHDL/cli/dom.py
@@ -40,8 +40,9 @@ from textwrap import wrap, dedent
 from pyGHDL.dom import DOMException
 
 from pyGHDL.libghdl import LibGHDLException
-from pydecor import export
-from pyMetaClasses import Singleton
+from pyTooling.Decorators import export
+from pyTooling.MetaClasses import Singleton
+from pyTooling.TerminalUI import LineTerminal, Severity
 from pyAttributes import Attribute
 from pyAttributes.ArgParseAttributes import (
     ArgParseMixin,
@@ -51,7 +52,6 @@ from pyAttributes.ArgParseAttributes import (
     ArgumentAttribute,
     SwitchArgumentAttribute,
 )
-from pyTerminalUI import LineTerminal, Severity
 
 from pyGHDL import GHDLBaseException
 from pyGHDL.dom.NonStandard import Design, Document
@@ -64,8 +64,7 @@ __email__ = ""
 __version__ = "0.0.0"
 __status__ = "Alpha"
 __license__ = ""
-__all__ = []
-__api__ = __all__
+
 
 
 class SourceAttribute(Attribute):
diff --git a/pyGHDL/cli/lsp.py b/pyGHDL/cli/lsp.py
index fd9a8834a..694988153 100644
--- a/pyGHDL/cli/lsp.py
+++ b/pyGHDL/cli/lsp.py
@@ -48,10 +48,11 @@ from os import environ as os_environ, getcwd as os_getcwd
 import os
 from pathlib import Path
 
-from pydecor import export
+from pyTooling.Decorators import export
 
+from pyGHDL import __version__ as ghdlVersion
 import pyGHDL.libghdl as libghdl
-from pyGHDL.libghdl import version, errorout_console
+from pyGHDL.libghdl import errorout_console
 from pyGHDL.lsp import LSPConnTrace
 from pyGHDL.lsp.lsp import LSPConn, LanguageProtocolServer
 from pyGHDL.lsp.vhdl_ls import VhdlLanguageServer
@@ -85,7 +86,7 @@ def _generateCLIParser() -> ArgumentParser:
     parser = ArgumentParser(
         description="VHDL Language Protocol Server. Find info about clients in `ghdl/ghdl-language-server <https://github.com/ghdl/ghdl-language-server>`__."
     )
-    parser.add_argument("--version", "-V", action="version", version="%(prog)s " + version.__version__)
+    parser.add_argument("--version", "-V", action="version", version="%(prog)s " + ghdlVersion)
     parser.add_argument("--verbose", "-v", action="count", default=0, help="Show debug output")
     parser.add_argument("--log-file", help="Redirect logs to the given file instead of stderr")
     parser.add_argument(
diff --git a/pyGHDL/dom/Aggregates.py b/pyGHDL/dom/Aggregates.py
index dfaee9a2d..02e071cb5 100644
--- a/pyGHDL/dom/Aggregates.py
+++ b/pyGHDL/dom/Aggregates.py
@@ -39,7 +39,7 @@ This module contains all DOM classes for VHDL's design units (:class:`context <E
 
 
 """
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     SimpleAggregateElement as VHDLModel_SimpleAggregateElement,
diff --git a/pyGHDL/dom/Attribute.py b/pyGHDL/dom/Attribute.py
index 97a01f65a..3b3f3b40e 100644
--- a/pyGHDL/dom/Attribute.py
+++ b/pyGHDL/dom/Attribute.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     Attribute as VHDLModel_Attribute,
diff --git a/pyGHDL/dom/Concurrent.py b/pyGHDL/dom/Concurrent.py
index 33973a455..f1f545d53 100644
--- a/pyGHDL/dom/Concurrent.py
+++ b/pyGHDL/dom/Concurrent.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import Iterable
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.dom.Range import Range
 from pyVHDLModel.SyntaxModel import (
diff --git a/pyGHDL/dom/DesignUnit.py b/pyGHDL/dom/DesignUnit.py
index ae53a3476..3c0d2ab0c 100644
--- a/pyGHDL/dom/DesignUnit.py
+++ b/pyGHDL/dom/DesignUnit.py
@@ -41,7 +41,7 @@ This module contains all DOM classes for VHDL's design units (:class:`context <E
 """
 from typing import Iterable
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel import ContextUnion, EntityOrSymbol
 from pyVHDLModel.SyntaxModel import (
diff --git a/pyGHDL/dom/Expression.py b/pyGHDL/dom/Expression.py
index f3c7f56c6..f68ab0d51 100644
--- a/pyGHDL/dom/Expression.py
+++ b/pyGHDL/dom/Expression.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List, Union
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     UnaryExpression as VHDLModel_UnaryExpression,
diff --git a/pyGHDL/dom/InterfaceItem.py b/pyGHDL/dom/InterfaceItem.py
index 4bc65cf95..66a8fe37b 100644
--- a/pyGHDL/dom/InterfaceItem.py
+++ b/pyGHDL/dom/InterfaceItem.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     GenericConstantInterfaceItem as VHDLModel_GenericConstantInterfaceItem,
diff --git a/pyGHDL/dom/Literal.py b/pyGHDL/dom/Literal.py
index 54bcc2fc2..c054273c4 100644
--- a/pyGHDL/dom/Literal.py
+++ b/pyGHDL/dom/Literal.py
@@ -30,7 +30,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     NullLiteral as VHDLModel_NullLiteral,
diff --git a/pyGHDL/dom/Misc.py b/pyGHDL/dom/Misc.py
index ddd31040a..d6fc08524 100644
--- a/pyGHDL/dom/Misc.py
+++ b/pyGHDL/dom/Misc.py
@@ -35,7 +35,7 @@
 .. todo::
    Add a module documentation.
 """
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     Alias as VHDLModel_Alias,
diff --git a/pyGHDL/dom/Names.py b/pyGHDL/dom/Names.py
index acb9cd1d6..d601739db 100644
--- a/pyGHDL/dom/Names.py
+++ b/pyGHDL/dom/Names.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     SimpleName as VHDLModel_SimpleName,
diff --git a/pyGHDL/dom/NonStandard.py b/pyGHDL/dom/NonStandard.py
index b0242e260..f6f451325 100644
--- a/pyGHDL/dom/NonStandard.py
+++ b/pyGHDL/dom/NonStandard.py
@@ -40,7 +40,7 @@ import time
 from pathlib import Path
 from typing import Any
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.dom.Names import SimpleName
 from pyVHDLModel.SyntaxModel import (
diff --git a/pyGHDL/dom/Object.py b/pyGHDL/dom/Object.py
index 351bcddf0..6d3472a6f 100644
--- a/pyGHDL/dom/Object.py
+++ b/pyGHDL/dom/Object.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import Union, List
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     Constant as VHDLModel_Constant,
diff --git a/pyGHDL/dom/PSL.py b/pyGHDL/dom/PSL.py
index 95ac72082..0217e0639 100644
--- a/pyGHDL/dom/PSL.py
+++ b/pyGHDL/dom/PSL.py
@@ -39,7 +39,7 @@ This module contains all DOM classes for VHDL's design units (:class:`context <E
 
 
 """
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.PSLModel import (
     VerificationUnit as VHDLModel_VerificationUnit,
diff --git a/pyGHDL/dom/Range.py b/pyGHDL/dom/Range.py
index f5153e67d..c6f783139 100644
--- a/pyGHDL/dom/Range.py
+++ b/pyGHDL/dom/Range.py
@@ -30,7 +30,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import Range as VHDLModel_Range
 
diff --git a/pyGHDL/dom/Sequential.py b/pyGHDL/dom/Sequential.py
index 372939b28..35f7b0d4f 100644
--- a/pyGHDL/dom/Sequential.py
+++ b/pyGHDL/dom/Sequential.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import Iterable
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.dom.Concurrent import (
     WaveformElement,
diff --git a/pyGHDL/dom/Subprogram.py b/pyGHDL/dom/Subprogram.py
index ac8916792..2e9c0116f 100644
--- a/pyGHDL/dom/Subprogram.py
+++ b/pyGHDL/dom/Subprogram.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     Function as VHDLModel_Function,
diff --git a/pyGHDL/dom/Symbol.py b/pyGHDL/dom/Symbol.py
index d290b3d70..c5ed39ba3 100644
--- a/pyGHDL/dom/Symbol.py
+++ b/pyGHDL/dom/Symbol.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List, Iterator
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     EntitySymbol as VHDLModel_EntitySymbol,
diff --git a/pyGHDL/dom/Type.py b/pyGHDL/dom/Type.py
index 48cf50418..ba039852c 100644
--- a/pyGHDL/dom/Type.py
+++ b/pyGHDL/dom/Type.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List, Union, Iterator, Tuple
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import (
     AnonymousType as VHDLModel_AnonymousType,
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py
index fe66f2c98..ee1586e6b 100644
--- a/pyGHDL/dom/_Translate.py
+++ b/pyGHDL/dom/_Translate.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List, Generator, Type
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.dom.Sequential import (
     IfStatement,
diff --git a/pyGHDL/dom/_Utils.py b/pyGHDL/dom/_Utils.py
index c8a7a56ce..76dec9a06 100644
--- a/pyGHDL/dom/_Utils.py
+++ b/pyGHDL/dom/_Utils.py
@@ -30,7 +30,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyVHDLModel.SyntaxModel import Mode
 
diff --git a/pyGHDL/dom/__init__.py b/pyGHDL/dom/__init__.py
index dc58c42d0..f5d38fa09 100644
--- a/pyGHDL/dom/__init__.py
+++ b/pyGHDL/dom/__init__.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from pathlib import Path
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL import GHDLBaseException
 from pyGHDL.libghdl import files_map, name_table
diff --git a/pyGHDL/dom/formatting/prettyprint.py b/pyGHDL/dom/formatting/prettyprint.py
index 4a28b9905..a72a32862 100644
--- a/pyGHDL/dom/formatting/prettyprint.py
+++ b/pyGHDL/dom/formatting/prettyprint.py
@@ -32,7 +32,7 @@
 # ============================================================================
 from typing import List, Union
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.dom.Concurrent import (
     ConcurrentBlockStatement,
diff --git a/pyGHDL/libghdl/__init__.py b/pyGHDL/libghdl/__init__.py
index 04cc387d9..372f5968b 100644
--- a/pyGHDL/libghdl/__init__.py
+++ b/pyGHDL/libghdl/__init__.py
@@ -38,13 +38,13 @@ from pathlib import Path
 from shutil import which
 from typing import List, Optional
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL import GHDLBaseException
 from pyGHDL.libghdl._types import Iir
 
 # from pyGHDL.libghdl._decorator import BindToLibGHDL
-from pyGHDL.libghdl.version import __version__
+from pyGHDL import __version__ as ghdlVersion
 
 Nullable = Optional
 
@@ -63,9 +63,9 @@ class LibGHDLException(GHDLBaseException):
 
 def _get_libghdl_name() -> Path:
     """Get the name of the libghdl library (with version and extension)."""
-    ver = __version__.replace("-", "_").replace(".", "_")
+    version = ghdlVersion.replace("-", "_").replace(".", "_")
     ext = {"win32": "dll", "cygwin": "dll", "msys": "dll", "darwin": "dylib"}.get(sys_platform, "so")
-    return Path("libghdl-{version}.{ext}".format(version=ver, ext=ext))
+    return Path(f"libghdl-{version}.{ext}")
 
 
 def _check_libghdl_libdir(libdir: Path, basename: Path) -> Path:
@@ -140,7 +140,7 @@ def _get_libghdl_path():
         pass
 
     # Failed.
-    raise Exception("Cannot find libghdl {}".format(basename))
+    raise Exception(f"Cannot find libghdl {basename}")
 
 
 def _initialize():
diff --git a/pyGHDL/libghdl/_decorator.py b/pyGHDL/libghdl/_decorator.py
index 32a02930d..49694e8a3 100644
--- a/pyGHDL/libghdl/_decorator.py
+++ b/pyGHDL/libghdl/_decorator.py
@@ -46,7 +46,7 @@ from enum import IntEnum
 from functools import wraps
 from typing import Callable, List, Dict, Any, TypeVar
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl, LibGHDLException
 
diff --git a/pyGHDL/libghdl/_types.py b/pyGHDL/libghdl/_types.py
index b3d4c92bb..a7247a0fd 100644
--- a/pyGHDL/libghdl/_types.py
+++ b/pyGHDL/libghdl/_types.py
@@ -31,7 +31,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 from enum import IntEnum, unique
-from pydecor import export
+from pyTooling.Decorators import export
 from ctypes import c_int32, c_uint32, c_int64, c_double, c_bool
 from typing import TypeVar
 
diff --git a/pyGHDL/libghdl/errorout.py b/pyGHDL/libghdl/errorout.py
index 4cdcdee56..5aa8de1c8 100644
--- a/pyGHDL/libghdl/errorout.py
+++ b/pyGHDL/libghdl/errorout.py
@@ -2,7 +2,7 @@
 # Call 'make' in 'src/vhdl' to regenerate:
 #
 from enum import IntEnum, unique
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 
diff --git a/pyGHDL/libghdl/errorout_console.py b/pyGHDL/libghdl/errorout_console.py
index bb24079e1..826458a38 100644
--- a/pyGHDL/libghdl/errorout_console.py
+++ b/pyGHDL/libghdl/errorout_console.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 
diff --git a/pyGHDL/libghdl/errorout_memory.py b/pyGHDL/libghdl/errorout_memory.py
index 3f85a03c9..bf60c53bb 100644
--- a/pyGHDL/libghdl/errorout_memory.py
+++ b/pyGHDL/libghdl/errorout_memory.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int8, c_int32, c_char_p, Structure
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import ErrorIndex
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/files_map.py b/pyGHDL/libghdl/files_map.py
index 277a00706..8f8cdf02c 100644
--- a/pyGHDL/libghdl/files_map.py
+++ b/pyGHDL/libghdl/files_map.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 from pyGHDL.libghdl._types import NameId, SourceFileEntry, LocationType
diff --git a/pyGHDL/libghdl/files_map_editor.py b/pyGHDL/libghdl/files_map_editor.py
index 9afd46bdc..a67766c44 100644
--- a/pyGHDL/libghdl/files_map_editor.py
+++ b/pyGHDL/libghdl/files_map_editor.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int32, c_char_p, c_bool, c_uint32
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/libraries.py b/pyGHDL/libghdl/libraries.py
index 06b5f044c..fe09fa920 100644
--- a/pyGHDL/libghdl/libraries.py
+++ b/pyGHDL/libghdl/libraries.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int32
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._types import (
diff --git a/pyGHDL/libghdl/name_table.py b/pyGHDL/libghdl/name_table.py
index 8718982af..b29775213 100644
--- a/pyGHDL/libghdl/name_table.py
+++ b/pyGHDL/libghdl/name_table.py
@@ -34,7 +34,7 @@
 #
 from ctypes import c_char, c_char_p
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import NameId
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/requirements.txt b/pyGHDL/libghdl/requirements.txt
index b0f362aea..538e15ba4 100644
--- a/pyGHDL/libghdl/requirements.txt
+++ b/pyGHDL/libghdl/requirements.txt
@@ -1 +1 @@
-pydecor>=2.0.1
+pyTooling>=1.5.1
diff --git a/pyGHDL/libghdl/std_names.py b/pyGHDL/libghdl/std_names.py
index 098e2b34e..e6339520f 100644
--- a/pyGHDL/libghdl/std_names.py
+++ b/pyGHDL/libghdl/std_names.py
@@ -1,7 +1,7 @@
 # Auto generated Python source file from Ada sources
 # Call 'make' in 'src/vhdl' to regenerate:
 #
-from pydecor import export
+from pyTooling.Decorators import export
 
 
 @export
diff --git a/pyGHDL/libghdl/str_table.py b/pyGHDL/libghdl/str_table.py
index f87e9db8b..a91268bb4 100644
--- a/pyGHDL/libghdl/str_table.py
+++ b/pyGHDL/libghdl/str_table.py
@@ -34,7 +34,7 @@
 #
 from ctypes import c_char_p
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import String8Id
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/utils.py b/pyGHDL/libghdl/utils.py
index 98e350e03..5fc62af91 100644
--- a/pyGHDL/libghdl/utils.py
+++ b/pyGHDL/libghdl/utils.py
@@ -34,7 +34,7 @@
 from ctypes import byref
 from typing import List, Any, Generator
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import EnumLookupTable
 from pyGHDL.libghdl._types import NameId
diff --git a/pyGHDL/libghdl/version.py b/pyGHDL/libghdl/version.py
deleted file mode 100644
index eb436f1c7..000000000
--- a/pyGHDL/libghdl/version.py
+++ /dev/null
@@ -1 +0,0 @@
-__version__ = "2.0.0-dev"
diff --git a/pyGHDL/libghdl/vhdl/elocations.py b/pyGHDL/libghdl/vhdl/elocations.py
index dd3600ecf..e7282adb6 100644
--- a/pyGHDL/libghdl/vhdl/elocations.py
+++ b/pyGHDL/libghdl/vhdl/elocations.py
@@ -1,7 +1,7 @@
 # Auto generated Python source file from Ada sources
 # Call 'make' in 'src/vhdl' to regenerate:
 #
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 
diff --git a/pyGHDL/libghdl/vhdl/flists.py b/pyGHDL/libghdl/vhdl/flists.py
index 9d5b7fdb7..c62296307 100644
--- a/pyGHDL/libghdl/vhdl/flists.py
+++ b/pyGHDL/libghdl/vhdl/flists.py
@@ -33,7 +33,7 @@
 # ============================================================================
 from ctypes import c_int32
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 
diff --git a/pyGHDL/libghdl/vhdl/formatters.py b/pyGHDL/libghdl/vhdl/formatters.py
index 72b72010e..90022320e 100644
--- a/pyGHDL/libghdl/vhdl/formatters.py
+++ b/pyGHDL/libghdl/vhdl/formatters.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int32, c_char_p
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/vhdl/lists.py b/pyGHDL/libghdl/vhdl/lists.py
index 6f8370a09..cc37e2dd8 100644
--- a/pyGHDL/libghdl/vhdl/lists.py
+++ b/pyGHDL/libghdl/vhdl/lists.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int32, c_bool, POINTER, Structure
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/vhdl/nodes.py b/pyGHDL/libghdl/vhdl/nodes.py
index 0ed86c49b..45b6d1ee6 100644
--- a/pyGHDL/libghdl/vhdl/nodes.py
+++ b/pyGHDL/libghdl/vhdl/nodes.py
@@ -2,7 +2,7 @@
 # Call 'make' in 'src/vhdl' to regenerate:
 #
 from enum import IntEnum, unique
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 
diff --git a/pyGHDL/libghdl/vhdl/nodes_meta.py b/pyGHDL/libghdl/vhdl/nodes_meta.py
index 726d885be..4602d0ac2 100644
--- a/pyGHDL/libghdl/vhdl/nodes_meta.py
+++ b/pyGHDL/libghdl/vhdl/nodes_meta.py
@@ -2,7 +2,7 @@
 # Call 'make' in 'src/vhdl' to regenerate:
 #
 from enum import IntEnum, unique
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._decorator import BindToLibGHDL
 
diff --git a/pyGHDL/libghdl/vhdl/nodes_utils.py b/pyGHDL/libghdl/vhdl/nodes_utils.py
index 31d495d85..2871fab62 100644
--- a/pyGHDL/libghdl/vhdl/nodes_utils.py
+++ b/pyGHDL/libghdl/vhdl/nodes_utils.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import Iir
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/vhdl/parse.py b/pyGHDL/libghdl/vhdl/parse.py
index a61cdfef7..7c59d0df7 100644
--- a/pyGHDL/libghdl/vhdl/parse.py
+++ b/pyGHDL/libghdl/vhdl/parse.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_bool
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._types import Iir
diff --git a/pyGHDL/libghdl/vhdl/scanner.py b/pyGHDL/libghdl/vhdl/scanner.py
index f9db890a0..da6b63520 100644
--- a/pyGHDL/libghdl/vhdl/scanner.py
+++ b/pyGHDL/libghdl/vhdl/scanner.py
@@ -34,7 +34,7 @@
 
 from ctypes import c_int, c_bool
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl import libghdl
 from pyGHDL.libghdl._types import SourceFileEntry, NameId
diff --git a/pyGHDL/libghdl/vhdl/sem.py b/pyGHDL/libghdl/vhdl/sem.py
index b1a2fee5f..7556d6f53 100644
--- a/pyGHDL/libghdl/vhdl/sem.py
+++ b/pyGHDL/libghdl/vhdl/sem.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import Iir_Design_Unit
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/vhdl/sem_lib.py b/pyGHDL/libghdl/vhdl/sem_lib.py
index 0126c1ef5..41d95e2e5 100644
--- a/pyGHDL/libghdl/vhdl/sem_lib.py
+++ b/pyGHDL/libghdl/vhdl/sem_lib.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import SourceFileEntry, Iir_Design_File, Iir_Design_Unit
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/pyGHDL/libghdl/vhdl/tokens.py b/pyGHDL/libghdl/vhdl/tokens.py
index 9e347eff8..10c14fc40 100644
--- a/pyGHDL/libghdl/vhdl/tokens.py
+++ b/pyGHDL/libghdl/vhdl/tokens.py
@@ -2,7 +2,7 @@
 # Call 'make' in 'src/vhdl' to regenerate:
 #
 from enum import IntEnum, unique
-from pydecor import export
+from pyTooling.Decorators import export
 
 
 @export
diff --git a/pyGHDL/libghdl/vhdl/utils.py b/pyGHDL/libghdl/vhdl/utils.py
index c563ec9bd..3a82f45c0 100644
--- a/pyGHDL/libghdl/vhdl/utils.py
+++ b/pyGHDL/libghdl/vhdl/utils.py
@@ -32,7 +32,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
 
-from pydecor import export
+from pyTooling.Decorators import export
 
 from pyGHDL.libghdl._types import Iir, NameId
 from pyGHDL.libghdl._decorator import BindToLibGHDL
diff --git a/scripts/pnodespy.py b/scripts/pnodespy.py
index f1f637ea7..90c827de9 100755
--- a/scripts/pnodespy.py
+++ b/scripts/pnodespy.py
@@ -35,7 +35,7 @@ def print_file_header(includeIntEnumUnique=True, includeBindToLibGHDL=True):
             # Auto generated Python source file from Ada sources
             # Call 'make' in 'src/vhdl' to regenerate:
             #
-        """) + "{sysImports}from pydecor import export\n{moduleImports}".format(
+        """) + "{sysImports}from pyTooling.Decorators import export\n{moduleImports}".format(
             sysImports = "from enum import IntEnum, unique\n" if includeIntEnumUnique else "",
             moduleImports = "\nfrom pyGHDL.libghdl._decorator import BindToLibGHDL\n" if includeBindToLibGHDL else "",
         )
-- 
cgit v1.2.3


From b6dcce607c96ce751fc3bb9aef45848c94e0e71e Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Sun, 12 Dec 2021 14:46:00 +0100
Subject: Updated setup.py to use pyTooling.Packaging.

---
 doc/requirements.txt            |   2 +
 pyGHDL/__init__.py              |   8 ++-
 pyGHDL/cli/requirements.txt     |   6 +--
 pyGHDL/dom/requirements.txt     |   2 +-
 pyGHDL/libghdl/requirements.txt |   2 +-
 setup.py                        | 117 +++++-----------------------------------
 6 files changed, 28 insertions(+), 109 deletions(-)

diff --git a/doc/requirements.txt b/doc/requirements.txt
index cb4081ec3..376121903 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,5 +1,7 @@
 -r ../pyGHDL/requirements.txt
 
+pyTooling.Packaging>=0.3.1
+
 sphinx>=3.4.2
 #recommonmark>=0.7.1
 python-dateutil>=2.8.1
diff --git a/pyGHDL/__init__.py b/pyGHDL/__init__.py
index eb400e0f1..eb32f03b4 100644
--- a/pyGHDL/__init__.py
+++ b/pyGHDL/__init__.py
@@ -47,7 +47,13 @@ this is provided from a ``pyGHDL`` packages with four sub-packages:
 * ``pyGHDL.lsp`` - A `language server protocol <https://en.wikipedia.org/wiki/Language_Server_Protocol>`__ (LSP)
   written in Python. The implementation offers an HTTPS service that can be used e.g. by editors and IDEs supporting LSP.
 """
-from pydecor import export
+__author__ =    "Tristan Gingold and contributors"
+__email__ =     "tgingold@free.fr"
+__copyright__ = "2002-2021, Tristan Gingold and contributors"
+__license__ =   "GNU General Public License v2"
+__version__ =   "2.0.0-dev"
+
+from pyTooling.Decorators import export
 
 
 @export
diff --git a/pyGHDL/cli/requirements.txt b/pyGHDL/cli/requirements.txt
index 30f22625c..111f8fa26 100644
--- a/pyGHDL/cli/requirements.txt
+++ b/pyGHDL/cli/requirements.txt
@@ -1,5 +1,5 @@
 -r ../dom/requirements.txt
 
-pyAttributes==2.2.1
-pyMetaClasses==1.3.1
-pyTerminalUI==1.4.1
+pyTooling>=1.5.1
+pyTooling.TerminalUI>=1.5.3
+pyAttributes>=2.3.2
diff --git a/pyGHDL/dom/requirements.txt b/pyGHDL/dom/requirements.txt
index 18340052a..6fa43649b 100644
--- a/pyGHDL/dom/requirements.txt
+++ b/pyGHDL/dom/requirements.txt
@@ -1,4 +1,4 @@
 -r ../libghdl/requirements.txt
 
-pyVHDLModel==0.12.0
+pyVHDLModel==0.14.0
 #https://github.com/VHDL/pyVHDLModel/archive/dev.zip#pyVHDLModel
diff --git a/pyGHDL/libghdl/requirements.txt b/pyGHDL/libghdl/requirements.txt
index 538e15ba4..0291212ff 100644
--- a/pyGHDL/libghdl/requirements.txt
+++ b/pyGHDL/libghdl/requirements.txt
@@ -1 +1 @@
-pyTooling>=1.5.1
+pyTooling>=1.5.2
diff --git a/setup.py b/setup.py
index f61a0f2a4..e1789c3db 100644
--- a/setup.py
+++ b/setup.py
@@ -32,121 +32,32 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 # ============================================================================
+#
+from pathlib             import Path
+from pyTooling.Packaging import DescribePythonPackageHostedOnGitHub
 
-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)))
-
+gitHubNamespace =        "ghdl"
+packageName =            "pyGHDL"
+packageDirectory =       packageName
+packageInformationFile = Path(f"{packageDirectory}/__init__.py")
 
-# 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",
+DescribePythonPackageHostedOnGitHub(
+    packageName=packageName,
     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",
-        ]
-    },
+    license="GPL-2.0-or-later",
+    gitHubNamespace=gitHubNamespace,
     keywords="Python3 VHDL Parser Compiler Simulator GHDL",
+    sourceFileWithVersion=packageInformationFile,
+    developmentStatus="beta",
     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",
-    ],
+    ]
 )
-- 
cgit v1.2.3


From 157d01b634da67cc06267f9f87bdd6c6b791f559 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Sun, 12 Dec 2021 14:49:45 +0100
Subject: Using pyTooling.Packaging in conf.py.

---
 doc/conf.py | 36 ++++++++++++++----------------------
 1 file changed, 14 insertions(+), 22 deletions(-)

diff --git a/doc/conf.py b/doc/conf.py
index 20b75ff6e..6cdd5b2bf 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -1,9 +1,10 @@
 # -*- coding: utf-8 -*-
-import sys, re
+import sys
 from os.path import abspath
 from pathlib import Path
 from json import loads
 
+from pyTooling.Packaging import extractVersionInformation
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -14,31 +15,22 @@ sys.path.insert(0, abspath('../pyGHDL'))
 
 
 # ==============================================================================
-# Project information
-# ==============================================================================
-project = u'GHDL'
-copyright = u'2002-2021, Tristan Gingold and contributors'
-author = u'Tristan Gingold and contributors'
-
-# ==============================================================================
-# Versioning
+# Project information and versioning
 # ==============================================================================
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
-try:
-    with open('../configure') as verin:
-        for line in verin:
-            line = re.findall(r'ghdl_version=\"([0-9].+)\"', line)
-            if line:
-                version = line[0]
-                break
-except Exception as e:
-    print('cannot extract version: %s' % e)
-    version = "latest"
-    pass
-
-release = version  # The full version, including alpha/beta/rc tags.
+project =     "GHDL"
+
+# Read __version__ from source file
+packageInformationFile = Path(f"../py{project}/__init__.py")
+versionInformation = extractVersionInformation(packageInformationFile)
+
+author =    versionInformation.Author
+copyright = versionInformation.Copyright
+version =   ".".join(versionInformation.Version.split(".")[:2])  # e.g. 2.3    The short X.Y version.
+release =   versionInformation.Version
+
 
 # ==============================================================================
 # Miscellaneous settings
-- 
cgit v1.2.3


From e88ad9e4a10a60679b10a285029e05b0184eeef0 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Sun, 12 Dec 2021 14:56:55 +0100
Subject: Adjusted configure script.

---
 .github/workflows/Test.yml |  2 +-
 configure                  | 16 ++++++++--------
 pyGHDL/__init__.py         |  8 ++++----
 pyGHDL/cli/dom.py          |  1 -
 setup.py                   |  8 +++++---
 5 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml
index 8931a8f29..a53c7313b 100644
--- a/.github/workflows/Test.yml
+++ b/.github/workflows/Test.yml
@@ -85,7 +85,7 @@ jobs:
           sudo apt update -qq
           sudo apt install -y gnat
           python -m pip install --upgrade pip
-          python -m pip install black wheel
+          python -m pip install black wheel pyTooling.Packaging
 
       - name: '🚧 Update Python bindings'
         run: ./scripts/update_py_bindings.sh
diff --git a/configure b/configure
index 7af4e9ab0..c6a5f37d1 100755
--- a/configure
+++ b/configure
@@ -190,14 +190,14 @@ fi
 
 # Check the version of libghdl is correct.
 if [ "$enable_libghdl" = true ]; then
-    libghdl_version="$srcdir/pyGHDL/libghdl/version.py"
-    # Extract content between single quotes in version.py, to avoid false positives due to LF/CRLF mismatch.
-    if [ "$ghdl_version" != "`sed 's/.*"\(.*\)".*/\1/g' $libghdl_version`" ]; then
-      echo "Sorry, the version of $libghdl_version is not correct"
-      echo "update the version to: $ghdl_version"
-      echo "or use --disable-libghdl"
-      exit 1
-    fi
+    libghdl_version="$srcdir/pyGHDL/__init__.py"
+    # Extract content between double quotes in __init__.py, to avoid false positives due to LF/CRLF mismatch.
+#    if [ "$ghdl_version" != "`sed 's/.*"\(.*\)".*/\1/g' $libghdl_version`" ]; then
+#      echo "Sorry, the version of $(pwd)/$libghdl_version is not correct"
+#      echo "update the version to: $ghdl_version"
+#      echo "or use --disable-libghdl"
+#      exit 1
+#    fi
 fi
 
 # Default for enable_gplcompat
diff --git a/pyGHDL/__init__.py b/pyGHDL/__init__.py
index eb32f03b4..493eb4757 100644
--- a/pyGHDL/__init__.py
+++ b/pyGHDL/__init__.py
@@ -47,11 +47,11 @@ this is provided from a ``pyGHDL`` packages with four sub-packages:
 * ``pyGHDL.lsp`` - A `language server protocol <https://en.wikipedia.org/wiki/Language_Server_Protocol>`__ (LSP)
   written in Python. The implementation offers an HTTPS service that can be used e.g. by editors and IDEs supporting LSP.
 """
-__author__ =    "Tristan Gingold and contributors"
-__email__ =     "tgingold@free.fr"
+__author__ = "Tristan Gingold and contributors"
+__email__ = "tgingold@free.fr"
 __copyright__ = "2002-2021, Tristan Gingold and contributors"
-__license__ =   "GNU General Public License v2"
-__version__ =   "2.0.0-dev"
+__license__ = "GNU General Public License v2"
+__version__ = "2.0.0-dev"
 
 from pyTooling.Decorators import export
 
diff --git a/pyGHDL/cli/dom.py b/pyGHDL/cli/dom.py
index f1f860226..6ba5894fe 100755
--- a/pyGHDL/cli/dom.py
+++ b/pyGHDL/cli/dom.py
@@ -66,7 +66,6 @@ __status__ = "Alpha"
 __license__ = ""
 
 
-
 class SourceAttribute(Attribute):
     def __call__(self, func):
         self._AppendAttribute(
diff --git a/setup.py b/setup.py
index e1789c3db..8e4b687a1 100644
--- a/setup.py
+++ b/setup.py
@@ -36,10 +36,11 @@
 from pathlib             import Path
 from pyTooling.Packaging import DescribePythonPackageHostedOnGitHub
 
-gitHubNamespace =        "ghdl"
-packageName =            "pyGHDL"
-packageDirectory =       packageName
+gitHubNamespace = "ghdl"
+packageName =  "pyGHDL"
+packageDirectory = packageName
 packageInformationFile = Path(f"{packageDirectory}/__init__.py")
+requirementsFile = Path(f"{packageDirectory}/requirements.txt")
 
 DescribePythonPackageHostedOnGitHub(
     packageName=packageName,
@@ -48,6 +49,7 @@ DescribePythonPackageHostedOnGitHub(
     gitHubNamespace=gitHubNamespace,
     keywords="Python3 VHDL Parser Compiler Simulator GHDL",
     sourceFileWithVersion=packageInformationFile,
+    requirementsFile=requirementsFile,
     developmentStatus="beta",
     classifiers=[
         "Operating System :: MacOS",
-- 
cgit v1.2.3


From 70647153a193d016b765e5456623abafdec46a3f Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Sun, 12 Dec 2021 19:29:16 +0100
Subject: Bumped version of pyTooling.Packaging to v0.3.2.

---
 doc/requirements.txt        | 2 +-
 pyGHDL/cli/requirements.txt | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/requirements.txt b/doc/requirements.txt
index 376121903..7952d929b 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,6 +1,6 @@
 -r ../pyGHDL/requirements.txt
 
-pyTooling.Packaging>=0.3.1
+pyTooling.Packaging>=0.3.2
 
 sphinx>=3.4.2
 #recommonmark>=0.7.1
diff --git a/pyGHDL/cli/requirements.txt b/pyGHDL/cli/requirements.txt
index 111f8fa26..0684e8bb6 100644
--- a/pyGHDL/cli/requirements.txt
+++ b/pyGHDL/cli/requirements.txt
@@ -1,5 +1,5 @@
 -r ../dom/requirements.txt
 
-pyTooling>=1.5.1
+pyTooling>=1.5.2
 pyTooling.TerminalUI>=1.5.3
 pyAttributes>=2.3.2
-- 
cgit v1.2.3


From 265e23146f1eaf977984a86a64523443f6170b0c Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Mon, 13 Dec 2021 01:15:09 +0100
Subject: Bumped dependencies.

---
 doc/requirements.txt            | 2 +-
 pyGHDL/cli/requirements.txt     | 2 +-
 pyGHDL/libghdl/requirements.txt | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/doc/requirements.txt b/doc/requirements.txt
index 7952d929b..4c7016617 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,6 +1,6 @@
 -r ../pyGHDL/requirements.txt
 
-pyTooling.Packaging>=0.3.2
+pyTooling.Packaging>=0.4.0
 
 sphinx>=3.4.2
 #recommonmark>=0.7.1
diff --git a/pyGHDL/cli/requirements.txt b/pyGHDL/cli/requirements.txt
index 0684e8bb6..b9167b8ed 100644
--- a/pyGHDL/cli/requirements.txt
+++ b/pyGHDL/cli/requirements.txt
@@ -1,5 +1,5 @@
 -r ../dom/requirements.txt
 
-pyTooling>=1.5.2
+pyTooling>=1.6.0
 pyTooling.TerminalUI>=1.5.3
 pyAttributes>=2.3.2
diff --git a/pyGHDL/libghdl/requirements.txt b/pyGHDL/libghdl/requirements.txt
index 0291212ff..a045a3d24 100644
--- a/pyGHDL/libghdl/requirements.txt
+++ b/pyGHDL/libghdl/requirements.txt
@@ -1 +1 @@
-pyTooling>=1.5.2
+pyTooling>=1.6.0
-- 
cgit v1.2.3


From 7c35000d5d3704d939133964a92fc7e4b2d361d0 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Mon, 13 Dec 2021 21:01:21 +0100
Subject: Fixed license in `setup.py`.

---
 pyGHDL/__init__.py | 1 +
 setup.py           | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/pyGHDL/__init__.py b/pyGHDL/__init__.py
index 493eb4757..bd5e1b8d7 100644
--- a/pyGHDL/__init__.py
+++ b/pyGHDL/__init__.py
@@ -52,6 +52,7 @@ __email__ = "tgingold@free.fr"
 __copyright__ = "2002-2021, Tristan Gingold and contributors"
 __license__ = "GNU General Public License v2"
 __version__ = "2.0.0-dev"
+__keywords__ = ["vhdl", "parser", "compiler", "simulator", "ghdl"]
 
 from pyTooling.Decorators import export
 
diff --git a/setup.py b/setup.py
index 8e4b687a1..b834152ad 100644
--- a/setup.py
+++ b/setup.py
@@ -34,6 +34,7 @@
 # ============================================================================
 #
 from pathlib             import Path
+from pyTooling.Licensing import GPL_2_0_or_later
 from pyTooling.Packaging import DescribePythonPackageHostedOnGitHub
 
 gitHubNamespace = "ghdl"
@@ -45,9 +46,8 @@ requirementsFile = Path(f"{packageDirectory}/requirements.txt")
 DescribePythonPackageHostedOnGitHub(
     packageName=packageName,
     description="Python binding for GHDL and high-level APIs (incl. LSP).",
-    license="GPL-2.0-or-later",
+    license=GPL_2_0_or_later,
     gitHubNamespace=gitHubNamespace,
-    keywords="Python3 VHDL Parser Compiler Simulator GHDL",
     sourceFileWithVersion=packageInformationFile,
     requirementsFile=requirementsFile,
     developmentStatus="beta",
-- 
cgit v1.2.3


From 595b54d85020fafebd79d83a5b931285ccd16201 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Mon, 13 Dec 2021 23:33:10 +0100
Subject: Install pyTooling.Packaging together with pyGHDL

---
 .github/workflows/Test.yml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml
index a53c7313b..163eba0ec 100644
--- a/.github/workflows/Test.yml
+++ b/.github/workflows/Test.yml
@@ -484,7 +484,9 @@ jobs:
           pip3 install -r testsuite/requirements.txt
 
       - name: '🚦 Test installation of pyGHDL through pip'
-        run: pip install ("git+https://github.com/ghdl/ghdl.git@" + $env:GHDL_HASH)
+        run: |
+          pip install pyTooling.Packaging wheel
+          pip install ("git+https://github.com/ghdl/ghdl.git@" + $env:GHDL_HASH)
 
       - name: '🚦 Test pyGHDL entrypoints'
         run: |
-- 
cgit v1.2.3


From 8a48be3f32e08eadc25b08d0929a9e117d8a94aa Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Tue, 14 Dec 2021 08:34:50 +0100
Subject: Added entry points.

---
 doc/requirements.txt | 2 +-
 setup.py             | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/doc/requirements.txt b/doc/requirements.txt
index 4c7016617..761815722 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,6 +1,6 @@
 -r ../pyGHDL/requirements.txt
 
-pyTooling.Packaging>=0.4.0
+pyTooling.Packaging>=0.5.0
 
 sphinx>=3.4.2
 #recommonmark>=0.7.1
diff --git a/setup.py b/setup.py
index b834152ad..085d7f8e4 100644
--- a/setup.py
+++ b/setup.py
@@ -61,5 +61,9 @@ DescribePythonPackageHostedOnGitHub(
         "Topic :: Software Development :: Compilers",
         "Topic :: Software Development :: Testing",
         "Topic :: Utilities",
-    ]
+    ],
+    consoleScripts={
+        "ghdl-ls": "pyGHDL.cli.lsp:main",
+        "ghdl-dom": "pyGHDL.cli.dom:main"
+    }
 )
-- 
cgit v1.2.3


From 75bd31ff74ba3965bec27bf34a93b9c451e0d749 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Tue, 14 Dec 2021 11:00:57 +0100
Subject: One more dependency.

---
 .github/workflows/Test.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml
index 163eba0ec..93b0a4475 100644
--- a/.github/workflows/Test.yml
+++ b/.github/workflows/Test.yml
@@ -485,7 +485,7 @@ jobs:
 
       - name: '🚦 Test installation of pyGHDL through pip'
         run: |
-          pip install pyTooling.Packaging wheel
+          pip install pyTooling pyTooling.Packaging wheel
           pip install ("git+https://github.com/ghdl/ghdl.git@" + $env:GHDL_HASH)
 
       - name: '🚦 Test pyGHDL entrypoints'
-- 
cgit v1.2.3


From 665761f48c3db18b62e8e1a83a0595385592d2ea Mon Sep 17 00:00:00 2001
From: umarcor <unai.martinezcorral@ehu.eus>
Date: Wed, 15 Dec 2021 22:46:20 +0100
Subject: pyproject: add section 'build-system', include pyTooling.Packaging

---
 pyproject.toml | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/pyproject.toml b/pyproject.toml
index 55ec8d784..3887460cc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,2 +1,10 @@
+[build-system]
+requires = [
+    "pyTooling.Packaging >= 0.5.0",
+    "setuptools >= 35.0.2",
+    "wheel >= 0.29.0"
+]
+build-backend = "setuptools.build_meta"
+
 [tool.black]
 line-length = 120
-- 
cgit v1.2.3


From 9ebb396949e2b5615456618484f39462b25af2be Mon Sep 17 00:00:00 2001
From: umarcor <unai.martinezcorral@ehu.eus>
Date: Wed, 15 Dec 2021 23:45:26 +0100
Subject: configure: update version check regexp

---
 configure | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/configure b/configure
index c6a5f37d1..fb5d4fe19 100755
--- a/configure
+++ b/configure
@@ -192,12 +192,12 @@ fi
 if [ "$enable_libghdl" = true ]; then
     libghdl_version="$srcdir/pyGHDL/__init__.py"
     # Extract content between double quotes in __init__.py, to avoid false positives due to LF/CRLF mismatch.
-#    if [ "$ghdl_version" != "`sed 's/.*"\(.*\)".*/\1/g' $libghdl_version`" ]; then
-#      echo "Sorry, the version of $(pwd)/$libghdl_version is not correct"
-#      echo "update the version to: $ghdl_version"
-#      echo "or use --disable-libghdl"
-#      exit 1
-#    fi
+    if [ "$ghdl_version" != "`sed -n 's/^__version__.*"\(.*\)".*/\1/gp' $libghdl_version`" ]; then
+      echo "Sorry, the version of $libghdl_version is not correct"
+      echo "update the version to: $ghdl_version"
+      echo "or use --disable-libghdl"
+      exit 1
+    fi
 fi
 
 # Default for enable_gplcompat
-- 
cgit v1.2.3


From 9b2456883029dc641b604151f8c53f69b7a8be1c Mon Sep 17 00:00:00 2001
From: umarcor <unai.martinezcorral@ehu.eus>
Date: Wed, 15 Dec 2021 23:59:10 +0100
Subject: doc: space cleanup

---
 doc/conf.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/conf.py b/doc/conf.py
index 6cdd5b2bf..4071310a5 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -20,7 +20,7 @@ sys.path.insert(0, abspath('../pyGHDL'))
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
-project =     "GHDL"
+project = "GHDL"
 
 # Read __version__ from source file
 packageInformationFile = Path(f"../py{project}/__init__.py")
-- 
cgit v1.2.3


From 90a820dc862d7bf217a1f2a36c2b460e32734b9f Mon Sep 17 00:00:00 2001
From: umarcor <unai.martinezcorral@ehu.eus>
Date: Wed, 15 Dec 2021 23:59:27 +0100
Subject: ci: remove explicitly installing pyTooling

---
 .github/workflows/Test.yml | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml
index 93b0a4475..5ca4542c0 100644
--- a/.github/workflows/Test.yml
+++ b/.github/workflows/Test.yml
@@ -480,13 +480,10 @@ jobs:
           architecture: ${{ matrix.pyarch }}
 
       - name: '🐍 Install Python dependencies'
-        run: |
-          pip3 install -r testsuite/requirements.txt
+        run: pip3 install -r testsuite/requirements.txt
 
       - name: '🚦 Test installation of pyGHDL through pip'
-        run: |
-          pip install pyTooling pyTooling.Packaging wheel
-          pip install ("git+https://github.com/ghdl/ghdl.git@" + $env:GHDL_HASH)
+        run: pip install ("git+https://github.com/ghdl/ghdl.git@" + $env:GHDL_HASH)
 
       - name: '🚦 Test pyGHDL entrypoints'
         run: |
-- 
cgit v1.2.3


From adf47902189a534e714a786ab95c22c5abd87369 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Thu, 16 Dec 2021 21:44:40 +0100
Subject: pyTooling.Packaging is now replaced by pyTooling.

---
 .github/workflows/Test.yml  | 2 +-
 doc/requirements.txt        | 2 +-
 pyGHDL/dom/requirements.txt | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml
index 5ca4542c0..1c737a57c 100644
--- a/.github/workflows/Test.yml
+++ b/.github/workflows/Test.yml
@@ -85,7 +85,7 @@ jobs:
           sudo apt update -qq
           sudo apt install -y gnat
           python -m pip install --upgrade pip
-          python -m pip install black wheel pyTooling.Packaging
+          python -m pip install black wheel pyTooling
 
       - name: '🚧 Update Python bindings'
         run: ./scripts/update_py_bindings.sh
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 761815722..dfd699db9 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,6 +1,6 @@
 -r ../pyGHDL/requirements.txt
 
-pyTooling.Packaging>=0.5.0
+pyTooling>=1.7.0
 
 sphinx>=3.4.2
 #recommonmark>=0.7.1
diff --git a/pyGHDL/dom/requirements.txt b/pyGHDL/dom/requirements.txt
index 6fa43649b..18b3495eb 100644
--- a/pyGHDL/dom/requirements.txt
+++ b/pyGHDL/dom/requirements.txt
@@ -1,4 +1,4 @@
 -r ../libghdl/requirements.txt
 
-pyVHDLModel==0.14.0
+pyVHDLModel==0.14.1
 #https://github.com/VHDL/pyVHDLModel/archive/dev.zip#pyVHDLModel
-- 
cgit v1.2.3


From 4c700e385b9773a46c85386d23038b1d47afd4e7 Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@plc2.de>
Date: Fri, 17 Dec 2021 23:33:25 +0100
Subject: Replaced pyTooling.Packaging with just pyTooling v1.7.0

---
 pyproject.toml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pyproject.toml b/pyproject.toml
index 3887460cc..c2ddfb778 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [build-system]
 requires = [
-    "pyTooling.Packaging >= 0.5.0",
+    "pyTooling >= 1.7.0",
     "setuptools >= 35.0.2",
     "wheel >= 0.29.0"
 ]
-- 
cgit v1.2.3