README.org

#+OPTIONS: ^:nil
#+TITLE: re2

* Erlang NIF bindings for the RE2 regex library
  :PROPERTIES:
  :CUSTOM_ID: erlang-nif-bindings-for-the-re2-regex-library
  :END:


#+BEGIN_EXPORT html
<a href="https://gitlab.com/tuncer/re2erl/pipelines"><img src="https://gitlab.com/tuncer/re2erl/badges/master/pipeline.svg"></a>
#+END_EXPORT

** Using re2
   :PROPERTIES:
   :CUSTOM_ID: using-re2
   :END:

The library's API follows the standard Erlang/OTP =re= API as closely as
possible while accounting for the differences in RE2. One notable
difference is that there's no =run/{2,3}= but only =match/{2,3}= as in
the C++ API. It would be easy to add =run/{2,3}=, if that's needed.

** Obtaining re2
   :PROPERTIES:
   :CUSTOM_ID: obtaining-re2
   :END:

*** Installation via package manager
    :PROPERTIES:
    :CUSTOM_ID: installation-via-package-manager
    :END:

To use =re2=, you can add it as a project dependency and let your
package manager of choice handle it:

rebar.config: ={re2, "1.*"}=

erlang.mk: =DEPS = re2=

mix.exs: ={:re2, "~> 1.*"}=

*** Installation from source into =$ERL_LIBS=
    :PROPERTIES:
    :CUSTOM_ID: installation-from-source-into-erl_libs
    :END:

If you want to make =re2= available globally, you can install it from
source into your Erlang installation by adding it in one of your
=$ERL_LIBS= paths. So, it's either somewhere like
=/usr/lib/erlang/lib= or =$HOME/.erl=.

You can either download a tagged release from
=https://github.com/tuncer/re2/releases= and extract that or clone the
git repo =https://github.com/tuncer/re2= in the target directory. Once
that's done, cd into the directory and run =rebar compile= or just
=make=.

Now, if you start =erl=, you should be able to call functions from the
=re2= module.

#+BEGIN_EXAMPLE
    $ erl
    1> code:which(re2).
    "/usr/lib/erlang/lib/re2/ebin/re2.beam"
    2>
#+END_EXAMPLE

*** Advanced build time options
    :PROPERTIES:
    :CUSTOM_ID: advanced-build-time-options
    :END:

[[https://github.com/google/re2][RE2]] is automatically downloaded to
=c_src/re2= by the build script, and linked into the NIF lib. If you
prefer to link against [[https://github.com/google/re2][RE2]] as found
on the system, you can set the env var =SYSTEM_RE2=1=. If you do that
and the library can not be found, it will fall back to a local copy
(=c_src/re2=). Also, if you want to override the RE2 version that is
fetched and built, when not using system RE2, you can do so by setting
=RE2_REV= to a git rev.

Unless otherwise noted, the [[https://github.com/google/re2][RE2]]
source files are distributed under the BSD-style license found in
=c_src/re2/LICENSE=.