This patches ruby-hyperestraier to use rb_undef_alloc_func to
avoid these warnings on Ruby 3.2:

warning: undefining the allocator of T_DATA class Estraier::Database_data
warning: undefining the allocator of T_DATA class Estraier::Condition_data
warning: undefining the allocator of T_DATA class Estraier::Result_data

Still works fine on Ruby 3.0 and 3.1.

I plan to commit this in a couple days unless I hear objections.

Thanks,
Jeremy

Index: Makefile
===================================================================
RCS file: /cvs/ports/textproc/ruby-hyperestraier/Makefile,v
retrieving revision 1.47
diff -u -p -r1.47 Makefile
--- Makefile    11 Mar 2022 20:03:27 -0000      1.47
+++ Makefile    19 Jun 2023 18:17:22 -0000
@@ -3,7 +3,7 @@ COMMENT=                Ruby interface to hyperestraie
 V=                     1.4.10
 DISTNAME=              estraier-${V}
 PKGNAME=               hyperestraier-${V}
-REVISION =             0
+REVISION =             1
 CATEGORIES=            textproc
 
 HOMEPAGE=              http://fallabs.com/hyperestraier/rubynativeapi/
Index: patches/patch-ext_estraier_c
===================================================================
RCS file: /cvs/ports/textproc/ruby-hyperestraier/patches/patch-ext_estraier_c,v
retrieving revision 1.2
diff -u -p -r1.2 patch-ext_estraier_c
--- patches/patch-ext_estraier_c        11 Mar 2022 20:03:28 -0000      1.2
+++ patches/patch-ext_estraier_c        19 Jun 2023 18:17:11 -0000
@@ -1,5 +1,8 @@
 Use modern ruby macros for accessing ptr/len for strings and arrays.
 
+Undefine the allocation function for a few constants to prevent
+warnings on Ruby 3.2.
+
 Index: ext/estraier.c
 --- ext/estraier.c.orig
 +++ ext/estraier.c
@@ -12,7 +15,31 @@ Index: ext/estraier.c
    for(i = 0; i < len; i++){
      Check_Type(rb_ary_entry(vwords, i), T_STRING);
    }
-@@ -764,7 +764,7 @@ static VALUE db_search_meta(VALUE vself, VALUE vdbs, V
+@@ -368,6 +368,7 @@ static VALUE doc_make_snippet(VALUE vself, VALUE vword
+ static void cond_init(void){
+   cls_cond = rb_define_class_under(mod_estraier, "Condition", rb_cObject);
+   cls_cond_data = rb_define_class_under(mod_estraier, "Condition_data", 
rb_cObject);
++  rb_undef_alloc_func(cls_cond_data);
+   rb_define_const(cls_cond, "SURE", INT2NUM(ESTCONDSURE));
+   rb_define_const(cls_cond, "USUAL", INT2NUM(ESTCONDUSUAL));
+   rb_define_const(cls_cond, "FAST", INT2NUM(ESTCONDFAST));
+@@ -519,6 +520,7 @@ static VALUE cond_set_mask(VALUE vself, VALUE vmask){
+ static void res_init(void){
+   cls_res = rb_define_class_under(mod_estraier, "Result", rb_cObject);
+   cls_res_data = rb_define_class_under(mod_estraier, "Result_data", 
rb_cObject);
++  rb_undef_alloc_func(cls_res_data);
+   rb_define_private_method(cls_res, "initialize", res_initialize, 0);
+   rb_define_method(cls_res, "doc_num", res_doc_num, 0);
+   rb_define_method(cls_res, "get_doc_id", res_get_doc_id, 1);
+@@ -662,6 +664,7 @@ static VALUE res_get_shadows(VALUE vself, VALUE vid){
+ static void db_init(void){
+   cls_db = rb_define_class_under(mod_estraier, "Database", rb_cObject);
+   cls_db_data = rb_define_class_under(mod_estraier, "Database_data", 
rb_cObject);
++  rb_undef_alloc_func(cls_db_data);
+   rb_define_const(cls_db, "VERSION", rb_str_new2(est_version));
+   rb_define_const(cls_db, "ERRNOERR", INT2NUM(ESTENOERR));
+   rb_define_const(cls_db, "ERRINVAL", INT2NUM(ESTEINVAL));
+@@ -764,7 +767,7 @@ static VALUE db_search_meta(VALUE vself, VALUE vdbs, V
    CBMAP *hints;
    int i, dnum, *res, rnum;
    Check_Type(vdbs, T_ARRAY);
@@ -21,7 +48,7 @@ Index: ext/estraier.c
    dbs = cbmalloc(dnum * sizeof(ESTMTDB *) + 1);
    for(i = 0; i < dnum; i++){
      vdb = rb_ary_entry(vdbs, i);
-@@ -1189,10 +1189,10 @@ static CBLIST *objtocblist(VALUE obj){
+@@ -1189,10 +1192,10 @@ static CBLIST *objtocblist(VALUE obj){
    VALUE str;
    int i, len;
    list = cblistopen();
@@ -34,7 +61,7 @@ Index: ext/estraier.c
    }
    return list;
  }
-@@ -1218,14 +1218,14 @@ static CBMAP *objtocbmap(VALUE obj){
+@@ -1218,14 +1221,14 @@ static CBMAP *objtocbmap(VALUE obj){
    int i, len;
    map = cbmapopenex(31);
    keys = rb_funcall(obj, rb_intern("keys"), 0);

Reply via email to