b23614c9a8
* Drop legacy binding updates * templates: Properly replace author email * templates: Update npm packages * bindings: Improve cmake file * cmake: Support amalgamated build * cmake: Correct library scopes * make: Fix tree-sitter.pc generation - update to 0.24.1: * fix(generate): move generated header files into the generate crate - update do 0.24.0: * docs: add Kotlin to the playground * fix(generate): remove necessary files from gitignore template * feat(generate): bump tree-sitter dev dependency to 0.23 * fix(cli): remove conflicting short flags in the fuzz subcommand * feat(bindings): bump go-tree-sitter version * docs(changelog): add 0.23.0 release notes * feat: add an API to time out query executions * fix(generate): disallow inline variables referencing themselves * fix(rust): add missing TSNode functions * fix(lib): correct extra node creation from non-zero root-alias cursors * fix(test): exit with an error if a test marked with :error has no error * fix(test): retain attributes when running test -u * feat(language): derive Clone and Copy on LanguageFn * fix(lib): backtrack to the last relevant iterator if no child was found * fix(generate): add tree-sitter to the dev-dependencies of the Cargo.toml * fix(binding_web): correct edit signature * build(lib): build using cmake * fix(cli): keep skipped tests unchanged in the test/corpus OBS-URL: https://build.opensuse.org/package/show/editors/tree-sitter?expand=0&rev=31
228 lines
6.8 KiB
Lua
228 lines
6.8 KiB
Lua
--[[
|
|
SPDX-License-Identifier: GPL-2.0
|
|
SPDX-FileCopyrightText: 2024 Björn Bidar
|
|
partly based of functions.lua from python-rpm-macros
|
|
--]]
|
|
|
|
|
|
--[[
|
|
Main Package should look like this:
|
|
%%treesitter_grammars foo bar
|
|
|
|
%%build
|
|
%%treesitter_configure
|
|
%%treesitter_build
|
|
|
|
%%install
|
|
%%treesitter_install
|
|
|
|
%%files
|
|
%%treesitter_files
|
|
--]]
|
|
|
|
|
|
function treesitter_grammars()
|
|
--[[
|
|
Define any grammars to be included inside the package
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local base_name = rpm.expand("%_treesitter_base_name")
|
|
local base_libname = rpm.expand("%_treesitter_grammar_base_libname")
|
|
|
|
local treesitter_grammar_names = ""
|
|
local treesitter_grammar_libnames = ""
|
|
|
|
local arg = arg
|
|
local suse_version = tonumber(rpm.expand("%suse_version"))
|
|
if suse_version < 1600 then
|
|
arg = arg_compat()
|
|
end
|
|
|
|
for arg_num = 1,#arg do
|
|
treesitter_grammar_libnames=treesitter_grammar_libnames .. base_libname .. "-" .. arg[arg_num] .. ".so "
|
|
end
|
|
rpm.define("treesitter_grammar_libnames " .. treesitter_grammar_libnames)
|
|
|
|
for arg_num = 1,#arg do
|
|
treesitter_grammar_names=treesitter_grammar_names .. " " .. arg[arg_num]
|
|
print("Provides: treesitter_grammar(" .. base_name .. "-" .. arg[arg_num] .. ")\n")
|
|
end
|
|
rpm.define("treesitter_grammar_names " .. treesitter_grammar_names)
|
|
end
|
|
|
|
|
|
function treesitter_configure()
|
|
--[[
|
|
Generate grammar sources for all the grammars provided earlier akin
|
|
to %configure.
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local grammars = string.split(rpm.expand("%{treesitter_grammar_names}"))
|
|
|
|
print(rpm.expand("%treesitter_set_flags"))
|
|
print("\n")
|
|
|
|
if #grammars > 1 then
|
|
for k,grammar in pairs(grammars) do
|
|
print("(cd " .. grammar .. ";tree-sitter generate)")
|
|
print("\n")
|
|
end
|
|
else
|
|
print("tree-sitter generate")
|
|
end
|
|
|
|
end
|
|
|
|
function treesitter_build()
|
|
--[[
|
|
Similar to %make_build build all grammars if possible read from
|
|
an alternative file instead of binding.gyp
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local basename = rpm.expand("%{_treesitter_grammar_base_libname}")
|
|
local grammar_names = rpm.expand("%treesitter_grammar_names")
|
|
local arg = arg
|
|
local suse_version = tonumber(rpm.expand("%suse_version"))
|
|
if suse_version < 1600 then
|
|
arg = arg_compat()
|
|
end
|
|
local left_over_args = arg[1]
|
|
local grammar_arg_binding = ""
|
|
|
|
|
|
if left_over_args then
|
|
grammar_arg_binding=" -b "..arg[1]
|
|
end
|
|
|
|
local treesitter_target = rpm.expand("%{treesitter_target}")
|
|
local grammar_names_tbl = string.split(grammar_names, " ")
|
|
|
|
if #grammar_names_tbl > 1 then
|
|
for k,target in pairs(grammar_names_tbl) do
|
|
print("eval $(" .. treesitter_target .. grammar_arg_binding .. " -g " .. target ..") " .. " -o " .. basename .. "-" .. target .. ".so ${RPM_OPT_FLAGS}")
|
|
print("\n")
|
|
end
|
|
else
|
|
print("eval $(" .. treesitter_target .. grammar_arg_binding .. ") " .. " -o " .. basename.. "-" .. grammar_names .. ".so ${RPM_OPT_FLAGS}")
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function treesitter_install()
|
|
--[[
|
|
Install all previously build grammars
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local grammars = string.split(rpm.expand("%{treesitter_grammar_libnames}"))
|
|
local install_path = rpm.expand("%{buildroot}%{_treesitter_grammardir}")
|
|
for k,grammar in pairs(grammars) do
|
|
print("install -Dm755 " .. grammar .. " " .. install_path .. "/" .. grammar)
|
|
print("\n")
|
|
end
|
|
end
|
|
|
|
function treesitter_files()
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local grammars = string.split(rpm.expand("%{treesitter_grammar_libnames}"))
|
|
local grammardir = rpm.expand("%{_treesitter_grammardir}")
|
|
local _libdir = rpm.expand("%{_libdir}")
|
|
|
|
if not grammardir == libdir then
|
|
print(rpm.expand("%dir " .. grammardir.."\n"))
|
|
end
|
|
|
|
for k,grammar in pairs(grammars) do
|
|
print(rpm.expand(grammardir .. "/"..grammar.."\n"))
|
|
end
|
|
end
|
|
|
|
--[[
|
|
Optional -devel package for grammars that are needed for other grammars to be built.
|
|
|
|
If the -devel package is needed it should look like this:
|
|
%%install
|
|
[...] # Main page here
|
|
|
|
%%treesitter_devel_install
|
|
|
|
# Or if the package has shared files between grammars:
|
|
%%treesitter_devel_install foobar.js
|
|
|
|
%%treesitter_devel_package
|
|
--]]
|
|
|
|
function treesitter_devel_install()
|
|
--[[
|
|
Install all grammars sources defined earlier.
|
|
If passed these can also include additional files such as shared fragments
|
|
that are used between multiple grammars in the same package.
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
--local grammar_names = rpm.expand("%{treesitter_grammar_names}")
|
|
local grammars = string.split(rpm.expand("%{treesitter_grammar_names}"))
|
|
local treesitter = rpm.expand("%_treesitter_base_name")
|
|
|
|
local install_cmd_base = "install -Dm644 "
|
|
local install_path = rpm.expand("%{buildroot}%{_treesitter_grammar_develdir}/")
|
|
|
|
local rpm_provides_macro = ""
|
|
--print(grammar_names)
|
|
for k,grammar in pairs(grammars) do
|
|
if grammar then
|
|
rpm_provides_macro=rpm_provides_macro.. "Provides: treesitter_grammar_src(" ..treesitter .. "-" .. grammar ..")\n"
|
|
end
|
|
end
|
|
rpm.define("_treesitter_devel_provides "..rpm_provides_macro)
|
|
|
|
if #grammars == 1 then
|
|
print(install_cmd_base .. "grammar.js " .. install_path .. treesitter .. "-" .. grammars[1].. "/grammar.js")
|
|
return
|
|
end
|
|
|
|
local arg = arg
|
|
local suse_version = tonumber(rpm.expand("%suse_version"))
|
|
if suse_version < 1600 then
|
|
arg = arg_compat()
|
|
end
|
|
|
|
if #arg > 0 then
|
|
--[[ FIXME: This maybe not be the best solution if packages can have a single grammar
|
|
but also addon files
|
|
]]--
|
|
for arg_num = 1,#arg do
|
|
print(rpm.expand(install_cmd_base .. arg[arg_num] .. " " .. install_path .. "%{name}/" .. arg[arg_num] .. "\n"))
|
|
print("\n")
|
|
end
|
|
end
|
|
|
|
for k,grammar in pairs(grammars) do
|
|
if grammar then
|
|
print(rpm.expand(install_cmd_base .. grammar .. "/grammar.js " .. install_path .. "%{name}/" .. grammar .. "/grammar.js\n"))
|
|
print("\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function treesitter_devel_files()
|
|
--[[
|
|
Install -devel files to %%{_treesitter_grammar_develdir}
|
|
--]]
|
|
rpm.expand("%_treesitter_macro_init")
|
|
local grammars = string.split(rpm.expand("%{treesitter_grammar_names}"))
|
|
local grammar_develdir = rpm.expand("%{_treesitter_grammar_develdir}")
|
|
local fpp
|
|
|
|
print(rpm.expand("%dir %{_treesitter_grammar_develdir} \n"))
|
|
--[[
|
|
Own all directories leading up to %%_includedir which we include in
|
|
%%_treesitter_grammar_develdir
|
|
--]]
|
|
while not (grammar_develdir == rpm.expand("%_includedir")) do
|
|
print(rpm.expand("%dir " .. grammar_develdir .. "\n"))
|
|
grammar_develdir = grammar_develdir:dirname()
|
|
end
|
|
print(rpm.expand("%{_treesitter_grammar_develdir}/%{name}\n"))
|
|
end
|