The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Name

SPVM::Resource::RE2 - Google/RE2 Resources

Usage

MyRE2.spvm

  class MyRE2 {
    native static method match : int ();
  }

MyRE2.cpp

  #include "spvm_native.h"
  
  #include "re2/re2.h"
  
  extern "C" {
  
  int32_t SPVM__MyRE2__match(SPVM_ENV* env, SPVM_VALUE* stack) {
    
    if (RE2::PartialMatch("abcde", "bcd")) {
      stack[0].ival = 1;
    }
    else {
      stack[0].ival = 0;
    }
    
    return 0;
  }
  
  }

MyRE2.config

  my $config = SPVM::Builder::Config->new_cpp17(file => __FILE__);
  
  my $resource = $config->use_resource('Resource::RE2');
  
  if ($^O eq 'MSWin32') {
    $config->add_static_libs('stdc++', 'winpthread', 'gcc');
  }
  
  $config;
  

myre2.pl

  use FindBin;
  use lib "$FindBin::Bin";
  use SPVM 'MyRE2';
  
  my $match = SPVM::MyRE2->match;

Description

Resource::RE2 is a SPVM module to provide the resource of RE2 2022-06-01.

RE2 is a regular expression library written by C++. Google created it.

See SPVM::Document::NativeModule and SPVM::Document::Resource to write native modules and use resources.

Resource Version

Google/RE2 2023-02-01.

If a new release exists, it will be upgraded.

Config Definition

The config definition of Resource::RE2.

  my $config = SPVM::Builder::Config->new_cpp17(file => __FILE__);
  
  $config->ext('cc');
  
  my @source_files = qw(
    util/strutil.cc
    util/rune.cc
    util/pcre.cc
    re2/dfa.cc
    re2/prefilter_tree.cc
    re2/stringpiece.cc
    re2/bitstate.cc
    re2/unicode_casefold.cc
    re2/simplify.cc
    re2/filtered_re2.cc
    re2/onepass.cc
    re2/re2.cc
    re2/parse.cc
    re2/set.cc
    re2/prog.cc
    re2/prefilter.cc
    re2/mimics_pcre.cc
    re2/regexp.cc
    re2/nfa.cc
    re2/tostring.cc
    re2/perl_groups.cc
    re2/unicode_groups.cc
    re2/compile.cc
  );
  
  $config->add_source_files(@source_files);

Required Libraries

Windows

  if ($^O eq 'MSWin32') {
    $config->add_static_libs('stdc++', 'winpthread', 'gcc');
  }

How to Create This Resource

Getting Product

  mkdir -p original.tmp
  git clone https://github.com/google/re2.git original.tmp/re2
  git -C original.tmp/re2 checkout tags/2023-02-01 -b 2023-02-01
  git -C original.tmp/re2 branch

Source Files

All files of Google/RE2 is copied by the following steps into the src directory.

  rsync -av --exclude='*.h' original.tmp/re2/ lib/SPVM/Resource/RE2.native/src/

Header Files

Header files of Google/RE2 is copied into the include directory by the following way.

  rsync -av --include='*/' --include='*.h' --exclude='*' original.tmp/re2/ lib/SPVM/Resource/RE2.native/include/

Extracting Source Files

The source files that is used in the config are extracted by the following command.

  find lib/SPVM/Resource/RE2.native/src/* | perl -p -e 's|^\Qlib/SPVM/Resource/RE2.native/src/||' | grep -P '(util|re2)/\w+\.cc$' | grep -v -P 'util/(test|benchmark|fuzz)\.cc$'

Repository

https://github.com/yuki-kimoto/SPVM-Resource-RE2

Author

YuKi Kimoto kimoto.yuki@gmail.com

Copyright & License

Copyright 2023-2023 YuKi Kimoto, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.