Initial import (#2028895)

epel9
Aleksei Bavshin 3 years ago
parent 7025aaa157
commit 7f84b8a67e
No known key found for this signature in database
GPG Key ID: 4F071603387A382A

3
.gitignore vendored

@ -0,0 +1,3 @@
*.crate
*.src.rpm
results_*/

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2018-2021 Max Brunsfeld
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,109 @@
From 545f8b98b8f614869e5e836c5a05091dfd5472c6 Mon Sep 17 00:00:00 2001
From: Aleksei Bavshin <alebastr89@gmail.com>
Date: Sun, 5 Dec 2021 16:08:59 -0800
Subject: [PATCH] binding_rust: generate bindings during build
Bindgen output is platform- and architecture-dependent. Pre-generated
bindings may cause issues on the machines different from the one used
for generating the code.
The recommended way[1] to use bindgen is to invoke it from `build.rs`.
[1]: https://rust-lang.github.io/rust-bindgen/library-usage.html
---
Cargo.lock | 155 +++++++++++++++++++++++++++++++++++++-
lib/Cargo.toml | 1 +
lib/binding_rust/build.rs | 24 ++++++
lib/binding_rust/ffi.rs | 2 +-
lib/binding_rust/lib.rs | 5 +-
5 files changed, 183 insertions(+), 4 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index ed173fdf7..3ab8f52b7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,5 +31,7 @@
[dependencies.regex]
version = "1"
+[build-dependencies.bindgen]
+version = "0.59.1"
[build-dependencies.cc]
version = "^1.0.58"
diff --git a/binding_rust/build.rs b/binding_rust/build.rs
index 5798cde3..34736b53 100644
--- a/binding_rust/build.rs
+++ b/binding_rust/build.rs
@@ -1,6 +1,28 @@
use std::path::{Path, PathBuf};
use std::{env, fs};
+fn generate_bindings() {
+ const HEADER_FILE: &'static str = "include/tree_sitter/api.h";
+
+ println!("cargo:rerun-if-changed={}", HEADER_FILE);
+ let bindings = bindgen::Builder::default()
+ .header(HEADER_FILE)
+ .layout_tests(false)
+ .allowlist_type("^TS.*")
+ .allowlist_function("^ts_.*")
+ .allowlist_var("^TREE_SITTER.*")
+ .blocklist_function("ts_tree_print_dot_graph")
+ .opaque_type("FILE")
+ .size_t_is_usize(true)
+ .generate()
+ .expect("Unable to generate bindings");
+
+ let output = PathBuf::from(env::var("OUT_DIR").unwrap());
+ bindings
+ .write_to_file(output.join("bindings.rs"))
+ .expect("Unable to write bindings");
+}
+
fn main() {
println!("cargo:rerun-if-env-changed=TREE_SITTER_STATIC_ANALYSIS");
if env::var("TREE_SITTER_STATIC_ANALYSIS").is_ok() {
@@ -17,6 +39,8 @@ fn main() {
}
}
+ generate_bindings();
+
let src_path = Path::new("src");
for entry in fs::read_dir(&src_path).unwrap() {
let entry = entry.unwrap();
diff --git a/binding_rust/ffi.rs b/binding_rust/ffi.rs
index 685ed765..5cf93180 100644
--- a/binding_rust/ffi.rs
+++ b/binding_rust/ffi.rs
@@ -2,7 +2,7 @@
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
-include!("./bindings.rs");
+include!(concat!(env!("OUT_DIR"),"/bindings.rs"));
extern "C" {
pub(crate) fn dup(fd: std::os::raw::c_int) -> std::os::raw::c_int;
diff --git a/binding_rust/lib.rs b/binding_rust/lib.rs
index cf8437b8..35205cee 100644
--- a/binding_rust/lib.rs
+++ b/binding_rust/lib.rs
@@ -25,11 +25,12 @@ use std::{
/// assigned an ABI version number that corresponds to the current CLI version.
/// The Tree-sitter library is generally backwards-compatible with languages
/// generated using older CLI versions, but is not forwards-compatible.
-pub const LANGUAGE_VERSION: usize = ffi::TREE_SITTER_LANGUAGE_VERSION;
+pub const LANGUAGE_VERSION: usize = ffi::TREE_SITTER_LANGUAGE_VERSION as usize;
/// The earliest ABI version that is supported by the current version of the
/// library.
-pub const MIN_COMPATIBLE_LANGUAGE_VERSION: usize = ffi::TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION;
+pub const MIN_COMPATIBLE_LANGUAGE_VERSION: usize =
+ ffi::TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION as usize;
pub const PARSER_HEADER: &'static str = include_str!("../include/tree_sitter/parser.h");
--
2.33.1

@ -0,0 +1,96 @@
# Generated by rust2rpm 21
%bcond_without check
%global debug_package %{nil}
%global crate tree-sitter
Name: rust-%{crate}
Version: 0.20.2
Release: %autorelease
Summary: Rust bindings to the Tree-sitter parsing library
# Upstream license specification: MIT
# Bundled ICU sources: Unicode
License: MIT and Unicode
URL: https://crates.io/crates/tree-sitter
Source: %{crates_source}
# Upstream license file - tree-sitter/tree-sitter#1520
Source1: https://github.com/tree-sitter/tree-sitter/raw/v%{version}/LICENSE#/LICENSE.upstream
# tree-sitter/tree-sitter#1524 modified to apply to the crate source
Patch0: binding_rust-regenerate-bindings-during-build.patch
ExclusiveArch: %{rust_arches}
BuildRequires: rust-packaging >= 21
%global _description %{expand:
Rust bindings to the Tree-sitter parsing library.}
%description %{_description}
%package devel
Summary: %{summary}
BuildArch: noarch
# The create contains a bundled copy of the tree-sitter C library.
Provides: bundled(tree-sitter) = %{version}
# The tree-sitter C library contains a small subset of files from the ICU library
Provides: bundled(icu) = 65.1
%description devel %{_description}
This package contains library source intended for building other packages which
use the "%{crate}" crate.
%files devel
%license %{crate_instdir}/LICENSE
%license %{crate_instdir}/src/unicode/LICENSE
%{crate_instdir}/
%package -n %{name}+default-devel
Summary: %{summary}
BuildArch: noarch
%description -n %{name}+default-devel %{_description}
This package contains library source intended for building other packages which
use the "default" feature of the "%{crate}" crate.
%files -n %{name}+default-devel
%ghost %{crate_instdir}/Cargo.toml
%package -n %{name}+lazy_static-devel
Summary: %{summary}
BuildArch: noarch
%description -n %{name}+lazy_static-devel %{_description}
This package contains library source intended for building other packages which
use the "lazy_static" feature of the "%{crate}" crate.
%files -n %{name}+lazy_static-devel
%ghost %{crate_instdir}/Cargo.toml
%prep
%autosetup -n %{crate}-%{version_no_tilde} -p1
%cargo_prep
# drop pre-generated bindings; we don't want to accidentally use these
rm -f binding_rust/bindings.rs
%generate_buildrequires
%cargo_generate_buildrequires
%build
%cargo_build
%install
%cargo_install
# prepare upstream license file for %%license
install -D -m 0644 -pv %{SOURCE1} %{buildroot}%{crate_instdir}/LICENSE
%if %{with check}
%check
%cargo_test
%endif
%changelog
%autochangelog

@ -0,0 +1 @@
SHA512 (tree-sitter-0.20.2.crate) = 498a6a8add5c79d81add11af76b679322150ab87fb55171aeeaf279b44841ac9afb0ddfe3edb10f67979dacb7c37a1039a32ac4e516270e57e28fb1c020bd284
Loading…
Cancel
Save