File compile-macros.sh of Package tree-sitter

#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# SPDX-FileCopyrightText: 2024 Björn Bidar
# based of compile-macros.sh  from python-rpm-macros
mkdir -p macros

### Lua: generate automagic from macros.in and macros.lua
(
    # copy macros.in up to LUA-MACROS
    sed -n -e '1,/^### LUA-MACROS ###$/p' macros.in

    # include "functions.lua", without empty lines, as %_treesitter_definitions
    echo "%_treesitter_definitions %{lua:"
    sed -n -r \
        -e 's/\\/\\\\/g' \
        -e '/^.+$/p' \
        functions.lua
    echo "}"

    INFUNC=0
    INMULTILINE_MACRO=0
    # brute line-by-line read of macros.lua
    IFS=""
    while read -r line; do
        if [ $INFUNC = 0 ] ; then
            if [ $INMULTILINE_MACRO = 1 ]  ;then
                if echo "$line" | grep -qE '^.*\]\]' ; then
                    INMULTILINE_MACRO=0
                fi
                echo "# $line"
            elif echo "$line" | grep -qE -- '--\[\[' ; then
                INMULTILINE_MACRO=1
                echo "# $line"
            elif echo "$line" | grep -qE -- '^--' ; then
                echo "# $line"
            elif echo "$line" | grep -q '^function '; then
                # entering top-level Lua function
                INFUNC=1;
                echo "$line" | sed -r -e 's/^function (.*)\((.*)\)$/%\1(\2) %{lua: \\/'
            else
                # outside function, copy
                # (usually this is newline)
                echo "$line"
            fi
        else
            if [ "$line" = "end" ]; then
                # leaving top-level Lua function
                INFUNC=0;
                echo '}'
            elif [ $INFUNC = 1 ]; then
                # inside function
                # double backslashes and add backslash to end of line
                echo "$line" | sed -e 's/\\/\\\\/g' -e 's/$/\\/'
            fi
        fi
    done < macros.lua

    # copy rest of macros.in
    sed -n -e '/^### LUA-MACROS ###$/,$p' macros.in
) > macros/050-automagic


### final step: cat macros/*, but with files separated by additional newlines
sed -e '$s/$/\n/' -s macros/* > macros.treesitter
openSUSE Build Service is sponsored by