• [gentoo-dev] [PATCH] eclass/tree-sitter-grammar: fix ABI autodetecton

    From Vadim Misbakh-Soloviov@21:1/5 to All on Thu Dec 9 04:20:01 2021
    Some grammars packages (like, for example, tree-sitter-agda) uses
    different versioning scheme from vast majority of grammars in
    tree-sitter github organization.

    Also, third-party grammars doesn't follow tree-sitter versioning.

    Also, some grammars (like tree-sitter-haskell, for example) only had
    old release tagged, but having compatible and useful grammars in
    current HEAD.

    Also, some grammars like tree-sitter-verilog, even have only v0.0 tag.

    So, instead of assuming grammar ABI version based on ${PV} (ver_test)
    we decided to take ABI version drectly from source code.
    ---
    eclass/tree-sitter-grammar.eclass | 20 ++++++++++----------
    1 file changed, 10 insertions(+), 10 deletions(-)

    diff --git a/eclass/tree-sitter-grammar.eclass b/eclass/tree-sitter-grammar.eclass
    index 46573027f96..939a36ccb8c 100644
    --- a/eclass/tree-sitter-grammar.eclass
    +++ b/eclass/tree-sitter-grammar.eclass
    @@ -40,15 +40,13 @@ EXPORT_FUNCTIONS src_compile src_install
    # @INTERNAL
    # @DESCRIPTION:
    # This internal function determines the ABI version of a grammar library based -# on the package version.
    +# on a constant in the source file.
    _get_tsg_abi_ver() {
    - if ver_test -gt 0.21; then
    - die "Grammar too new; unknown ABI version"
    - elif ver_test -ge 0.19.0; then
    - echo 13
    - else
    - die "Grammar too old; unknown ABI version"
    - fi
    + # This sed script finds ABI definition string in parser source file,
    + # substitutes all the string until the ABI number, and prints remains
    + # (the ABI number itself)
    + sed -n '/#define LANGUAGE_VERSION/s/.* //p' "${S}"/parser.c ||
    + die "Un
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Vadim Misbakh-Soloviov on Thu Dec 9 08:30:01 2021
    On Thu, 2021-12-09 at 10:10 +0700, Vadim Misbakh-Soloviov wrote:
    Some grammars packages (like, for example, tree-sitter-agda) uses
    different versioning scheme from vast majority of grammars in
    tree-sitter github organization.

    Also, third-party grammars doesn't follow tree-sitter versioning.

    Also, some grammars (like tree-sitter-haskell, for example) only had
    old release tagged, but having compatible and useful grammars in
    current HEAD.

    Also, some grammars like tree-sitter-verilog, even have only v0.0 tag.

    So, instead of assuming grammar ABI version based on ${PV} (ver_test)
    we decided to take ABI version drectly from source code.
    ---
    eclass/tree-sitter-grammar.eclass | 20 ++++++++++----------
    1 file changed, 10 insertions(+), 10 deletions(-)

    diff --git a/eclass/tree-sitter-grammar.eclass b/eclass/tree-sitter-grammar.eclass
    index 46573027f96..939a36ccb8c 100644
    --- a/eclass/tree-sitter-grammar.eclass
    +++ b/eclass/tree-sitter-grammar.eclass
    @@ -40,15 +40,13 @@ EXPORT_FUNCTIONS src_compile src_install
    # @INTERNAL
    # @DESCRIPTION:
    # This internal function determines the ABI version of a grammar library based
    -# on the package version.
    +# on a constant in the source file.
    _get_tsg_abi_ver() {
    - if ver_test -gt 0.21; then
    - die "Grammar too new; unknown ABI version"
    - elif ver_test -ge 0.19.0; then
    - echo 13
    - else
    - die "Grammar too old; unknown ABI version"
    - fi
    + # This sed script finds ABI definition string in parser source file,
    + # substitutes all the string until the ABI number, and prints remains
    + # (the ABI number itself)
    + sed -n '/#define LANGUAGE_VERSION/s/.* //p' "${S}"/parser.c ||

    I think you can do:

    sed -n 's/#define LANGUAGE_VERSION //p' ...

    'p' applies only on successful replacement.

    + die "Unable to extract ABI version for this grammar"
    }

    # @FUNCTION: tree-sitter-grammar_src_compile
    @@ -89,8 +87,10 @@ tree-sitter-grammar_src_compile() {
    tree-sitter-grammar_src_install() {
    debug-print-function ${FUNCNAME} "${@}"

    - dolib.so "${WORKDIR}"/lib${PN}$(get_libname $(_get_tsg_abi_ver))
    - dosym lib${PN}$(get_libname $(_get_tsg_abi_ver)) \
    + local soname=lib${PN}$(get_libname $(_get_tsg_abi_ver))
    +
    + dolib.so "${WORKDIR}/${soname}"
    + dosym "${soname}" \
    /usr/$(get_libdir)/lib${PN}$(get_libname)
    }
    fi

    --
    Best regards,
    Michał Górny

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Vadim Misbakh-Soloviov@21:1/5 to All on Thu Dec 9 17:30:01 2021
    Some grammars packages (like, for example, tree-sitter-agda) uses
    different versioning scheme from vast majority of grammars in
    tree-sitter github organization.

    Also, third-party grammars doesn't follow tree-sitter versioning.

    Also, some grammars (like tree-sitter-haskell, for example) only had
    old release tagged, but having compatible and useful grammars in
    current HEAD.

    Also, some grammars like tree-sitter-verilog, even have only v0.0 tag.

    So, instead of assuming grammar ABI version based on ${PV} (ver_test)
    we decided to take ABI version drectly from source code.

    Signed-off-by: Vadim Misbakh-Soloviov <mva@gentoo.org>
    ---
    Changes since previous commit: applied @mgorny's suggestion about sed
    script.

    eclass/tree-sitter-grammar.eclass | 20 ++++++++++----------
    1 file changed, 10 insertions(+), 10 deletions(-)

    diff --git a/eclass/tree-sitter-grammar.eclass b/eclass/tree-sitter-grammar.eclass
    index 46573027f96..7207ecf3ddd 100644
    --- a/eclass/tree-sitter-grammar.eclass
    +++ b/eclass/tree-sitter-grammar.eclass
    @@ -40,15 +40,13 @@ EXPORT_FUNCTIONS src_compile src_install
    # @INTERNAL
    # @DESCRIPTION:
    # This internal function determines the ABI version of a grammar library based -# on the package version.
    +# on a constant in the source file.
    _get_tsg_abi_ver() {
    - if ver_test -gt 0.21; then
    - die "Grammar too new; unknown ABI version"
    - elif ver_test -ge 0.19.0; then
    - echo 13
    - else
    - die "Grammar too old; unknown ABI version"
    - fi
    + # This sed script finds ABI definition string in parser source file,
    + # substitutes all the string until the ABI number, and prints remains
    + # (the ABI number its
  • From Vadim A. Misbakh-Soloviov@21:1/5 to All on Thu Dec 9 23:29:57 2021
    oops, forgot `v2` in subject.

    Added it all the time during pre-send tests, and missed when sent it for real

    :facepalm:
    -----BEGIN PGP SIGNATURE-----

    iNUEABYKAH0WIQQoxRjgXYBWtXJOpb/NsmC0G8NikgUCYbIvBV8UgAAAAAAuAChp c3N1ZXItZnByQG5vdGF0aW9ucy5vcGVucGdwLmZpZnRoaG9yc2VtYW4ubmV0MjhD NTE4RTA1RDgwNTZCNTcyNEVBNUJGQ0RCMjYwQjQxQkMzNjI5MgAKCRDNsmC0G8Ni kmcBAQCJg9YdA6Ot9Xc0XsClDVkimvOzDTEeKJYZsBBNDpL4xQD/e1mv+3fmRafF javZCZ9DYIcnIyWytRuciqcUta+0Zwg=
    =XBJo
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Vadim A. Misbakh-Soloviov@21:1/5 to All on Mon Dec 20 11:13:56 2021
    Merged to gentoo repo

    --
    Best regards,
    mva
    -----BEGIN PGP SIGNATURE-----

    iNUEABYKAH0WIQQoxRjgXYBWtXJOpb/NsmC0G8NikgUCYcADBF8UgAAAAAAuAChp c3N1ZXItZnByQG5vdGF0aW9ucy5vcGVucGdwLmZpZnRoaG9yc2VtYW4ubmV0MjhD NTE4RTA1RDgwNTZCNTcyNEVBNUJGQ0RCMjYwQjQxQkMzNjI5MgAKCRDNsmC0G8Ni ks8wAQC8dKylcX3xX/AiWAb1Ps9kOT29U0BUDw9ehT6yskUM7AEA6IbU7AEWAfKp Z/HVRvLNVcJm9UEbvxu4miSJB3jPzQo=
    =KaPd
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)