From: Stephane Glondu <steph@glondu.net>
Date: Tue, 18 Jun 2024 08:27:50 +0200
Subject: Fix compilation with OCaml 5.x

---
 config.h       | 10 +++++-----
 conversions.c  |  8 ++++----
 gmp.ml         |  8 ++++----
 mlgmp_f.c      | 26 +++++++++++++-------------
 mlgmp_fr.c     | 26 +++++++++++++-------------
 mlgmp_misc.c   | 10 +++++-----
 mlgmp_q.c      | 20 ++++++++++----------
 mlgmp_random.c |  2 +-
 mlgmp_z.c      | 28 ++++++++++++++--------------
 9 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/config.h b/config.h
index 809a87b..8d93a52 100644
--- a/config.h
+++ b/config.h
@@ -60,11 +60,11 @@
 
 #include <stdint.h>
 
-extern void serialize_int_4(int32_t i);
-extern void serialize_block_1(void * data, long len);
+extern void caml_serialize_int_4(int32_t i);
+extern void caml_serialize_block_1(void * data, long len);
 
-extern uint32_t deserialize_uint_4(void);
-extern int32_t deserialize_sint_4(void);
-extern void deserialize_block_1(void * data, long len);
+extern uint32_t caml_deserialize_uint_4(void);
+extern int32_t caml_deserialize_sint_4(void);
+extern void caml_deserialize_block_1(void * data, long len);
 
 #endif /* SERIALIZE */
diff --git a/conversions.c b/conversions.c
index b57abd1..268d464 100644
--- a/conversions.c
+++ b/conversions.c
@@ -52,7 +52,7 @@ static inline mpz_t * mpz_val (value val)
 
 static inline value alloc_mpz (void)
 {
-  return alloc_custom(&_mlgmp_custom_z,
+  return caml_alloc_custom(&_mlgmp_custom_z,
 		       sizeof(mpz_t),
 		       0,
 		       1);
@@ -76,7 +76,7 @@ static inline mpq_t * mpq_val (value val)
 
 static inline value alloc_mpq (void)
 {
-  return alloc_custom(&_mlgmp_custom_q,
+  return caml_alloc_custom(&_mlgmp_custom_q,
 		       sizeof(mpq_t),
 		       0,
 		       1);
@@ -101,7 +101,7 @@ static inline mpf_t * mpf_val (value val)
 
 static inline value alloc_mpf (void)
 {
-  return alloc_custom(&_mlgmp_custom_f,
+  return caml_alloc_custom(&_mlgmp_custom_f,
 		       sizeof(mpf_t),
 		       0,
 		       1);
@@ -130,7 +130,7 @@ static inline mp_rnd_t Mode_val (value val)
 
 static inline value alloc_mpfr (void)
 {
-  return alloc_custom(&_mlgmp_custom_fr,
+  return caml_alloc_custom(&_mlgmp_custom_fr,
 		       sizeof(mpfr_t),
 		       0,
 		       1);
diff --git a/gmp.ml b/gmp.ml
index bac73ea..2f0b6ad 100644
--- a/gmp.ml
+++ b/gmp.ml
@@ -402,10 +402,10 @@ module F = struct
        ((if sign < 0 then "-" else "")
        ^ (let lm=String.length mantissa
         in if lm > 1
-           then let tmp = String.create (succ lm)
+           then let tmp = Bytes.create (succ lm)
                 in String.blit mantissa 0 tmp 0 1;
                    String.blit mantissa 1 tmp 2 (pred lm);
-                   String.set tmp 1 '.';
+                   Bytes.set tmp 1 '.';
                    Bytes.to_string tmp
            else mantissa)
        ^ (if base <= 10 then "E" else "@")
@@ -540,10 +540,10 @@ module FR = struct
           then "Inf"
           else (let lm=String.length mantissa
         in if lm > 1
-           then let tmp = String.create (succ lm)
+           then let tmp = Bytes.create (succ lm)
                 in String.blit mantissa 0 tmp 0 1;
                    String.blit mantissa 1 tmp 2 (pred lm);
-                   String.set tmp 1 '.';
+                   Bytes.set tmp 1 '.';
                    Bytes.to_string tmp
            else mantissa)
        ^ (if base <= 10 then "E" else "@")
diff --git a/mlgmp_f.c b/mlgmp_f.c
index c925dcb..8879202 100644
--- a/mlgmp_f.c
+++ b/mlgmp_f.c
@@ -90,7 +90,7 @@ value _mlgmp_f_to_float(value v)
 {
   CAMLparam1(v);
   CAMLlocal1(r);
-  r = copy_double(mpf_get_d(*mpf_val(v)));
+  r = caml_copy_double(mpf_get_d(*mpf_val(v)));
   CAMLreturn(r);
 }
 
@@ -101,10 +101,10 @@ value _mlgmp_f_to_string_exp_base_digits(value base, value digits, value val)
   mp_exp_t exponent;
   char *s= mpf_get_str(NULL, &exponent, Int_val(base), Int_val(digits),
 		       *mpf_val(val));
-  rs=alloc_string(strlen(s));
-  strcpy(String_val(rs), s);
+  rs=caml_alloc_string(strlen(s));
+  strcpy(Bytes_val(rs), s);
   free(s);
-  r=alloc_tuple(2);
+  r=caml_alloc_tuple(2);
   Store_field(r, 0, rs);
   Store_field(r, 1, Val_int(exponent));
   CAMLreturn(r);
@@ -284,7 +284,7 @@ value _mlgmp_f_random2(value prec, value nlimbs, value max_exp)
 value _mlgmp_f_initialize()
 {
   CAMLparam0();
-  register_custom_operations(& _mlgmp_custom_f);
+  caml_register_custom_operations(& _mlgmp_custom_f);
   CAMLreturn(Val_unit);
 }
 
@@ -302,18 +302,18 @@ void _mlgmp_f_serialize(value v,
   *wsize_32 = MPF_SIZE_ARCH32;
   *wsize_64 = MPF_SIZE_ARCH64;
 
-  serialize_int_4(mpf_get_prec(*mpf_val(v)));
+  caml_serialize_int_4(mpf_get_prec(*mpf_val(v)));
 
   s = mpf_get_str (NULL, &exponent, 16, 0, *mpf_val(v));
   len = strlen(s);
-  serialize_int_4(len + 11);
+  caml_serialize_int_4(len + 11);
 
-  serialize_block_1("0.", 2);
-  serialize_block_1(s, len);
+  caml_serialize_block_1("0.", 2);
+  caml_serialize_block_1(s, len);
   free(s);
 
   sprintf(exponent_buf, "@%08lx", (exponent & 0xFFFFFFFFUL));
-  serialize_block_1(exponent_buf, 9);
+  caml_serialize_block_1(exponent_buf, 9);
 
   CAMLreturn0;
 }
@@ -323,11 +323,11 @@ unsigned long _mlgmp_f_deserialize(void * dst)
   char *s;
   int len;
 
-  mpf_init2(*((mpf_t*) dst), deserialize_uint_4());
+  mpf_init2(*((mpf_t*) dst), caml_deserialize_uint_4());
 
-  len = deserialize_uint_4();
+  len = caml_deserialize_uint_4();
   s = malloc(len+1);
-  deserialize_block_1(s, len);
+  caml_deserialize_block_1(s, len);
   s[len] = 0;
   mpf_set_str (*((mpf_t*) dst), s, 16);
   free(s);
diff --git a/mlgmp_fr.c b/mlgmp_fr.c
index 7933bd8..b51c4e4 100644
--- a/mlgmp_fr.c
+++ b/mlgmp_fr.c
@@ -117,7 +117,7 @@ value _mlgmp_fr_to_float(value mode, value v)
 #ifdef USE_MPFR
   CAMLparam1(v);
   CAMLlocal1(r);
-  r = copy_double(mpfr_get_d(*mpfr_val(v), Mode_val(mode)));
+  r = caml_copy_double(mpfr_get_d(*mpfr_val(v), Mode_val(mode)));
   CAMLreturn(r);
 #else
   unimplemented(to_float);
@@ -129,7 +129,7 @@ value _mlgmp_fr_to_z_exp(value v)
 #ifdef USE_MPFR
   CAMLparam1(v);
   CAMLlocal2(r, z);
-  r = alloc_tuple(2);
+  r = caml_alloc_tuple(2);
   z = alloc_init_mpz();
   Store_field(r, 0, z);
   Store_field(r, 1, Val_int(mpfr_get_z_exp(*mpz_val(z), *mpfr_val(v))));
@@ -148,10 +148,10 @@ value _mlgmp_fr_to_string_exp_base_digits(value mode,
   mp_exp_t exponent;
   char *s= mpfr_get_str(NULL, &exponent, Int_val(base), Int_val(digits),
 		       *mpfr_val(val), Mode_val(mode));
-  rs=alloc_string(strlen(s));
+  rs=caml_alloc_string(strlen(s));
   strcpy(String_val(rs), s);
   free(s);
-  r=alloc_tuple(2);
+  r=caml_alloc_tuple(2);
   Store_field(r, 0, rs);
   Store_field(r, 1, Val_int(exponent));
   CAMLreturn(r);
@@ -404,7 +404,7 @@ value _mlgmp_fr_initialize(void)
 {
 #ifdef USE_MPFR
   CAMLparam0();
-  register_custom_operations(& _mlgmp_custom_f);
+  caml_register_custom_operations(& _mlgmp_custom_f);
   CAMLreturn(Val_unit);
 #endif
 }
@@ -423,18 +423,18 @@ void _mlgmp_fr_serialize(value v,
   *wsize_32 = MPFR_SIZE_ARCH32;
   *wsize_64 = MPFR_SIZE_ARCH64;
 
-  serialize_int_4(mpfr_get_prec(*mpfr_val(v)));
+  caml_serialize_int_4(mpfr_get_prec(*mpfr_val(v)));
 
   s = mpfr_get_str (NULL, &exponent, 16, 0, *mpfr_val(v), GMP_RNDN);
   len = strlen(s);
-  serialize_int_4(len + 11);
+  caml_serialize_int_4(len + 11);
 
-  serialize_block_1("0.", 2);
-  serialize_block_1(s, len);
+  caml_serialize_block_1("0.", 2);
+  caml_serialize_block_1(s, len);
   free(s);
 
   sprintf(exponent_buf, "@%08lx", (exponent & 0xFFFFFFFFUL));
-  serialize_block_1(exponent_buf, 9);
+  caml_serialize_block_1(exponent_buf, 9);
 
   CAMLreturn0;
 }
@@ -444,11 +444,11 @@ unsigned long _mlgmp_fr_deserialize(void * dst)
   char *s;
   int len;
 
-  mpfr_init2(*((mpfr_t*) dst), deserialize_uint_4());
+  mpfr_init2(*((mpfr_t*) dst), caml_deserialize_uint_4());
 
-  len = deserialize_uint_4();
+  len = caml_deserialize_uint_4();
   s = malloc(len+1);
-  deserialize_block_1(s, len);
+  caml_deserialize_block_1(s, len);
   s[len] = 0;
   mpfr_set_str (*((mpfr_t*) dst), s, 16, GMP_RNDN);
   free(s);
diff --git a/mlgmp_misc.c b/mlgmp_misc.c
index 56aac98..e36f950 100644
--- a/mlgmp_misc.c
+++ b/mlgmp_misc.c
@@ -17,8 +17,8 @@ value _mlgmp_get_runtime_version(value dummy)
 {
   CAMLparam0();
   CAMLlocal1(r);
-  r = alloc_string(strlen(gmp_version));
-  strcpy(String_val(r), gmp_version);
+  r = caml_alloc_string(strlen(gmp_version));
+  strcpy(Bytes_val(r), gmp_version);
   CAMLreturn(r);
 }
 
@@ -26,7 +26,7 @@ value _mlgmp_get_compile_version(value dummy)
 {
   CAMLparam0();
   CAMLlocal1(r);
-  r = alloc_tuple(3);
+  r = caml_alloc_tuple(3);
   Store_field(r, 0, Val_int(__GNU_MP_VERSION));
   Store_field(r, 1, Val_int(__GNU_MP_VERSION_MINOR));
   Store_field(r, 2, Val_int(__GNU_MP_VERSION_PATCHLEVEL));
@@ -44,10 +44,10 @@ value _mlgmp_is_mpfr_available(value dummy)
 
 void division_by_zero(void)
 {
-  raise_constant(*caml_named_value("Gmp.Division_by_zero"));
+  caml_raise_constant(*caml_named_value("Gmp.Division_by_zero"));
 }
 
 void raise_unimplemented(char *s)
 {
-  raise_with_string(*caml_named_value("Gmp.Unimplemented"), s);
+  caml_raise_with_string(*caml_named_value("Gmp.Unimplemented"), s);
 }
diff --git a/mlgmp_q.c b/mlgmp_q.c
index fe6dffb..7acb013 100644
--- a/mlgmp_q.c
+++ b/mlgmp_q.c
@@ -93,7 +93,7 @@ value _mlgmp_q_to_float(value v)
   CAMLparam1(v);
   CAMLlocal1(r);
   trace(to_float);
-  r = copy_double(mpq_get_d(*mpq_val(v)));
+  r = caml_copy_double(mpq_get_d(*mpq_val(v)));
   CAMLreturn(r);
 }
 
@@ -177,7 +177,7 @@ value _mlgmp_q_sgn(value a)
 value _mlgmp_q_initialize()
 {
   CAMLparam0();
-  register_custom_operations(& _mlgmp_custom_q);
+  caml_register_custom_operations(& _mlgmp_custom_q);
   CAMLreturn(Val_unit);
 }
 
@@ -195,14 +195,14 @@ void _mlgmp_q_serialize(value v,
 
   s = mpz_get_str (NULL, 16, mpq_numref(*mpq_val(v)));
   len = strlen(s);
-  serialize_int_4(len);
-  serialize_block_1(s, len);
+  caml_serialize_int_4(len);
+  caml_serialize_block_1(s, len);
   free(s);
 
   s = mpz_get_str (NULL, 16, mpq_denref(*mpq_val(v)));
   len = strlen(s);
-  serialize_int_4(len);
-  serialize_block_1(s, len);
+  caml_serialize_int_4(len);
+  caml_serialize_block_1(s, len);
   free(s);
 
   CAMLreturn0;
@@ -213,16 +213,16 @@ unsigned long _mlgmp_q_deserialize(void * dst)
   char *s;
   int len;
 
-  len = deserialize_uint_4();
+  len = caml_deserialize_uint_4();
   s = malloc(len+1);
-  deserialize_block_1(s, len);
+  caml_deserialize_block_1(s, len);
   s[len] = 0;
   mpz_init_set_str (mpq_numref(*((mpq_t*) dst)), s, 16);
   free(s);
 
-  len = deserialize_uint_4();
+  len = caml_deserialize_uint_4();
   s = malloc(len+1);
-  deserialize_block_1(s, len);
+  caml_deserialize_block_1(s, len);
   s[len] = 0;
   mpz_init_set_str (mpq_denref(*((mpq_t*) dst)), s, 16);
   free(s);
diff --git a/mlgmp_random.c b/mlgmp_random.c
index 3ce451a..10db7eb 100644
--- a/mlgmp_random.c
+++ b/mlgmp_random.c
@@ -34,7 +34,7 @@ value _mlgmp_randinit_lc(value n)
 {
   CAMLparam1(n);
   CAMLlocal1(r);
-  r = alloc_custom(&_mlgmp_custom_random,
+  r = caml_alloc_custom(&_mlgmp_custom_random,
 		       sizeof(gmp_randstate_t),
 		       4,
 		       1000000);
diff --git a/mlgmp_z.c b/mlgmp_z.c
index 35d65fc..d29af67 100644
--- a/mlgmp_z.c
+++ b/mlgmp_z.c
@@ -128,8 +128,8 @@ value _mlgmp_z_to_string_base(value ml_base, value ml_val)
      need a means of shortening the length of a pre-allocated
      Caml string (mpz_sizeinbase sometimes overestimates lengths). */
   s=mpz_get_str(NULL, base, *mpz_val(ml_val));
-  r=alloc_string(strlen(s));
-  strcpy(String_val(r), s);
+  r=caml_alloc_string(strlen(s));
+  strcpy(Bytes_val(r), s);
   free(s);
 
   CAMLreturn(r);
@@ -145,7 +145,7 @@ value _mlgmp_z_to_float(value v)
 {
   CAMLparam1(v);
   CAMLlocal1(r);
-  r = copy_double(mpz_get_d(*mpz_val(v)));
+  r = caml_copy_double(mpz_get_d(*mpz_val(v)));
   CAMLreturn(r);
 }
 
@@ -281,7 +281,7 @@ value _mlgmp_z_sqrtrem(value a)
 
   mpz_sqrtrem(*mpz_val(q), *mpz_val(r), *mpz_val(a));
 
-  qr=alloc_tuple(2);
+  qr=caml_alloc_tuple(2);
   Store_field(qr, 0, q);
   Store_field(qr, 1, r);
   CAMLreturn(qr);
@@ -319,7 +319,7 @@ value _mlgmp_z_##kind##div_qr(value n, value d)				\
 									\
   mpz_##kind##div_qr(*mpz_val(q), *mpz_val(r), *mpz_val(n), *mpz_val(d));\
 									\
-  qr=alloc_tuple(2);							\
+  qr=caml_alloc_tuple(2);						\
   Store_field(qr, 0, q);						\
   Store_field(qr, 1, r);						\
   CAMLreturn(qr);						        \
@@ -392,7 +392,7 @@ value _mlgmp_z_##kind##div_qr_ui(value n, value d)			\
 									\
   mpz_##kind##div_qr_ui(*mpz_val(q), *mpz_val(r), *mpz_val(n), ui_d);	\
 									\
-  qr=alloc_tuple(2);							\
+  qr=caml_alloc_tuple(2);						\
   Store_field(qr, 0, q);						\
   Store_field(qr, 1, r);						\
   CAMLreturn(qr);	       						\
@@ -615,7 +615,7 @@ value  _mlgmp_z_gcdext(value a, value b)
   s=alloc_init_mpz();  
   t=alloc_init_mpz();
   mpz_gcdext(*mpz_val(g), *mpz_val(s), *mpz_val(t), *mpz_val(a), *mpz_val(b));
-  r=alloc_tuple(3);
+  r=caml_alloc_tuple(3);
   Store_field(r, 0, g);
   Store_field(r, 1, s);
   Store_field(r, 2, t);
@@ -633,7 +633,7 @@ value  _mlgmp_z_invert(value a, value b)
     }
   else
     {
-      r=alloc_tuple(1);
+      r=caml_alloc_tuple(1);
       Store_field(r, 0, i);
     }
   CAMLreturn(r);
@@ -668,7 +668,7 @@ value _mlgmp_z_remove(value a, value b)
   CAMLlocal2(f, r);
   f = alloc_init_mpz();
   x = mpz_remove(*mpz_val(f), *mpz_val(a), *mpz_val(b));
-  r=alloc_tuple(2);
+  r=caml_alloc_tuple(2);
   Store_field(r, 0, f);
   Store_field(r, 1, Val_int(x));
   CAMLreturn(r);
@@ -753,7 +753,7 @@ z_random_op_ui(rrandomb)
 value _mlgmp_z_initialize()
 {
   CAMLparam0();
-  register_custom_operations(& _mlgmp_custom_z);
+  caml_register_custom_operations(& _mlgmp_custom_z);
   CAMLreturn(Val_unit);
 }
 
@@ -771,8 +771,8 @@ void _mlgmp_z_serialize(value v,
 
   s = mpz_get_str (NULL, 16, *mpz_val(v));
   len = strlen(s);
-  serialize_int_4(len);
-  serialize_block_1(s, len);
+  caml_serialize_int_4(len);
+  caml_serialize_block_1(s, len);
 
   free(s);
   CAMLreturn0;
@@ -783,9 +783,9 @@ unsigned long _mlgmp_z_deserialize(void * dst)
   char *s;
   int len;
 
-  len = deserialize_uint_4();
+  len = caml_deserialize_uint_4();
   s = malloc(len+1);
-  deserialize_block_1(s, len);
+  caml_deserialize_block_1(s, len);
   s[len] = 0;
   mpz_init_set_str (*((mpz_t*) dst), s, 16);
   free(s);
