diff --git .travis.yml .travis.yml index e69c107..849e6aa 100644 --- .travis.yml +++ .travis.yml @@ -8,11 +8,15 @@ rvm: - 2.2.6 - 2.3.3 - 2.4.0 + - 2.5 + - 2.6 + - 2.7 + - 3.0.0 before_install: - sudo apt-get update -qq - sudo apt-get install -y libgsl0-dev - - gem update bundler - - bundle install + - gem install bundler:1.17.3 + - bundle _1.17.3_ install - bundle exec rake compile - bundle exec rake test diff --git ext/gsl_native/extconf.rb ext/gsl_native/extconf.rb index 2c712b3..982bad8 100644 --- ext/gsl_native/extconf.rb +++ ext/gsl_native/extconf.rb @@ -21,6 +21,7 @@ def create_conf_h(file) #:nodoc: # FIXME: Find a better way to do this: hfile.puts "#define RUBY_2 1" if RUBY_VERSION >= '2.0' + hfile.puts "#define RUBY_3 1" if RUBY_VERSION >= '3.0' for line in $defs line =~ /^-D(.*)/ diff --git ext/gsl_native/gsl_narray.c ext/gsl_native/gsl_narray.c index ba895e6..a4a90d9 100644 --- ext/gsl_native/gsl_narray.c +++ ext/gsl_native/gsl_narray.c @@ -570,7 +570,7 @@ gsl_matrix_int_view* na_to_gm_int_view(VALUE nna) } #include -EXTERN VALUE cgsl_histogram; +extern VALUE cgsl_histogram; static VALUE rb_gsl_narray_histogram(int argc, VALUE *argv, VALUE obj) { double *ptr, *ptr_range; diff --git ext/gsl_native/include/rb_gsl.h ext/gsl_native/include/rb_gsl.h index bc1d6c0..aa643e6 100644 --- ext/gsl_native/include/rb_gsl.h +++ ext/gsl_native/include/rb_gsl.h @@ -109,7 +109,7 @@ void Init_tensor_int_init(VALUE module); void Init_gsl_dirac(VALUE module); -EXTERN VALUE cGSL_Object; +extern VALUE cGSL_Object; void Init_tamu_anova(VALUE module); diff --git ext/gsl_native/include/rb_gsl_array.h ext/gsl_native/include/rb_gsl_array.h index 447679d..e4d4440 100644 --- ext/gsl_native/include/rb_gsl_array.h +++ ext/gsl_native/include/rb_gsl_array.h @@ -29,41 +29,41 @@ typedef gsl_permutation gsl_index; #ifdef HAVE_NARRAY_H -EXTERN VALUE cNArray; +extern VALUE cNArray; #endif #ifdef HAVE_NMATRIX_H -EXTERN VALUE cNMatrix; +extern VALUE cNMatrix; #endif -EXTERN VALUE cgsl_block, cgsl_block_int; -EXTERN VALUE cgsl_block_uchar; -EXTERN VALUE cgsl_block_complex; -EXTERN VALUE cgsl_vector, cgsl_vector_complex; -EXTERN VALUE cgsl_vector_col; -EXTERN VALUE cgsl_vector_col_view; -EXTERN VALUE cgsl_vector_complex_col; -EXTERN VALUE cgsl_vector_complex_col_view; -EXTERN VALUE cgsl_vector_view, cgsl_vector_complex_view; -EXTERN VALUE cgsl_vector_view_ro, cgsl_vector_col_view_ro; -EXTERN VALUE cgsl_vector_complex_view_ro; - -EXTERN VALUE cgsl_vector_int, cgsl_vector_int_col; -EXTERN VALUE cgsl_vector_int_view, cgsl_vector_int_col_view; -EXTERN VALUE cgsl_vector_int_view_ro, cgsl_vector_int_col_view_ro; - -EXTERN VALUE cgsl_matrix, cgsl_matrix_complex; -EXTERN VALUE cgsl_matrix_view_ro; -EXTERN VALUE cgsl_matrix_complex_view_ro; -EXTERN VALUE cgsl_matrix_view, cgsl_matrix_complex_view; -EXTERN VALUE cgsl_matrix_int, cgsl_matrix_int_view; -EXTERN VALUE cgsl_matrix_int_view_ro; -EXTERN VALUE cgsl_permutation; -EXTERN VALUE cgsl_index; -EXTERN VALUE cgsl_function; -EXTERN VALUE mgsl_narray; - -EXTERN VALUE mDirac; +extern VALUE cgsl_block, cgsl_block_int; +extern VALUE cgsl_block_uchar; +extern VALUE cgsl_block_complex; +extern VALUE cgsl_vector, cgsl_vector_complex; +extern VALUE cgsl_vector_col; +extern VALUE cgsl_vector_col_view; +extern VALUE cgsl_vector_complex_col; +extern VALUE cgsl_vector_complex_col_view; +extern VALUE cgsl_vector_view, cgsl_vector_complex_view; +extern VALUE cgsl_vector_view_ro, cgsl_vector_col_view_ro; +extern VALUE cgsl_vector_complex_view_ro; + +extern VALUE cgsl_vector_int, cgsl_vector_int_col; +extern VALUE cgsl_vector_int_view, cgsl_vector_int_col_view; +extern VALUE cgsl_vector_int_view_ro, cgsl_vector_int_col_view_ro; + +extern VALUE cgsl_matrix, cgsl_matrix_complex; +extern VALUE cgsl_matrix_view_ro; +extern VALUE cgsl_matrix_complex_view_ro; +extern VALUE cgsl_matrix_view, cgsl_matrix_complex_view; +extern VALUE cgsl_matrix_int, cgsl_matrix_int_view; +extern VALUE cgsl_matrix_int_view_ro; +extern VALUE cgsl_permutation; +extern VALUE cgsl_index; +extern VALUE cgsl_function; +extern VALUE mgsl_narray; + +extern VALUE mDirac; gsl_matrix_view* gsl_matrix_view_alloc(); void gsl_matrix_view_free(gsl_matrix_view * mv); diff --git ext/gsl_native/include/rb_gsl_common.h ext/gsl_native/include/rb_gsl_common.h index e3365b0..44f23aa 100644 --- ext/gsl_native/include/rb_gsl_common.h +++ ext/gsl_native/include/rb_gsl_common.h @@ -25,8 +25,9 @@ #include #include "rb_gsl_with_narray.h" #include "rb_gsl_with_nmatrix.h" +#include "gsl_config.h" -EXTERN ID rb_gsl_id_beg, rb_gsl_id_end, rb_gsl_id_excl, rb_gsl_id_to_a; +extern ID rb_gsl_id_beg, rb_gsl_id_end, rb_gsl_id_excl, rb_gsl_id_to_a; #ifndef CHECK_FIXNUM #define CHECK_FIXNUM(x) if(!FIXNUM_P(x)) rb_raise(rb_eTypeError,"Fixnum expected"); @@ -292,7 +293,9 @@ EXTERN ID rb_gsl_id_beg, rb_gsl_id_end, rb_gsl_id_excl, rb_gsl_id_to_a; #endif #ifndef RBGSL_SET_CLASS -#ifdef RB_OBJ_WRITE +#if defined(RUBY_3) +#define RBGSL_SET_CLASS0(obj0, cls) RB_OBJ_WRITE(obj0, &(RBASIC(obj0)->klass), cls) +#elif defined(RB_OBJ_WRITE) #define RBGSL_SET_CLASS0(obj0, cls) RB_OBJ_WRITE(obj0, &(RBASIC_CLASS(obj0)), cls) #else #define RBGSL_SET_CLASS0(obj0, cls) RBASIC(obj0)->klass = cls @@ -349,5 +352,5 @@ VALUE rb_gsl_nary_eval1(VALUE ary, double (*f)(double)); VALUE rb_gsl_nmatrix_eval1(VALUE ary, double (*f)(double)); #endif -EXTERN VALUE cGSL_Object; +extern VALUE cGSL_Object; #endif diff --git ext/gsl_native/include/rb_gsl_complex.h ext/gsl_native/include/rb_gsl_complex.h index 6243311..4747f84 100644 --- ext/gsl_native/include/rb_gsl_complex.h +++ ext/gsl_native/include/rb_gsl_complex.h @@ -18,7 +18,7 @@ #include #include -EXTERN VALUE cgsl_complex; +extern VALUE cgsl_complex; VALUE rb_gsl_complex_pow(int argc, VALUE *argv, VALUE obj); VALUE rb_gsl_complex_pow_real(int argc, VALUE *argv, VALUE obj); diff --git ext/gsl_native/include/rb_gsl_const.h ext/gsl_native/include/rb_gsl_const.h index c46b61b..735480a 100644 --- ext/gsl_native/include/rb_gsl_const.h +++ ext/gsl_native/include/rb_gsl_const.h @@ -18,6 +18,6 @@ #include #include -EXTERN VALUE mgsl_const_mks, mgsl_const_cgs; +extern VALUE mgsl_const_mks, mgsl_const_cgs; #endif diff --git ext/gsl_native/include/rb_gsl_fft.h ext/gsl_native/include/rb_gsl_fft.h index 8de6449..a220ae2 100644 --- ext/gsl_native/include/rb_gsl_fft.h +++ ext/gsl_native/include/rb_gsl_fft.h @@ -39,11 +39,11 @@ enum { RB_GSL_FFT_COPY, }; -EXTERN VALUE mgsl_fft; -EXTERN VALUE cgsl_fft_wavetable; -EXTERN VALUE cgsl_fft_wavetable_factor; -EXTERN VALUE cgsl_fft_complex_wavetable, cgsl_fft_complex_workspace; -EXTERN VALUE cgsl_fft_real_wavetable, cgsl_fft_halfcomplex_wavetable; -EXTERN VALUE cgsl_fft_real_workspace; +extern VALUE mgsl_fft; +extern VALUE cgsl_fft_wavetable; +extern VALUE cgsl_fft_wavetable_factor; +extern VALUE cgsl_fft_complex_wavetable, cgsl_fft_complex_workspace; +extern VALUE cgsl_fft_real_wavetable, cgsl_fft_halfcomplex_wavetable; +extern VALUE cgsl_fft_real_workspace; #endif diff --git ext/gsl_native/include/rb_gsl_fit.h ext/gsl_native/include/rb_gsl_fit.h index 3b38e6b..c32805b 100644 --- ext/gsl_native/include/rb_gsl_fit.h +++ ext/gsl_native/include/rb_gsl_fit.h @@ -18,6 +18,6 @@ #include #include "rb_gsl_array.h" -EXTERN VALUE mgsl_multifit; +extern VALUE mgsl_multifit; #endif diff --git ext/gsl_native/include/rb_gsl_function.h ext/gsl_native/include/rb_gsl_function.h index 207e21e..71bb67f 100644 --- ext/gsl_native/include/rb_gsl_function.h +++ ext/gsl_native/include/rb_gsl_function.h @@ -15,8 +15,8 @@ #include "rb_gsl.h" -EXTERN VALUE cgsl_function; -EXTERN VALUE cgsl_function_fdf; +extern VALUE cgsl_function; +extern VALUE cgsl_function_fdf; extern ID RBGSL_ID_call, RBGSL_ID_arity; void gsl_function_mark(gsl_function *f); void gsl_function_free(gsl_function *f); diff --git ext/gsl_native/include/rb_gsl_histogram.h ext/gsl_native/include/rb_gsl_histogram.h index 02a9b7b..a0635ac 100644 --- ext/gsl_native/include/rb_gsl_histogram.h +++ ext/gsl_native/include/rb_gsl_histogram.h @@ -18,11 +18,11 @@ #include #include "rb_gsl.h" -EXTERN VALUE cgsl_histogram; -EXTERN VALUE cgsl_histogram_range; -EXTERN VALUE cgsl_histogram_bin; -EXTERN VALUE cgsl_histogram2d; -EXTERN VALUE cgsl_histogram2d_view; +extern VALUE cgsl_histogram; +extern VALUE cgsl_histogram_range; +extern VALUE cgsl_histogram_bin; +extern VALUE cgsl_histogram2d; +extern VALUE cgsl_histogram2d_view; typedef struct { gsl_histogram h; diff --git ext/gsl_native/include/rb_gsl_poly.h ext/gsl_native/include/rb_gsl_poly.h index 02422ca..76e0a9d 100644 --- ext/gsl_native/include/rb_gsl_poly.h +++ ext/gsl_native/include/rb_gsl_poly.h @@ -17,12 +17,12 @@ #include "rb_gsl_complex.h" #include "rb_gsl_array.h" -EXTERN VALUE cgsl_poly; -EXTERN VALUE cgsl_poly_int; -EXTERN VALUE cgsl_poly_dd; -EXTERN VALUE cgsl_poly_taylor; -EXTERN VALUE cgsl_poly_workspace; -EXTERN VALUE cgsl_rational; +extern VALUE cgsl_poly; +extern VALUE cgsl_poly_int; +extern VALUE cgsl_poly_dd; +extern VALUE cgsl_poly_taylor; +extern VALUE cgsl_poly_workspace; +extern VALUE cgsl_rational; typedef gsl_vector gsl_poly; typedef gsl_vector_int gsl_poly_int; diff --git ext/gsl_native/include/rb_gsl_rng.h ext/gsl_native/include/rb_gsl_rng.h index 796c4ee..f656365 100644 --- ext/gsl_native/include/rb_gsl_rng.h +++ ext/gsl_native/include/rb_gsl_rng.h @@ -15,6 +15,6 @@ #include #include "rb_gsl.h" -EXTERN VALUE cgsl_rng; +extern VALUE cgsl_rng; #endif diff --git ext/gsl_native/include/rb_gsl_root.h ext/gsl_native/include/rb_gsl_root.h index 6b68bab..0d98dd4 100644 --- ext/gsl_native/include/rb_gsl_root.h +++ ext/gsl_native/include/rb_gsl_root.h @@ -16,7 +16,7 @@ #include #include "rb_gsl.h" -EXTERN VALUE cgsl_fsolver; -EXTERN VALUE cgsl_fdfsolver; +extern VALUE cgsl_fsolver; +extern VALUE cgsl_fdfsolver; #endif diff --git ext/gsl_native/include/rb_gsl_sf.h ext/gsl_native/include/rb_gsl_sf.h index 9a61cec..65f5e12 100644 --- ext/gsl_native/include/rb_gsl_sf.h +++ ext/gsl_native/include/rb_gsl_sf.h @@ -16,7 +16,7 @@ #include #include "rb_gsl.h" -EXTERN VALUE cgsl_sf_result, cgsl_sf_result_e10; +extern VALUE cgsl_sf_result, cgsl_sf_result_e10; VALUE rb_gsl_sf_result_new(VALUE klass); diff --git ext/gsl_native/include/rb_gsl_tensor.h ext/gsl_native/include/rb_gsl_tensor.h index 35c98c1..9828f9b 100644 --- ext/gsl_native/include/rb_gsl_tensor.h +++ ext/gsl_native/include/rb_gsl_tensor.h @@ -5,7 +5,7 @@ #include "rb_gsl.h" #include -EXTERN VALUE cgsl_tensor, cgsl_tensor_int; +extern VALUE cgsl_tensor, cgsl_tensor_int; enum { TENSOR_ADD, diff --git ext/gsl_native/include/templates_off.h ext/gsl_native/include/templates_off.h index 37e024d..db01c79 100644 --- ext/gsl_native/include/templates_off.h +++ ext/gsl_native/include/templates_off.h @@ -85,3 +85,8 @@ #undef NAME #undef STRING #undef EXPAND + +#ifdef RUBY_3 +#undef memcpy +#define memcpy ruby_nonempty_memcpy +#endif \ No newline at end of file diff --git ext/gsl_native/include/templates_on.h ext/gsl_native/include/templates_on.h index 4db23e9..44520d1 100644 --- ext/gsl_native/include/templates_on.h +++ ext/gsl_native/include/templates_on.h @@ -239,3 +239,9 @@ #define STRING(x) #x #define EXPAND(x) STRING(x) #define NAME(x) EXPAND(GSL_TYPE(x)) + +// Ruby 3 redefines memcpy as ruby_nonempty_memcpy, breaking everything if memcpy is used in preprocessor +#ifdef RUBY_3 +#undef memcpy +#define memcpy memcpy +#endif \ No newline at end of file diff --git ext/gsl_native/interp.c ext/gsl_native/interp.c index 366f594..4decffc 100644 --- ext/gsl_native/interp.c +++ ext/gsl_native/interp.c @@ -12,7 +12,7 @@ #include "include/rb_gsl_interp.h" VALUE cgsl_interp_accel; /* this is used also in spline.c */ -EXTERN VALUE cgsl_vector, cgsl_matrix; +extern VALUE cgsl_vector, cgsl_matrix; static void rb_gsl_interp_free(rb_gsl_interp *sp); diff --git ext/gsl_native/interp2d.c ext/gsl_native/interp2d.c index e086eab..ec23067 100644 --- ext/gsl_native/interp2d.c +++ ext/gsl_native/interp2d.c @@ -12,7 +12,7 @@ #include "include/rb_gsl_interp2d.h" VALUE cgsl_interp2d_accel; /* this is used also in spline2d.c */ -EXTERN VALUE cgsl_vector, cgsl_matrix; +extern VALUE cgsl_vector, cgsl_matrix; static VALUE rb_gsl_interp2d_alloc(int argc, VALUE *argv, VALUE self) { diff --git ext/gsl_native/linalg_complex.c ext/gsl_native/linalg_complex.c index 491ad0c..4ee62fa 100644 --- ext/gsl_native/linalg_complex.c +++ ext/gsl_native/linalg_complex.c @@ -14,8 +14,8 @@ #include "include/rb_gsl_common.h" #include "include/rb_gsl_linalg.h" -EXTERN VALUE mgsl_linalg; -EXTERN VALUE cgsl_complex; +extern VALUE mgsl_linalg; +extern VALUE cgsl_complex; static VALUE cgsl_matrix_complex_LU; static VALUE cgsl_matrix_complex_C; diff --git ext/gsl_native/matrix_source.h ext/gsl_native/matrix_source.h index d6f312b..cef5a9a 100644 --- ext/gsl_native/matrix_source.h +++ ext/gsl_native/matrix_source.h @@ -1536,7 +1536,7 @@ static int FUNCTION(mygsl_matrix,equal)(GSL_TYPE(gsl_matrix) *a, GSL_TYPE(gsl_ma } #ifdef HAVE_TENSOR_TENSOR_H -EXTERN VALUE cgsl_tensor, cgsl_tensor_int; +extern VALUE cgsl_tensor, cgsl_tensor_int; VALUE rb_gsl_tensor_equal(int argc, VALUE *argv, VALUE obj); VALUE rb_gsl_tensor_int_equal(int argc, VALUE *argv, VALUE obj); #ifdef BASE_DOUBLE diff --git ext/gsl_native/monte.c ext/gsl_native/monte.c index 3559001..8d83bdb 100644 --- ext/gsl_native/monte.c +++ ext/gsl_native/monte.c @@ -25,7 +25,7 @@ static VALUE cgsl_monte_miser; static VALUE cgsl_monte_vegas; static VALUE cgsl_monte_function; static VALUE cgsl_monte_miser_params, cgsl_monte_vegas_params; -EXTERN VALUE cgsl_vector; +extern VALUE cgsl_vector; enum { GSL_MONTE_PLAIN_STATE = 1, diff --git ext/gsl_native/root.c ext/gsl_native/root.c index dfed2c8..666ec81 100644 --- ext/gsl_native/root.c +++ ext/gsl_native/root.c @@ -14,7 +14,7 @@ #include "include/rb_gsl_function.h" #include "include/rb_gsl_root.h" -EXTERN VALUE cgsl_function_fdf; +extern VALUE cgsl_function_fdf; enum { GSL_ROOT_FSOLVER_BISECTION, diff --git ext/gsl_native/sf_bessel.c ext/gsl_native/sf_bessel.c index 65d5038..c0ab45d 100644 --- ext/gsl_native/sf_bessel.c +++ ext/gsl_native/sf_bessel.c @@ -11,7 +11,7 @@ */ #include "include/rb_gsl_sf.h" -EXTERN VALUE cgsl_vector; +extern VALUE cgsl_vector; /* Cylindrical Bessel Functions */ static VALUE rb_gsl_sf_bessel_J0(VALUE obj, VALUE x) diff --git ext/gsl_native/sf_coulomb.c ext/gsl_native/sf_coulomb.c index c314642..6479769 100644 --- ext/gsl_native/sf_coulomb.c +++ ext/gsl_native/sf_coulomb.c @@ -11,7 +11,7 @@ */ #include "include/rb_gsl_sf.h" -EXTERN VALUE cgsl_vector; +extern VALUE cgsl_vector; static VALUE rb_gsl_sf_hydrogenicR_1(VALUE obj, VALUE Z, VALUE r) { diff --git ext/gsl_native/sf_legendre.c ext/gsl_native/sf_legendre.c index 5a9470e..91836e1 100644 --- ext/gsl_native/sf_legendre.c +++ ext/gsl_native/sf_legendre.c @@ -10,7 +10,7 @@ */ #include "include/rb_gsl_sf.h" -EXTERN VALUE cgsl_vector; +extern VALUE cgsl_vector; static VALUE rb_gsl_sf_legendre_P1(VALUE obj, VALUE x) { diff --git ext/gsl_native/sort.c ext/gsl_native/sort.c index a1acd78..240a8fb 100644 --- ext/gsl_native/sort.c +++ ext/gsl_native/sort.c @@ -13,8 +13,8 @@ #include #include -EXTERN ID RBGSL_ID_call; -EXTERN VALUE cgsl_complex; +extern ID RBGSL_ID_call; +extern VALUE cgsl_complex; int rb_gsl_comparison_double(const void *aa, const void *bb); int rb_gsl_comparison_complex(const void *aa, const void *bb); diff --git ext/gsl_native/spline.c ext/gsl_native/spline.c index dd42355..0d730da 100644 --- ext/gsl_native/spline.c +++ ext/gsl_native/spline.c @@ -11,7 +11,7 @@ #include "include/rb_gsl_interp.h" -EXTERN VALUE cgsl_interp_accel; /* defined in interp.c */ +extern VALUE cgsl_interp_accel; /* defined in interp.c */ static void rb_gsl_spline_free(rb_gsl_spline *sp); diff --git ext/gsl_native/spline2d.c ext/gsl_native/spline2d.c index 34e0c2b..36f3106 100644 --- ext/gsl_native/spline2d.c +++ ext/gsl_native/spline2d.c @@ -11,7 +11,7 @@ #ifdef GSL_2_0_LATER #include "include/rb_gsl_interp2d.h" -EXTERN VALUE cgsl_interp2d_accel; /* defined in interp2d.c */ +extern VALUE cgsl_interp2d_accel; /* defined in interp2d.c */ static void rb_gsl_spline2d_free(rb_gsl_spline2d *fr); static VALUE rb_gsl_spline2d_alloc(int argc, VALUE *argv, VALUE self) diff --git ext/gsl_native/vector_complex.c ext/gsl_native/vector_complex.c index b598746..83db5ee 100644 --- ext/gsl_native/vector_complex.c +++ ext/gsl_native/vector_complex.c @@ -12,7 +12,7 @@ #include "include/rb_gsl_array.h" #include "include/rb_gsl_complex.h" -EXTERN VALUE cgsl_complex; +extern VALUE cgsl_complex; static VALUE rb_gsl_vector_complex_inner_product(int argc, VALUE *argv, VALUE obj); static VALUE rb_gsl_vector_complex_product_to_m(int argc, VALUE *argv, VALUE obj); diff --git ext/gsl_native/vector_source.h ext/gsl_native/vector_source.h index 1d343cd..2b265d9 100644 --- ext/gsl_native/vector_source.h +++ ext/gsl_native/vector_source.h @@ -687,7 +687,7 @@ static VALUE FUNCTION(rb_gsl_vector,uplus)(VALUE obj) return obj; } -EXTERN VALUE cgsl_poly; +extern VALUE cgsl_poly; VALUE FUNCTION(rb_gsl_vector,uminus)(VALUE obj) { @@ -1009,7 +1009,7 @@ int FUNCTION(rbgsl_vector,equal)(const GSL_TYPE(gsl_vector) *v1, const GSL_TYPE( } #ifdef HAVE_TENSOR_TENSOR_H -EXTERN VALUE cgsl_tensor, cgsl_tensor_int; +extern VALUE cgsl_tensor, cgsl_tensor_int; VALUE rb_gsl_tensor_equal(int argc, VALUE *argv, VALUE obj); VALUE rb_gsl_tensor_int_equal(int argc, VALUE *argv, VALUE obj); #ifdef BASE_DOUBLE