re2 2.0.0.beta1 → 2.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -9
- data/README.md +33 -11
- data/Rakefile +1 -24
- data/dependencies.yml +3 -3
- data/ext/re2/extconf.rb +63 -9
- data/lib/re2/version.rb +1 -1
- data/ports/archives/re2-2023-09-01.tar.gz +0 -0
- data/re2.gemspec +2 -2
- metadata +5 -4
- data/ports/archives/re2-2023-07-01.tar.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b84cf6ec8ce5bd9800f96ec578e998e4b8ca5345c1c96eaa699d0a0eebb03e2c
|
4
|
+
data.tar.gz: c7e89da8456e80c91f287ee444cf69daad53af97cd604e44e3cdf685f8af34f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b018c0bbf42935fc86828b478dc85c4ff3e14ee89a5c27d2fb77ac120bcd1ad65b9277d9a53e031260710669ccd65d508018f70a78ad8a871ee1c21f65c2360
|
7
|
+
data.tar.gz: ff2832314da390eab285d44739b01ddfbc35ec4de635284d7886ead84b914b0b4d30dc4c80d50cf4e9cdfb91b3813a239e8206405bd5b12df496ce8b7ec92b25
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,17 +4,33 @@ re2 [![Build Status](https://github.com/mudge/re2/actions/workflows/tests.yml/ba
|
|
4
4
|
A Ruby binding to [re2][], an "efficient, principled regular expression
|
5
5
|
library".
|
6
6
|
|
7
|
-
**Current version:**
|
8
|
-
**Supported Ruby versions:**
|
7
|
+
**Current version:** 2.0.0.beta1
|
8
|
+
**Supported Ruby versions:** 2.7, 3.0, 3.1, 3.2
|
9
|
+
**Bundled re2 version:** libre2.11 (2023-09-01)
|
9
10
|
**Supported re2 versions:** libre2.0 (< 2020-03-02), libre2.1 (2020-03-02), libre2.6 (2020-03-03), libre2.7 (2020-05-01), libre2.8 (2020-07-06), libre2.9 (2020-11-01), libre2.10 (2022-12-01), libre2.11 (2023-07-01)
|
10
11
|
|
11
12
|
Installation
|
12
13
|
------------
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
The gem comes bundled with a version of [re2][] and will compile itself (and
|
16
|
+
any dependencies) on install. As compilation can take a while, precompiled
|
17
|
+
native gems are available for Linux, Windows and macOS.
|
18
|
+
|
19
|
+
In v2.0 and later, precompiled native gems are available for Ruby 2.7 to 3.2
|
20
|
+
on these platforms:
|
21
|
+
|
22
|
+
- `aarch64-linux` (requires: glibc >= 2.29)
|
23
|
+
- `arm-linux` (requires: glibc >= 2.29)
|
24
|
+
- `arm64-darwin`
|
25
|
+
- `x64-mingw32` / `x64-mingw-ucrt`
|
26
|
+
- `x86-linux` (requires: glibc >= 2.17)
|
27
|
+
- `x86_64-darwin`
|
28
|
+
- `x86_64-linux` (requires: glibc >= 2.17)
|
29
|
+
|
30
|
+
If you wish to opt out of using the bundled libraries, you will need re2
|
31
|
+
installed as well as a C++ compiler such as [gcc][] (on Debian and Ubuntu, this
|
32
|
+
is provided by the [build-essential][] package). If you are using Mac OS X, I
|
33
|
+
recommend installing re2 with [Homebrew][] by running the following:
|
18
34
|
|
19
35
|
$ brew install re2
|
20
36
|
|
@@ -22,20 +38,26 @@ If you are using Debian, you can install the [libre2-dev][] package like so:
|
|
22
38
|
|
23
39
|
$ sudo apt-get install libre2-dev
|
24
40
|
|
25
|
-
Recent versions of re2 require a compiler with C++14 support such as
|
41
|
+
Recent versions of re2 require a compiler with C++14 support such as
|
42
|
+
[clang](http://clang.llvm.org/) 3.4 or [gcc](https://gcc.gnu.org/) 5.
|
26
43
|
|
27
44
|
If you are using a packaged Ruby distribution, make sure you also have the
|
28
45
|
Ruby header files installed such as those provided by the [ruby-dev][] package
|
29
46
|
on Debian and Ubuntu.
|
30
47
|
|
31
|
-
You can then install the library via RubyGems with `gem install re2
|
32
|
-
|
33
|
-
any of the
|
48
|
+
You can then install the library via RubyGems with `gem install re2 --platform=ruby --
|
49
|
+
--enable-system-libraries` or `gem install re2 --platform=ruby -- --enable-system-libraries
|
50
|
+
--with-re2-dir=/path/to/re2/prefix` if re2 is not installed in any of the
|
51
|
+
following default locations:
|
34
52
|
|
35
53
|
* `/usr/local`
|
36
54
|
* `/opt/homebrew`
|
37
55
|
* `/usr`
|
38
56
|
|
57
|
+
If you're using Bundler, you can use the
|
58
|
+
[`force_ruby_platform`](https://bundler.io/v2.3/man/gemfile.5.html#FORCE_RUBY_PLATFORM)
|
59
|
+
option in your Gemfile.
|
60
|
+
|
39
61
|
Documentation
|
40
62
|
-------------
|
41
63
|
|
@@ -214,7 +236,7 @@ Contributions
|
|
214
236
|
* Thanks to [Jason Woods](https://github.com/driskell) who contributed the
|
215
237
|
original implementations of `RE2::MatchData#begin` and `RE2::MatchData#end`;
|
216
238
|
* Thanks to [Stefano Rivera](https://github.com/stefanor) who first contributed C++11 support;
|
217
|
-
* Thanks to [Stan Hu](https://github.com/stanhu) for reporting a bug with empty patterns and `RE2::Regexp#scan
|
239
|
+
* Thanks to [Stan Hu](https://github.com/stanhu) for reporting a bug with empty patterns and `RE2::Regexp#scan`, contributing support for libre2.11 (2023-07-01) and for vendoring re2 and abseil and compiling native gems in 2.0;
|
218
240
|
* Thanks to [Sebastian Reitenbach](https://github.com/buzzdeee) for reporting
|
219
241
|
the deprecation and removal of the `utf8` encoding option in re2;
|
220
242
|
* Thanks to [Sergio Medina](https://github.com/serch) for reporting a bug when
|
data/Rakefile
CHANGED
@@ -33,7 +33,7 @@ Gem::PackageTask.new(RE2_GEM_SPEC) do |p|
|
|
33
33
|
p.need_tar = false
|
34
34
|
end
|
35
35
|
|
36
|
-
CROSS_RUBY_VERSIONS = %w[3.2.0 3.1.0 3.0.0 2.7.0].join(':')
|
36
|
+
CROSS_RUBY_VERSIONS = %w[3.2.0 3.1.0 3.0.0 2.7.0 2.6.0].join(':')
|
37
37
|
CROSS_RUBY_PLATFORMS = %w[
|
38
38
|
aarch64-linux
|
39
39
|
arm-linux
|
@@ -129,27 +129,4 @@ task gem_build_path do
|
|
129
129
|
add_vendored_libraries
|
130
130
|
end
|
131
131
|
|
132
|
-
desc "Temporarily set VERSION to a unique timestamp"
|
133
|
-
task "set-version-to-timestamp" do
|
134
|
-
# this task is used by bin/test-gem-build
|
135
|
-
# to test building, packaging, and installing a precompiled gem
|
136
|
-
version_constant_re = /^\s*VERSION\s*=\s*["'](.*)["']$/
|
137
|
-
|
138
|
-
version_file_path = File.join(__dir__, "lib/re2/version.rb")
|
139
|
-
version_file_contents = File.read(version_file_path)
|
140
|
-
|
141
|
-
current_version_string = version_constant_re.match(version_file_contents)[1]
|
142
|
-
current_version = Gem::Version.new(current_version_string)
|
143
|
-
|
144
|
-
fake_version = Gem::Version.new(format("%s.test.%s", current_version.bump, Time.now.strftime("%Y.%m%d.%H%M")))
|
145
|
-
|
146
|
-
unless version_file_contents.gsub!(version_constant_re, " VERSION = \"#{fake_version}\"")
|
147
|
-
raise("Could not hack the VERSION constant")
|
148
|
-
end
|
149
|
-
|
150
|
-
File.open(version_file_path, "w") { |f| f.write(version_file_contents) }
|
151
|
-
|
152
|
-
puts "NOTE: wrote version as \"#{fake_version}\""
|
153
|
-
end
|
154
|
-
|
155
132
|
task default: [:compile, :spec]
|
data/dependencies.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
libre2:
|
2
|
-
version: "2023-
|
3
|
-
sha256: "
|
4
|
-
# sha-256 hash provided in https://github.com/google/re2/releases/download/2023-
|
2
|
+
version: "2023-09-01"
|
3
|
+
sha256: "5bb6875ae1cd1e9fedde98018c346db7260655f86fdb8837e3075103acd3649b"
|
4
|
+
# sha-256 hash provided in https://github.com/google/re2/releases/download/2023-09-01/re2-2023-09-01.tar.gz
|
5
5
|
|
6
6
|
abseil:
|
7
7
|
version: "20230125.3"
|
data/ext/re2/extconf.rb
CHANGED
@@ -117,8 +117,10 @@ if ENV["CXX"]
|
|
117
117
|
RbConfig::CONFIG["CXX"] = ENV["CXX"]
|
118
118
|
end
|
119
119
|
|
120
|
-
def build_extension
|
120
|
+
def build_extension(static_p = false)
|
121
|
+
# Enable optional warnings but disable deprecated register warning for Ruby 2.6 support
|
121
122
|
$CFLAGS << " -Wall -Wextra -funroll-loops"
|
123
|
+
$CPPFLAGS << " -Wno-register"
|
122
124
|
|
123
125
|
# Pass -x c++ to force gcc to compile the test program
|
124
126
|
# as C++ (as it will end in .c by default).
|
@@ -128,7 +130,7 @@ def build_extension
|
|
128
130
|
have_header("stdint.h")
|
129
131
|
have_func("rb_str_sublen")
|
130
132
|
|
131
|
-
|
133
|
+
if !static_p and !have_library("re2")
|
132
134
|
abort "You must have re2 installed and specified with --with-re2-dir, please see https://github.com/google/re2/wiki/Install"
|
133
135
|
end
|
134
136
|
|
@@ -326,14 +328,65 @@ ABSL_LDFLAGS = %w[
|
|
326
328
|
-labsl_time_zone
|
327
329
|
].freeze
|
328
330
|
|
329
|
-
def
|
330
|
-
|
331
|
+
def libflag_to_filename(ldflag)
|
332
|
+
case ldflag
|
333
|
+
when /\A-l(.+)/
|
334
|
+
"lib#{Regexp.last_match(1)}.#{$LIBEXT}"
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
# This method does a number of things to ensure the final shared library
|
339
|
+
# is compiled statically with the vendored libraries:
|
340
|
+
#
|
341
|
+
# 1. For -L<path> flags, ensure that any `ports` paths are prioritized just
|
342
|
+
# in case there are installed libraries that might take precedence.
|
343
|
+
# 2. For -l<lib> flags, convert the library to the static library with a
|
344
|
+
# full path and substitute the absolute static library. For example,
|
345
|
+
# -lre2 maps to /path/to/ports/<arch>/libre2/<version>/lib/libre2.a.
|
346
|
+
#
|
347
|
+
# This is needed because when building the extension, Ruby appears to
|
348
|
+
# insert `-L#{RbConfig::CONFIG['exec_prefix']}/lib` first. If libre2 is
|
349
|
+
# in installed in that location then the extension will link against the
|
350
|
+
# system library instead of the vendored library.
|
351
|
+
def add_flag(arg, lib_paths)
|
352
|
+
case arg
|
353
|
+
when /\A-L(.+)\z/
|
354
|
+
# Prioritize ports' directories
|
355
|
+
lib_dir = Regexp.last_match(1)
|
356
|
+
$LIBPATH =
|
357
|
+
if lib_dir.start_with?(PACKAGE_ROOT_DIR + "/")
|
358
|
+
[lib_dir] | $LIBPATH
|
359
|
+
else
|
360
|
+
$LIBPATH | [lib_dir]
|
361
|
+
end
|
362
|
+
when /\A-l./
|
363
|
+
filename = libflag_to_filename(arg)
|
364
|
+
|
365
|
+
added = false
|
366
|
+
lib_paths.each do |path|
|
367
|
+
static_lib = File.join(path, filename)
|
368
|
+
|
369
|
+
next unless File.exist?(static_lib)
|
370
|
+
|
371
|
+
$LDFLAGS << " " << static_lib
|
372
|
+
added = true
|
373
|
+
break
|
374
|
+
end
|
375
|
+
|
376
|
+
append_ldflags(arg.shellescape) unless added
|
377
|
+
else
|
378
|
+
append_ldflags(arg.shellescape)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
def add_static_ldflags(flags, lib_paths)
|
383
|
+
static_flags = flags.strip.shellsplit
|
331
384
|
|
332
385
|
if MiniPortile.windows?
|
333
|
-
static_flags.each { |flag|
|
334
|
-
ABSL_LDFLAGS.each { |flag|
|
386
|
+
static_flags.each { |flag| add_flag(flag, lib_paths) unless ABSL_LDFLAGS.include?(flag) }
|
387
|
+
ABSL_LDFLAGS.each { |flag| add_flag(flag, lib_paths) }
|
335
388
|
else
|
336
|
-
static_flags.each { |flag|
|
389
|
+
static_flags.each { |flag| add_flag(flag, lib_paths) }
|
337
390
|
end
|
338
391
|
end
|
339
392
|
|
@@ -371,8 +424,9 @@ def build_with_vendored_libraries
|
|
371
424
|
|
372
425
|
raise 'Unable to run pkg-config --libs --static' unless $?.success?
|
373
426
|
|
374
|
-
|
375
|
-
|
427
|
+
lib_paths = [File.join(abseil_recipe.path, 'lib'), File.join(re2_recipe.path, 'lib')]
|
428
|
+
add_static_ldflags(flags, lib_paths)
|
429
|
+
build_extension(true)
|
376
430
|
end
|
377
431
|
|
378
432
|
if config_system_libraries?
|
data/lib/re2/version.rb
CHANGED
Binary file
|
data/re2.gemspec
CHANGED
@@ -5,11 +5,11 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.summary = "Ruby bindings to re2."
|
6
6
|
s.description = 'Ruby bindings to re2, "an efficient, principled regular expression library".'
|
7
7
|
s.version = RE2::VERSION
|
8
|
-
s.authors = ["Paul Mucur"]
|
8
|
+
s.authors = ["Paul Mucur", "Stan Hu"]
|
9
9
|
s.homepage = "https://github.com/mudge/re2"
|
10
10
|
s.extensions = ["ext/re2/extconf.rb"]
|
11
11
|
s.license = "BSD-3-Clause"
|
12
|
-
s.required_ruby_version = ">= 2.
|
12
|
+
s.required_ruby_version = ">= 2.6.0"
|
13
13
|
s.files = [
|
14
14
|
".rspec",
|
15
15
|
"dependencies.yml",
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: re2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Mucur
|
8
|
+
- Stan Hu
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
12
|
+
date: 2023-09-10 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rake-compiler
|
@@ -87,7 +88,7 @@ files:
|
|
87
88
|
- lib/re2/string.rb
|
88
89
|
- lib/re2/version.rb
|
89
90
|
- ports/archives/20230125.3.tar.gz
|
90
|
-
- ports/archives/re2-2023-
|
91
|
+
- ports/archives/re2-2023-09-01.tar.gz
|
91
92
|
- re2.gemspec
|
92
93
|
- spec/kernel_spec.rb
|
93
94
|
- spec/re2/match_data_spec.rb
|
@@ -109,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
110
|
requirements:
|
110
111
|
- - ">="
|
111
112
|
- !ruby/object:Gem::Version
|
112
|
-
version: 2.
|
113
|
+
version: 2.6.0
|
113
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
115
|
requirements:
|
115
116
|
- - ">"
|
Binary file
|