gsl 1.12.108

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. data/README.rdoc +29 -0
  2. data/Rakefile +54 -0
  3. data/VERSION +2 -0
  4. data/ext/MANIFEST +119 -0
  5. data/ext/alf.c +206 -0
  6. data/ext/array.c +666 -0
  7. data/ext/array_complex.c +247 -0
  8. data/ext/blas.c +29 -0
  9. data/ext/blas1.c +731 -0
  10. data/ext/blas2.c +1093 -0
  11. data/ext/blas3.c +881 -0
  12. data/ext/block.c +44 -0
  13. data/ext/block_source.c +886 -0
  14. data/ext/bspline.c +130 -0
  15. data/ext/bundle.c +3 -0
  16. data/ext/cdf.c +754 -0
  17. data/ext/cheb.c +542 -0
  18. data/ext/combination.c +283 -0
  19. data/ext/common.c +325 -0
  20. data/ext/complex.c +1004 -0
  21. data/ext/const.c +673 -0
  22. data/ext/const_additional.c +120 -0
  23. data/ext/cqp.c +283 -0
  24. data/ext/deriv.c +195 -0
  25. data/ext/dht.c +361 -0
  26. data/ext/diff.c +166 -0
  27. data/ext/dirac.c +395 -0
  28. data/ext/eigen.c +2373 -0
  29. data/ext/error.c +194 -0
  30. data/ext/extconf.rb +281 -0
  31. data/ext/fcmp.c +66 -0
  32. data/ext/fft.c +1092 -0
  33. data/ext/fit.c +205 -0
  34. data/ext/fresnel.c +312 -0
  35. data/ext/function.c +524 -0
  36. data/ext/geometry.c +139 -0
  37. data/ext/graph.c +1638 -0
  38. data/ext/gsl.c +271 -0
  39. data/ext/gsl_narray.c +653 -0
  40. data/ext/histogram.c +1995 -0
  41. data/ext/histogram2d.c +1068 -0
  42. data/ext/histogram3d.c +884 -0
  43. data/ext/histogram3d_source.c +750 -0
  44. data/ext/histogram_find.c +101 -0
  45. data/ext/histogram_oper.c +159 -0
  46. data/ext/ieee.c +98 -0
  47. data/ext/integration.c +1138 -0
  48. data/ext/interp.c +512 -0
  49. data/ext/jacobi.c +739 -0
  50. data/ext/linalg.c +4047 -0
  51. data/ext/linalg_complex.c +741 -0
  52. data/ext/math.c +725 -0
  53. data/ext/matrix.c +39 -0
  54. data/ext/matrix_complex.c +1732 -0
  55. data/ext/matrix_double.c +560 -0
  56. data/ext/matrix_int.c +256 -0
  57. data/ext/matrix_source.c +2733 -0
  58. data/ext/min.c +250 -0
  59. data/ext/monte.c +992 -0
  60. data/ext/multifit.c +1879 -0
  61. data/ext/multimin.c +808 -0
  62. data/ext/multimin_fsdf.c +156 -0
  63. data/ext/multiroots.c +955 -0
  64. data/ext/ndlinear.c +321 -0
  65. data/ext/nmf.c +167 -0
  66. data/ext/nmf_wrap.c +72 -0
  67. data/ext/ntuple.c +469 -0
  68. data/ext/odeiv.c +959 -0
  69. data/ext/ool.c +879 -0
  70. data/ext/oper_complex_source.c +253 -0
  71. data/ext/permutation.c +596 -0
  72. data/ext/poly.c +42 -0
  73. data/ext/poly2.c +265 -0
  74. data/ext/poly_source.c +1885 -0
  75. data/ext/qrng.c +171 -0
  76. data/ext/randist.c +1873 -0
  77. data/ext/rational.c +480 -0
  78. data/ext/rng.c +612 -0
  79. data/ext/root.c +408 -0
  80. data/ext/sf.c +1494 -0
  81. data/ext/sf_airy.c +200 -0
  82. data/ext/sf_bessel.c +867 -0
  83. data/ext/sf_clausen.c +28 -0
  84. data/ext/sf_coulomb.c +206 -0
  85. data/ext/sf_coupling.c +118 -0
  86. data/ext/sf_dawson.c +29 -0
  87. data/ext/sf_debye.c +157 -0
  88. data/ext/sf_dilog.c +42 -0
  89. data/ext/sf_elementary.c +44 -0
  90. data/ext/sf_ellint.c +206 -0
  91. data/ext/sf_elljac.c +29 -0
  92. data/ext/sf_erfc.c +93 -0
  93. data/ext/sf_exp.c +164 -0
  94. data/ext/sf_expint.c +211 -0
  95. data/ext/sf_fermi_dirac.c +148 -0
  96. data/ext/sf_gamma.c +344 -0
  97. data/ext/sf_gegenbauer.c +96 -0
  98. data/ext/sf_hyperg.c +197 -0
  99. data/ext/sf_laguerre.c +112 -0
  100. data/ext/sf_lambert.c +47 -0
  101. data/ext/sf_legendre.c +367 -0
  102. data/ext/sf_log.c +104 -0
  103. data/ext/sf_mathieu.c +238 -0
  104. data/ext/sf_power.c +46 -0
  105. data/ext/sf_psi.c +98 -0
  106. data/ext/sf_synchrotron.c +48 -0
  107. data/ext/sf_transport.c +76 -0
  108. data/ext/sf_trigonometric.c +207 -0
  109. data/ext/sf_zeta.c +119 -0
  110. data/ext/signal.c +310 -0
  111. data/ext/siman.c +718 -0
  112. data/ext/sort.c +208 -0
  113. data/ext/spline.c +395 -0
  114. data/ext/stats.c +799 -0
  115. data/ext/sum.c +168 -0
  116. data/ext/tamu_anova.c +56 -0
  117. data/ext/tensor.c +38 -0
  118. data/ext/tensor_source.c +1123 -0
  119. data/ext/vector.c +38 -0
  120. data/ext/vector_complex.c +2236 -0
  121. data/ext/vector_double.c +1433 -0
  122. data/ext/vector_int.c +204 -0
  123. data/ext/vector_source.c +3329 -0
  124. data/ext/wavelet.c +937 -0
  125. data/include/rb_gsl.h +151 -0
  126. data/include/rb_gsl_array.h +238 -0
  127. data/include/rb_gsl_cheb.h +21 -0
  128. data/include/rb_gsl_common.h +343 -0
  129. data/include/rb_gsl_complex.h +25 -0
  130. data/include/rb_gsl_const.h +29 -0
  131. data/include/rb_gsl_dirac.h +13 -0
  132. data/include/rb_gsl_eigen.h +17 -0
  133. data/include/rb_gsl_fft.h +62 -0
  134. data/include/rb_gsl_fit.h +25 -0
  135. data/include/rb_gsl_function.h +27 -0
  136. data/include/rb_gsl_graph.h +70 -0
  137. data/include/rb_gsl_histogram.h +63 -0
  138. data/include/rb_gsl_histogram3d.h +97 -0
  139. data/include/rb_gsl_integration.h +17 -0
  140. data/include/rb_gsl_interp.h +46 -0
  141. data/include/rb_gsl_linalg.h +25 -0
  142. data/include/rb_gsl_math.h +26 -0
  143. data/include/rb_gsl_odeiv.h +21 -0
  144. data/include/rb_gsl_poly.h +71 -0
  145. data/include/rb_gsl_rational.h +37 -0
  146. data/include/rb_gsl_rng.h +21 -0
  147. data/include/rb_gsl_root.h +22 -0
  148. data/include/rb_gsl_sf.h +119 -0
  149. data/include/rb_gsl_statistics.h +17 -0
  150. data/include/rb_gsl_tensor.h +45 -0
  151. data/include/rb_gsl_with_narray.h +22 -0
  152. data/include/templates_off.h +87 -0
  153. data/include/templates_on.h +241 -0
  154. data/lib/gsl/gnuplot.rb +41 -0
  155. data/lib/gsl/oper.rb +68 -0
  156. data/lib/ool.rb +22 -0
  157. data/lib/ool/conmin.rb +30 -0
  158. metadata +224 -0
@@ -0,0 +1,194 @@
1
+ /*
2
+ error.c
3
+ Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
+ (C) Copyright 2001-2006 by Yoshiki Tsunesada
5
+
6
+ Ruby/GSL is free software: you can redistribute it and/or modify it
7
+ under the terms of the GNU General Public License.
8
+ This library is distributed in the hope that it will be useful, but
9
+ WITHOUT ANY WARRANTY.
10
+ */
11
+ #include "rb_gsl.h"
12
+ #include <gsl/gsl_errno.h>
13
+ #include "rb_gsl_array.h"
14
+ #include "rb_gsl_common.h"
15
+ #include "rb_gsl_function.h"
16
+
17
+ static VALUE eHandler;
18
+ static VALUE cgsl_error[35];
19
+ static VALUE *pgsl_error;
20
+
21
+ static void Init_rb_gsl_define_GSL_CONST(VALUE module);
22
+ void rb_gsl_error_handler(const char *reason, const char *file,
23
+ int line, int gsl_errno);
24
+ static void rb_gsl_my_error_handler(const char *reason, const char *file,
25
+ int line, int gsl_errno);
26
+
27
+ void rb_gsl_error_handler(const char *reason, const char *file,
28
+ int line, int gsl_errno)
29
+ {
30
+ const char *emessage = gsl_strerror(gsl_errno);
31
+ rb_raise(pgsl_error[gsl_errno],
32
+ "Ruby/GSL error code %d, %s (file %s, line %d), %s",
33
+ gsl_errno, reason, file, line, emessage);
34
+ }
35
+
36
+ static void rb_gsl_my_error_handler(const char *reason, const char *file,
37
+ int line, int gsl_errno)
38
+ {
39
+ VALUE vreason, vfile;
40
+ VALUE vline, verrno;
41
+ VALUE result;
42
+ vreason = rb_str_new2(reason);
43
+ vfile = rb_str_new2(file);
44
+ vline = INT2FIX(line);
45
+ verrno = INT2FIX(gsl_errno);
46
+ result = rb_funcall(eHandler, RBGSL_ID_call, 4, vreason, vfile, vline, verrno);
47
+ }
48
+
49
+ static VALUE rb_gsl_set_error_handler(int argc, VALUE *argv, VALUE module)
50
+ {
51
+ if (rb_block_given_p()) {
52
+ eHandler = RB_GSL_MAKE_PROC;
53
+ gsl_set_error_handler(&rb_gsl_my_error_handler);
54
+ return Qtrue;
55
+ }
56
+ switch (argc) {
57
+ case 0:
58
+ gsl_set_error_handler(&rb_gsl_error_handler);
59
+ return Qtrue;
60
+ break;
61
+ case 1:
62
+ CHECK_PROC(argv[0]);
63
+ eHandler = argv[0];
64
+ gsl_set_error_handler(&rb_gsl_my_error_handler);
65
+ return Qtrue;
66
+ break;
67
+ default:
68
+ rb_raise(rb_eArgError, "too many arguments (%d for 0 or 1 Proc)", argc);
69
+ break;
70
+ }
71
+ }
72
+
73
+ static VALUE rb_gsl_set_default_error_handler(VALUE module)
74
+ {
75
+ gsl_set_error_handler(&rb_gsl_error_handler);
76
+ return Qtrue;
77
+ }
78
+
79
+ static void rb_gsl_define_exceptions(VALUE module)
80
+ {
81
+ VALUE mgsl_error;
82
+ mgsl_error = rb_define_module_under(module, "ERROR");
83
+ pgsl_error = &cgsl_error[2];
84
+ pgsl_error[-2] = rb_define_class_under(mgsl_error, "CONTINUE", rb_cFixnum);
85
+ pgsl_error[-1] = rb_define_class_under(mgsl_error, "FAILURE", rb_eRuntimeError);
86
+ pgsl_error[0] = rb_define_class_under(mgsl_error, "SUCCESS", rb_cFixnum);
87
+ pgsl_error[1] = rb_define_class_under(mgsl_error, "EDOM", rb_eRangeError);
88
+ pgsl_error[2] = rb_define_class_under(mgsl_error, "ERANGE", rb_eRangeError);
89
+ pgsl_error[3] = rb_define_class_under(mgsl_error, "EFAULT", rb_eRuntimeError);
90
+ pgsl_error[4] = rb_define_class_under(mgsl_error, "EINVAL", rb_eIndexError);
91
+ pgsl_error[5] = rb_define_class_under(mgsl_error, "EFAILED", rb_eRuntimeError);
92
+ pgsl_error[6] = rb_define_class_under(mgsl_error, "EFACTOR", rb_eRuntimeError);
93
+ pgsl_error[7] = rb_define_class_under(mgsl_error, "ESANITY", rb_eRuntimeError);
94
+ pgsl_error[8] = rb_define_class_under(mgsl_error, "ENOMEM", rb_eNoMemError);
95
+ pgsl_error[9] = rb_define_class_under(mgsl_error, "EBADFUNC", rb_eRuntimeError);
96
+ pgsl_error[10] = rb_define_class_under(mgsl_error, "ERUNAWAY", rb_eRuntimeError);
97
+ pgsl_error[11] = rb_define_class_under(mgsl_error, "EMAXITER", rb_eRuntimeError);
98
+ pgsl_error[12] = rb_define_class_under(mgsl_error, "EZERODIV", rb_eZeroDivError);
99
+ pgsl_error[13] = rb_define_class_under(mgsl_error, "EBADTOL", rb_eRuntimeError);
100
+ pgsl_error[14] = rb_define_class_under(mgsl_error, "ETOL", rb_eRuntimeError);
101
+ pgsl_error[15] = rb_define_class_under(mgsl_error, "EUNDRFLW", rb_eRangeError);
102
+ pgsl_error[16] = rb_define_class_under(mgsl_error, "EOVRFLW", rb_eRangeError);
103
+ pgsl_error[17] = rb_define_class_under(mgsl_error, "ELOSS", rb_eRuntimeError);
104
+ pgsl_error[18] = rb_define_class_under(mgsl_error, "EROUND", rb_eRuntimeError);
105
+ pgsl_error[19] = rb_define_class_under(mgsl_error, "EBADLEN", rb_eIndexError);
106
+ pgsl_error[20] = rb_define_class_under(mgsl_error, "ENOTSQR", rb_eRuntimeError);
107
+ pgsl_error[21] = rb_define_class_under(mgsl_error, "ESING", rb_eRuntimeError);
108
+ pgsl_error[22] = rb_define_class_under(mgsl_error, "EDIVERGE", rb_eRuntimeError);
109
+ pgsl_error[23] = rb_define_class_under(mgsl_error, "EUNSUP", rb_eRuntimeError);
110
+ pgsl_error[24] = rb_define_class_under(mgsl_error, "EUNIMPL", rb_eNotImpError);
111
+ pgsl_error[25] = rb_define_class_under(mgsl_error, "ECACHE", rb_eRuntimeError);
112
+ pgsl_error[26] = rb_define_class_under(mgsl_error, "ETABLE", rb_eRuntimeError);
113
+ pgsl_error[27] = rb_define_class_under(mgsl_error, "ENOPROG", rb_eRuntimeError);
114
+ pgsl_error[28] = rb_define_class_under(mgsl_error, "ENOPROGJ", rb_eRuntimeError);
115
+ pgsl_error[29] = rb_define_class_under(mgsl_error, "ETOLF", rb_eRuntimeError);
116
+ pgsl_error[30] = rb_define_class_under(mgsl_error, "ETOLX", rb_eRuntimeError);
117
+ pgsl_error[31] = rb_define_class_under(mgsl_error, "ETOLG", rb_eRuntimeError);
118
+ pgsl_error[32] = rb_define_class_under(mgsl_error, "EOF", rb_eEOFError);
119
+ }
120
+
121
+ static void Init_rb_gsl_define_GSL_CONST(VALUE module)
122
+ {
123
+ rb_define_const(module, "SUCCESS", INT2FIX(GSL_SUCCESS));
124
+ rb_define_const(module, "FAILURE", INT2FIX(GSL_FAILURE));
125
+ rb_define_const(module, "CONTINUE", INT2FIX(GSL_CONTINUE));
126
+ rb_define_const(module, "EDOM", INT2FIX(GSL_EDOM));
127
+ rb_define_const(module, "ERANGE", INT2FIX(GSL_ERANGE));
128
+ rb_define_const(module, "EFAULT", INT2FIX(GSL_EFAULT));
129
+ rb_define_const(module, "EINVAL", INT2FIX(GSL_EINVAL));
130
+ rb_define_const(module, "EFAILED", INT2FIX(GSL_EFAILED));
131
+ rb_define_const(module, "EFACTOR", INT2FIX(GSL_EFACTOR));
132
+ rb_define_const(module, "ESANITY", INT2FIX(GSL_ESANITY));
133
+ rb_define_const(module, "ENOMEM", INT2FIX(GSL_ENOMEM));
134
+ rb_define_const(module, "EBADFUNC", INT2FIX(GSL_EBADFUNC));
135
+ rb_define_const(module, "ERUNAWAY", INT2FIX(GSL_ERUNAWAY));
136
+ rb_define_const(module, "EMAXITER", INT2FIX(GSL_EMAXITER));
137
+ rb_define_const(module, "EZERODIV", INT2FIX(GSL_EZERODIV));
138
+ rb_define_const(module, "EBADTOL", INT2FIX(GSL_EBADTOL));
139
+ rb_define_const(module, "ETOL", INT2FIX(GSL_ETOL));
140
+ rb_define_const(module, "EUNDRFLW", INT2FIX(GSL_EUNDRFLW));
141
+ rb_define_const(module, "EOVRFLW", INT2FIX(GSL_EOVRFLW));
142
+ rb_define_const(module, "ELOSS", INT2FIX(GSL_ELOSS));
143
+ rb_define_const(module, "EROUND", INT2FIX(GSL_EROUND));
144
+ rb_define_const(module, "EBADLEN", INT2FIX(GSL_EBADLEN));
145
+ rb_define_const(module, "ENOTSQR", INT2FIX(GSL_ENOTSQR));
146
+ rb_define_const(module, "ESING", INT2FIX(GSL_ESING));
147
+ rb_define_const(module, "EDIVERGE", INT2FIX(GSL_EDIVERGE));
148
+ rb_define_const(module, "EUNSUP", INT2FIX(GSL_EUNSUP));
149
+ rb_define_const(module, "EUNIMPL", INT2FIX(GSL_EUNIMPL));
150
+ rb_define_const(module, "ECACHE", INT2FIX(GSL_ECACHE));
151
+ rb_define_const(module, "ETABLE", INT2FIX(GSL_ETABLE));
152
+ rb_define_const(module, "ENOPROG", INT2FIX(GSL_ENOPROG));
153
+ rb_define_const(module, "ENOPROGJ", INT2FIX(GSL_ENOPROGJ));
154
+ rb_define_const(module, "ETOLF", INT2FIX(GSL_ETOLF));
155
+ rb_define_const(module, "ETOLX", INT2FIX(GSL_ETOLX));
156
+ rb_define_const(module, "ETOLG", INT2FIX(GSL_ETOLG));
157
+ rb_define_const(module, "EOF", INT2FIX(GSL_EOF));
158
+ }
159
+
160
+ static VALUE rb_gsl_set_error_handler_off(VALUE module)
161
+ {
162
+ gsl_set_error_handler_off();
163
+ return Qtrue;
164
+ }
165
+
166
+ static void define_module_functions(VALUE module);
167
+ static VALUE rb_gsl_strerror(VALUE obj, VALUE errn);
168
+ static void define_module_functions(VALUE module)
169
+ {
170
+ rb_define_module_function(module, "set_error_handler_off",
171
+ rb_gsl_set_error_handler_off, 0);
172
+ rb_define_module_function(module, "strerror",
173
+ rb_gsl_strerror, 1);
174
+ rb_define_module_function(module, "set_error_handler",
175
+ rb_gsl_set_error_handler, -1);
176
+ rb_define_module_function(module, "set_default_error_handler",
177
+ rb_gsl_set_default_error_handler, 0);
178
+ }
179
+
180
+ static VALUE rb_gsl_strerror(VALUE obj, VALUE errn)
181
+ {
182
+ int gsl_errno = FIX2INT(errn);
183
+ return rb_str_new2(gsl_strerror(gsl_errno));
184
+ }
185
+
186
+ void Init_gsl_error(VALUE module)
187
+ {
188
+ Init_rb_gsl_define_GSL_CONST(module);
189
+
190
+ gsl_set_error_handler(&rb_gsl_error_handler);
191
+
192
+ define_module_functions(module);
193
+ rb_gsl_define_exceptions(module);
194
+ }
@@ -0,0 +1,281 @@
1
+ require 'mkmf'
2
+
3
+
4
+ module GSL
5
+ class Version
6
+ def initialize(str)
7
+ @str = str
8
+ @ary = str.split(".").collect { |elm| elm.to_i }
9
+ end
10
+ def to_s; @str; end
11
+ def inspect; @str; end
12
+ def >=(ver)
13
+ ary2 = ver.split(".").collect { |elm| elm.to_i }
14
+ if @ary[0] > ary2[0]; return true; end
15
+ if @ary[0] < ary2[0]; return false; end
16
+ if @ary[1] > ary2[1]; return true; end
17
+ if @ary[1] < ary2[1]; return false; end
18
+ if @ary.size < ary2.size; return false; end
19
+ if @ary.size == 3 and ary2.size == 3
20
+ if @ary[2] < ary2[2]; return false; end
21
+ end
22
+ return true
23
+ end
24
+ def <(ver)
25
+ ary2 = ver.split(".").collect { |elm| elm.to_i }
26
+ if @ary[0] >= ary2[0]; return false; end
27
+ if @ary[0] >= ary2[0]; return false; end
28
+ return true
29
+ end
30
+ end
31
+ end
32
+
33
+ if /mingw/ =~ RUBY_PLATFORM
34
+ GSL_CONFIG = "sh gsl-config"
35
+ else
36
+ GSL_CONFIG = "gsl-config"
37
+ end
38
+
39
+ def gsl_config()
40
+ print("checking gsl cflags... ")
41
+ IO.popen("#{GSL_CONFIG} --cflags") do |f|
42
+ cflags = f.gets.chomp
43
+ puts(cflags)
44
+ $CFLAGS += " " + cflags
45
+ end
46
+
47
+ IO.popen("#{GSL_CONFIG} --libs") do |f|
48
+ libs = f.gets.chomp
49
+ dir_config("cblas")
50
+ dir_config("atlas")
51
+ if have_library("cblas") and have_library("atlas")
52
+ libs.gsub!("-lgslcblas", "-lcblas -latlas")
53
+ $LOCAL_LIBS += " " + libs.gsub(" -lgslcblas", "")
54
+ print("checking gsl libs... ")
55
+ puts(libs)
56
+ else
57
+ print("checking gsl libs... ")
58
+ puts(libs)
59
+ $LOCAL_LIBS += " " + libs
60
+ end
61
+ end
62
+
63
+ end
64
+
65
+ def check_version(configfile)
66
+
67
+ print("checking gsl version... ")
68
+ IO.popen("#{GSL_CONFIG} --version") do |f|
69
+ ver = GSL::Version.new(f.gets.chomp)
70
+ puts(ver)
71
+ configfile.printf("#ifndef GSL_VERSION\n#define GSL_VERSION \"#{ver}\"\n#endif\n")
72
+
73
+ if ver >= "0.9.4"
74
+ configfile.printf("#ifndef GSL_0_9_4_LATER\n#define GSL_0_9_4_LATER\n#endif\n")
75
+ else
76
+ configfile.close
77
+ raise("Ruby/GSL requires gsl-0.9.4 or later.")
78
+ end
79
+ if ver >= "1.0"
80
+ configfile.printf("#ifndef GSL_1_0_LATER\n#define GSL_1_0_LATER\n#endif\n")
81
+ end
82
+ if ver >= "1.1"
83
+ configfile.printf("#ifndef GSL_1_1_LATER\n#define GSL_1_1_LATER\n#endif\n")
84
+ end
85
+ if ver >= "1.1.1"
86
+ configfile.printf("#ifndef GSL_1_1_1_LATER\n#define GSL_1_1_1_LATER\n#endif\n")
87
+ end
88
+ if ver >= "1.2"
89
+ configfile.printf("#ifndef GSL_1_2_LATER\n#define GSL_1_2_LATER\n#endif\n")
90
+ end
91
+ if ver >= "1.3"
92
+ configfile.printf("#ifndef GSL_1_3_LATER\n#define GSL_1_3_LATER\n#endif\n")
93
+ end
94
+ if ver >= "1.4"
95
+ configfile.printf("#ifndef GSL_1_4_LATER\n#define GSL_1_4_LATER\n#endif\n")
96
+ end
97
+ if ver >= "1.4.90"
98
+ configfile.printf("#ifndef GSL_1_4_9_LATER\n#define GSL_1_4_9_LATER\n#endif\n")
99
+ end
100
+
101
+ if ver >= "1.5.90"
102
+ configfile.printf("#ifndef GSL_1_6_LATER\n#define GSL_1_6_LATER\n#endif\n")
103
+ end
104
+
105
+ if ver >= "1.7.90"
106
+ configfile.printf("#ifndef GSL_1_8_LATER\n#define GSL_1_8_LATER\n#endif\n")
107
+ end
108
+ if ver >= "1.8.90"
109
+ configfile.printf("#ifndef GSL_1_9_LATER\n#define GSL_1_9_LATER\n#endif\n")
110
+ end
111
+
112
+ if ver >= "1.9.90"
113
+ configfile.printf("#ifndef GSL_1_10_LATER\n#define GSL_1_10_LATER\n#endif\n")
114
+ end
115
+ if ver < "1.4"
116
+ configfile.printf("#ifndef GSL_CONST_OLD\n#define GSL_CONST_OLD\n#endif\n")
117
+ end
118
+
119
+ if ver >= "1.11"
120
+ configfile.printf("#ifndef GSL_1_11_LATER\n#define GSL_1_11_LATER\n#endif\n")
121
+ end
122
+
123
+ if ver >= "1.12.90"
124
+ configfile.printf("#ifndef GSL_1_13_LATER\n#define GSL_1_13_LATER\n#endif\n")
125
+ end
126
+ end
127
+ end
128
+
129
+ #####
130
+
131
+ $CFLAGS = " -Wall -I../include "
132
+
133
+ begin
134
+ RB_GSL_CONFIG = File.open("../include/rb_gsl_config.h", "w")
135
+ RB_GSL_CONFIG.printf("#ifndef ___RB_GSL_CONFIG_H___\n")
136
+ RB_GSL_CONFIG.printf("#define ___RB_GSL_CONFIG_H___\n\n")
137
+
138
+ check_version(RB_GSL_CONFIG)
139
+
140
+ gsl_config()
141
+
142
+ have_func("round")
143
+
144
+ # Check GSL extensions
145
+
146
+ if have_header("rngextra/rngextra.h")
147
+ have_library("rngextra")
148
+ end
149
+
150
+ if have_header("qrngextra/qrngextra.h")
151
+ have_library("qrngextra")
152
+ end
153
+
154
+ if have_header("ool/ool_version.h")
155
+ have_library("ool")
156
+ end
157
+
158
+ if have_header("tensor/tensor.h")
159
+ have_library("tensor")
160
+ end
161
+
162
+ if have_header("jacobi.h")
163
+ have_library("jacobi")
164
+ end
165
+ if have_header("gsl/gsl_cqp.h")
166
+ have_library("cqp")
167
+ end
168
+ if have_header("gsl/gsl_multimin_fsdf.h")
169
+ have_library("bundle_method")
170
+ end
171
+
172
+ if have_library("gsl", "gsl_poly_solve_quartic")
173
+ RB_GSL_CONFIG.printf("#ifndef HAVE_POLY_SOLVE_QUARTIC\n#define HAVE_POLY_SOLVE_QUARTIC\n#endif\n")
174
+ end
175
+ if have_library("gsl", "gsl_eigen_francis")
176
+ RB_GSL_CONFIG.printf("#ifndef HAVE_EIGEN_FRANCIS\n#define HAVE_EIGEN_FRANCIS\n#endif\n")
177
+ end
178
+
179
+ if have_header("ndlinear/gsl_multifit_ndlinear.h")
180
+ have_library("ndlinear")
181
+ end
182
+
183
+ # Added 2009/Apr/20
184
+ if have_header("alf/alf.h")
185
+ have_library("alf")
186
+ end
187
+
188
+ begin
189
+ print("checking rb-gsl version...")
190
+ IO.popen("cat ../VERSION") do |f|
191
+ ver = GSL::Version.new(f.gets.chomp)
192
+ puts(ver)
193
+ RB_GSL_CONFIG.printf("#ifndef RUBY_GSL_VERSION\n#define RUBY_GSL_VERSION \"#{ver}\"\n#endif\n")
194
+ end
195
+ end
196
+
197
+ RUBY_VERSION2 = GSL::Version.new(RUBY_VERSION)
198
+
199
+ puts("checking ruby version... #{RUBY_VERSION2}")
200
+ if RUBY_VERSION2 >= "1.8"
201
+ RB_GSL_CONFIG.printf("#ifndef RUBY_1_8_LATER\n#define RUBY_1_8_LATER\n#endif\n")
202
+
203
+ if find_executable("graph")
204
+ RB_GSL_CONFIG.printf("#ifndef HAVE_GNU_GRAPH\n#define HAVE_GNU_GRAPH\n#endif\n")
205
+ end
206
+ else
207
+ path = (path || ENV['PATH']).split(File::PATH_SEPARATOR)
208
+ flag = 0
209
+ print("checking for GNU graph... ")
210
+ path.each do |dir|
211
+ if File.executable?(file = File.join(dir, "graph"))
212
+ puts("yes")
213
+ RB_GSL_CONFIG.printf("#ifndef HAVE_GNU_GRAPH\n#define HAVE_GNU_GRAPH\n#endif\n")
214
+ flag = 1
215
+ break
216
+ end
217
+ end
218
+ puts("no") if flag == 0
219
+ end
220
+ if RUBY_VERSION2 >= "1.9"
221
+ RB_GSL_CONFIG.printf("#ifndef RUBY_1_9_LATER\n#define RUBY_1_9_LATER\n#endif\n")
222
+ end
223
+
224
+ RB_GSL_CONFIG.printf("\n#endif\n")
225
+ RB_GSL_CONFIG.close
226
+
227
+ rescue
228
+ raise("Check GSL>=0.9.4 is installed, and the command \"gsl-config\" is in search path.")
229
+ end
230
+
231
+ #narray_config = dir_config("narray")
232
+ narray_config = dir_config('narray',$sitearchdir,$sitearchdir)
233
+ # Try to find narray with RubyGems
234
+ begin
235
+ require 'rubygems'
236
+ na_gemspec=Gem.searcher.find('narray.h')
237
+ if na_gemspec
238
+ narray_config = File.join(na_gemspec.full_gem_path, na_gemspec.require_path)
239
+ $CPPFLAGS = " -I#{narray_config} "+$CPPFLAGS
240
+ end
241
+ rescue LoadError
242
+ end
243
+ have_narray_h = have_header("narray.h")
244
+ if narray_config
245
+ if RUBY_PLATFORM =~ /cygwin|mingw/
246
+ # have_library("narray") || raise("ERROR: narray import library is not found")
247
+ have_library("narray")
248
+ end
249
+ end
250
+
251
+ tamu_anova_config = dir_config('tamu_anova',$sitearchdir,$sitearchdir)
252
+ have_tamu_anova_h = have_header("tamu_anova/tamu_anova.h")
253
+ if tamu_anova_config
254
+ have_library("tamuanova")
255
+ # if RUBY_PLATFORM =~ /cygwin|mingw/
256
+ # have_library("tamuanova") || raise("ERROR: tamu_anova import library is not found")
257
+ # end
258
+ end
259
+
260
+ File.open("../lib/gsl.rb", "w") do |file|
261
+ if have_narray_h
262
+ file.print("require('narray')\n")
263
+ end
264
+ # file.print("require('rb_gsl')\ninclude GSL\n")
265
+ file.print("require('rb_gsl')\n")
266
+ file.print("require('gsl/oper.rb')\n")
267
+ end
268
+
269
+ File.open("../lib/rbgsl.rb", "w") do |file|
270
+ if have_narray_h
271
+ file.print("require('narray')\n")
272
+ end
273
+ file.print("require('rb_gsl')\n")
274
+ file.print("require('gsl/oper.rb')\n")
275
+ end
276
+
277
+ srcs = Dir.glob("*.c") - ["vector_source.c", "matrix_source.c", "tensor_source.c", "poly_source.c", "block_source.c"]
278
+
279
+ $objs = srcs.collect { |f| f.sub(".c", ".o") }
280
+
281
+ create_makefile("rb_gsl")