gecoder 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CHANGES +6 -0
  2. data/README +1 -1
  3. data/THANKS +18 -0
  4. data/example/equation_system.rb +3 -1
  5. data/example/magic_sequence.rb +3 -1
  6. data/example/queens.rb +3 -1
  7. data/example/send_more_money.rb +24 -30
  8. data/example/send_most_money.rb +15 -26
  9. data/example/square_tiling.rb +3 -1
  10. data/example/sudoku-set.rb +3 -1
  11. data/lib/gecoder/bindings.rb +7 -5
  12. data/lib/gecoder/bindings/bindings.rb +8 -8
  13. data/lib/gecoder/interface.rb +4 -2
  14. data/lib/gecoder/interface/binding_changes.rb +1 -1
  15. data/lib/gecoder/interface/branch.rb +1 -1
  16. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +4 -4
  17. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +2 -2
  18. data/lib/gecoder/interface/constraints/extensional_regexp.rb +1 -1
  19. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +2 -2
  20. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +5 -5
  21. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +4 -4
  22. data/lib/gecoder/interface/constraints/int_var_constraints.rb +2 -2
  23. data/lib/gecoder/interface/constraints/selected_set/select.rb +8 -8
  24. data/lib/gecoder/interface/constraints/set_enum/{select.rb → element.rb} +10 -10
  25. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +5 -5
  26. data/lib/gecoder/interface/constraints/set_var_constraints.rb +2 -2
  27. data/lib/gecoder/interface/{model_sugar.rb → convenience.rb} +19 -4
  28. data/lib/gecoder/interface/enum_wrapper.rb +1 -1
  29. data/lib/gecoder/interface/{model.rb → mixin.rb} +93 -60
  30. data/lib/gecoder/interface/search.rb +23 -22
  31. data/lib/gecoder/version.rb +1 -1
  32. data/specs/branch.rb +5 -3
  33. data/specs/constraints/bool/boolean.rb +3 -1
  34. data/specs/constraints/bool/linear.rb +3 -1
  35. data/specs/constraints/bool_enum/bool_enum_relation.rb +3 -1
  36. data/specs/constraints/bool_enum/channel.rb +3 -1
  37. data/specs/constraints/fixnum_enum/element.rb +3 -1
  38. data/specs/constraints/int/arithmetic.rb +3 -1
  39. data/specs/constraints/int/channel.rb +3 -1
  40. data/specs/constraints/int/linear.rb +3 -1
  41. data/specs/constraints/int/linear_properties.rb +3 -1
  42. data/specs/constraints/int_enum/arithmetic.rb +3 -1
  43. data/specs/constraints/int_enum/channel.rb +3 -1
  44. data/specs/constraints/int_enum/count.rb +3 -1
  45. data/specs/constraints/int_enum/distinct.rb +3 -1
  46. data/specs/constraints/int_enum/element.rb +3 -1
  47. data/specs/constraints/int_enum/sort.rb +3 -1
  48. data/specs/constraints/property_helper.rb +10 -10
  49. data/specs/constraints/reification_sugar.rb +3 -1
  50. data/specs/constraints/selected_set/select.rb +6 -5
  51. data/specs/constraints/selected_set/select_properties.rb +12 -10
  52. data/specs/constraints/set/channel.rb +3 -1
  53. data/specs/constraints/set/domain.rb +4 -4
  54. data/specs/constraints/set/relation.rb +4 -4
  55. data/specs/constraints/set_enum/channel.rb +3 -1
  56. data/specs/constraints/set_enum/distinct.rb +3 -1
  57. data/specs/constraints/set_enum/{select.rb → element.rb} +13 -9
  58. data/specs/enum_wrapper.rb +1 -1
  59. data/specs/mixin.rb +78 -0
  60. data/specs/model.rb +5 -5
  61. data/specs/search.rb +20 -14
  62. data/specs/selected_set.rb +3 -3
  63. data/specs/set_elements.rb +2 -2
  64. data/tasks/distribution.rake +25 -4
  65. metadata +15 -12
  66. data/example/money.rb +0 -36
@@ -1,6 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/../constraint_helper'
2
2
 
3
- class SetChannelSampleProblem < Gecode::Model
3
+ class SetChannelSampleProblem
4
+ include Gecode::Mixin
5
+
4
6
  attr :bool_enum
5
7
  attr :set
6
8
 
@@ -79,8 +79,8 @@ Gecode::Util::SET_RELATION_TYPES.each_pair do |relation, type|
79
79
  (@set.value.to_a - @non_range).should be_empty
80
80
  when :complement
81
81
  val = @set.value
82
- val.min.should == Gecode::Model::SET_MIN_INT
83
- val.max.should == Gecode::Model::SET_MAX_INT
82
+ val.min.should == Gecode::Mixin::SET_MIN_INT
83
+ val.max.should == Gecode::Mixin::SET_MAX_INT
84
84
  @non_range.each do |element|
85
85
  @set.not_in_upper_bound?(element).should be_true
86
86
  end
@@ -100,8 +100,8 @@ Gecode::Util::SET_RELATION_TYPES.each_pair do |relation, type|
100
100
  (@set.value.to_a - @non_range).should_not be_empty
101
101
  when :complement
102
102
  val = @set.value
103
- ((val.min != Gecode::Model::SET_MIN_INT) ||
104
- (val.max != Gecode::Model::SET_MAX_INT) ||
103
+ ((val.min != Gecode::Mixin::SET_MIN_INT) ||
104
+ (val.max != Gecode::Mixin::SET_MAX_INT) ||
105
105
  @non_range.any?{ |element| @set.in_lower_bound?(element) }
106
106
  ).should be_true
107
107
  when :disjoint
@@ -41,8 +41,8 @@ Gecode::Util::SET_RELATION_TYPES.each_pair do |relation, type|
41
41
  (@set.value.to_a - @set2.value.to_a).should be_empty
42
42
  when :complement
43
43
  val = @set.value
44
- val.min.should == Gecode::Model::SET_MIN_INT
45
- val.max.should == Gecode::Model::SET_MAX_INT
44
+ val.min.should == Gecode::Mixin::SET_MIN_INT
45
+ val.max.should == Gecode::Mixin::SET_MAX_INT
46
46
  @set2.value.each do |element|
47
47
  @set.not_in_upper_bound?(element).should be_true
48
48
  end
@@ -63,8 +63,8 @@ Gecode::Util::SET_RELATION_TYPES.each_pair do |relation, type|
63
63
  (@set.value.to_a - @set2.value.to_a).should_not be_empty
64
64
  when :complement
65
65
  val = @set.value
66
- ((val.min != Gecode::Model::SET_MIN_INT) ||
67
- (val.max != Gecode::Model::SET_MAX_INT) ||
66
+ ((val.min != Gecode::Mixin::SET_MIN_INT) ||
67
+ (val.max != Gecode::Mixin::SET_MAX_INT) ||
68
68
  @set.value.to_a.any?{ |element| @set.in_lower_bound?(element) }
69
69
  ).should be_true
70
70
  when :disjoint
@@ -1,6 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/../constraint_helper'
2
2
 
3
- class ChannelSampleProblem < Gecode::Model
3
+ class ChannelSampleProblem
4
+ include Gecode::Mixin
5
+
4
6
  attr :elements
5
7
  attr :positions
6
8
  attr :sets
@@ -1,6 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/../constraint_helper'
2
2
 
3
- class SetEnumDistinctSampleProblem < Gecode::Model
3
+ class SetEnumDistinctSampleProblem
4
+ include Gecode::Mixin
5
+
4
6
  attr :vars
5
7
  attr :sets
6
8
 
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/../property_helper'
2
2
 
3
- class SelectionSampleProblem < Gecode::Model
3
+ class SetElementSampleProblem < Gecode::Model
4
4
  attr :sets
5
5
  attr :set
6
6
  attr :target
@@ -18,17 +18,17 @@ end
18
18
 
19
19
  # Requires everything that composite behaviour spec requires in addition to
20
20
  # @stub and @expect_constrain_equal .
21
- describe 'selection constraint', :shared => true do
21
+ describe 'element constraint', :shared => true do
22
22
  it 'should not disturb normal array access' do
23
23
  @sets[0].should be_kind_of(Gecode::SetVar)
24
24
  end
25
25
  end
26
26
 
27
- describe Gecode::SetEnum::Select, ' (int operand)' do
27
+ describe Gecode::SetEnum::Element, ' (int operand)' do
28
28
  include GecodeR::Specs::SetHelper
29
29
 
30
30
  before do
31
- @model = SelectionSampleProblem.new
31
+ @model = SetElementSampleProblem.new
32
32
  @sets = @model.sets
33
33
  @target = @set = @model.target
34
34
  @index = @model.index
@@ -43,26 +43,30 @@ describe Gecode::SetEnum::Select, ' (int operand)' do
43
43
  @constraint_class = Gecode::BlockConstraint
44
44
  end
45
45
 
46
+ it 'should not disturb normal array access' do
47
+ @sets[0].respond_to?(:to_set_var).should be_true
48
+ end
49
+
46
50
  it 'should constrain the specified element of an enum of sets' do
47
51
  @sets[@index].must_be.superset_of([5,7,9])
48
52
  @model.solve!
49
53
  @sets[@index.value].value.should include(5,7,9)
50
54
  end
51
55
 
52
- it 'should translate into a select constraint' do
53
- Gecode::Raw.should_receive(:selectSet)
56
+ it 'should translate into a element constraint' do
57
+ Gecode::Raw.should_receive(:element)
54
58
  @sets[@index].must_be.superset_of([5,7,9])
55
59
  @model.solve!
56
60
  end
57
61
 
58
- it_should_behave_like 'selection constraint'
62
+ it_should_behave_like 'element constraint'
59
63
  it_should_behave_like(
60
64
  'property that produces set operand by short circuiting equality')
61
65
  end
62
66
 
63
- describe Gecode::SetEnum::Select, ' (set operand)' do
67
+ describe Gecode::SetEnum::Element, ' (set operand)' do
64
68
  before do
65
- @model = SelectionSampleProblem.new
69
+ @model = SetElementSampleProblem.new
66
70
  @sets = @model.sets
67
71
  @set = @model.set
68
72
  end
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- describe Gecode::Model, ' (enum wrapping)' do
3
+ describe Gecode::Mixin, ' (enum wrapping)' do
4
4
  before do
5
5
  @model = Gecode::Model.new
6
6
  @bool = @model.bool_var
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ class MixinSampleProblem
4
+ include Gecode::Mixin
5
+
6
+ def initialize
7
+ x, y, z = vars_is_an int_var_array(3, 0..9)
8
+
9
+ (x + y).must == z
10
+ x.must == y - 3
11
+ vars.must_be.distinct
12
+
13
+ branch_on vars
14
+ end
15
+ end
16
+
17
+ class ClassWithMethodMissingLast
18
+ include Gecode::Mixin
19
+
20
+ def method_missing(*args)
21
+ return :foo
22
+ end
23
+ end
24
+
25
+ class ClassWithMethodMissingFirst
26
+ def method_missing(*args)
27
+ return :foo
28
+ end
29
+
30
+ include Gecode::Mixin
31
+ end
32
+
33
+ describe Gecode::Mixin, ' (mixed into a class)' do
34
+ before do
35
+ @mix = Object.new
36
+ class <<@mix
37
+ include Gecode::Mixin
38
+ end
39
+
40
+ @model = Gecode::Model.new
41
+ end
42
+
43
+ it 'should respond to everything that Gecode::Model does' do
44
+ @model.public_methods.sort.each do |method|
45
+ @mix.respond_to?(method).should be_true
46
+ end
47
+ end
48
+
49
+ it 'should solve a sample problem' do
50
+ lambda do
51
+ MixinSampleProblem.new.solve!.vars.values
52
+ end.should_not raise_error
53
+ end
54
+
55
+ it 'should not mess with classes defining method missing' do
56
+ model = ClassWithMethodMissingFirst.new
57
+
58
+ # Should not completely overwrite #method_missing.
59
+ model.does_not_exist.should == :foo
60
+
61
+ # Should still allow *_is_a sugar .
62
+ bool_var = model.bool_var
63
+ bool_var.should_not == :foo
64
+ model.foo_is_a(bool_var).should == bool_var
65
+ end
66
+
67
+ it 'should not mess with classes defining method missing (2)' do
68
+ model = ClassWithMethodMissingLast.new
69
+
70
+ # Should not completely overwrite #method_missing.
71
+ model.does_not_exist.should == :foo
72
+
73
+ # Should still allow *_is_a sugar .
74
+ bool_var = model.bool_var
75
+ bool_var.should_not == :foo
76
+ model.foo_is_a(bool_var).should == bool_var
77
+ end
78
+ end
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- describe Gecode::Model, ' (integer creation)' do
3
+ describe Gecode::Mixin, ' (integer creation)' do
4
4
  before do
5
5
  @model = Gecode::Model.new
6
6
  end
@@ -101,7 +101,7 @@ describe Gecode::Model, ' (integer creation)' do
101
101
  end
102
102
  end
103
103
 
104
- describe Gecode::Model, ' (bool creation)' do
104
+ describe Gecode::Mixin, ' (bool creation)' do
105
105
  before do
106
106
  @model = Gecode::Model.new
107
107
  end
@@ -128,7 +128,7 @@ describe Gecode::Model, ' (bool creation)' do
128
128
  end
129
129
  end
130
130
 
131
- describe Gecode::Model, ' (set creation)' do
131
+ describe Gecode::Mixin, ' (set creation)' do
132
132
  before do
133
133
  @model = Gecode::Model.new
134
134
  @glb_range = 0..3
@@ -249,7 +249,7 @@ describe Gecode::Model, ' (set creation)' do
249
249
  end
250
250
  end
251
251
 
252
- describe Gecode::Model, ' (space access restriction)' do
252
+ describe Gecode::Mixin, ' (space access restriction)' do
253
253
  before do
254
254
  @model = Gecode::Model.new
255
255
  end
@@ -267,7 +267,7 @@ describe Gecode::Model, ' (space access restriction)' do
267
267
  end
268
268
  end
269
269
 
270
- describe Gecode::Model, ' (accessible variable creation)' do
270
+ describe Gecode::Mixin, ' (accessible variable creation)' do
271
271
  before do
272
272
  @model = Class.new(Gecode::Model).new
273
273
  end
@@ -1,7 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
  require 'set'
3
3
 
4
- class SampleProblem < Gecode::Model
4
+ class SampleProblem
5
+ include Gecode::Mixin
6
+
5
7
  attr :var
6
8
  attr :array
7
9
  attr :hash
@@ -19,7 +21,9 @@ class SampleProblem < Gecode::Model
19
21
  end
20
22
  end
21
23
 
22
- class SampleOptimizationProblem < Gecode::Model
24
+ class SampleOptimizationProblem
25
+ include Gecode::Mixin
26
+
23
27
  attr :x
24
28
  attr :y
25
29
  attr :z
@@ -33,7 +37,9 @@ class SampleOptimizationProblem < Gecode::Model
33
37
  end
34
38
  end
35
39
 
36
- class SampleOptimizationProblem2 < Gecode::Model
40
+ class SampleOptimizationProblem2
41
+ include Gecode::Mixin
42
+
37
43
  attr :money
38
44
 
39
45
  def initialize
@@ -53,7 +59,7 @@ class Array
53
59
  end
54
60
  end
55
61
 
56
- describe Gecode::Model, ' (with multiple solutions)' do
62
+ describe Gecode::Mixin, ' (with multiple solutions)' do
57
63
  before do
58
64
  @domain = 0..3
59
65
  @solved_domain = [2]
@@ -103,7 +109,7 @@ describe Gecode::Model, ' (with multiple solutions)' do
103
109
  end
104
110
  end
105
111
 
106
- describe Gecode::Model, ' (after #solve!)' do
112
+ describe Gecode::Mixin, ' (after #solve!)' do
107
113
  before do
108
114
  @domain = 0..3
109
115
  @solved_domain = [2]
@@ -159,7 +165,7 @@ describe 'reset model', :shared => true do
159
165
  end
160
166
  end
161
167
 
162
- describe Gecode::Model, ' (after #reset!)' do
168
+ describe Gecode::Mixin, ' (after #reset!)' do
163
169
  before do
164
170
  @domain = 0..3
165
171
  @reset_domain = 2..3
@@ -171,7 +177,7 @@ describe Gecode::Model, ' (after #reset!)' do
171
177
  it_should_behave_like 'reset model'
172
178
  end
173
179
 
174
- describe Gecode::Model, ' (after #solution)' do
180
+ describe Gecode::Mixin, ' (after #solution)' do
175
181
  before do
176
182
  @domain = 0..3
177
183
  @reset_domain = 2..3
@@ -182,7 +188,7 @@ describe Gecode::Model, ' (after #solution)' do
182
188
  it_should_behave_like 'reset model'
183
189
  end
184
190
 
185
- describe Gecode::Model, ' (after #each_solution)' do
191
+ describe Gecode::Mixin, ' (after #each_solution)' do
186
192
  before do
187
193
  @domain = 0..3
188
194
  @reset_domain = 2..3
@@ -193,7 +199,7 @@ describe Gecode::Model, ' (after #each_solution)' do
193
199
  it_should_behave_like 'reset model'
194
200
  end
195
201
 
196
- describe Gecode::Model, ' (without solution)' do
202
+ describe Gecode::Mixin, ' (without solution)' do
197
203
  before do
198
204
  @domain = 0..3
199
205
  @model = SampleProblem.new(@domain)
@@ -233,7 +239,7 @@ describe Gecode::Model, ' (without solution)' do
233
239
  end
234
240
  end
235
241
 
236
- describe Gecode::Model, ' (without constraints)' do
242
+ describe Gecode::Mixin, ' (without constraints)' do
237
243
  before do
238
244
  @model = Gecode::Model.new
239
245
  @x = @model.int_var(0..1)
@@ -244,7 +250,7 @@ describe Gecode::Model, ' (without constraints)' do
244
250
  end
245
251
  end
246
252
 
247
- describe Gecode::Model, '(optimization search)' do
253
+ describe Gecode::Mixin, '(optimization search)' do
248
254
  it 'should optimize the solution' do
249
255
  solution = SampleOptimizationProblem.new.optimize! do |model, best_so_far|
250
256
  model.z.must > best_so_far.z.value
@@ -266,7 +272,7 @@ describe Gecode::Model, '(optimization search)' do
266
272
 
267
273
  it 'should raise error if no constrain proc has been defined' do
268
274
  lambda do
269
- Gecode::Model.constrain(nil, nil)
275
+ Gecode::Mixin.constrain(nil, nil)
270
276
  end.should raise_error(NotImplementedError)
271
277
  end
272
278
 
@@ -344,7 +350,7 @@ describe 'single variable optimization', :shared => true do
344
350
  end
345
351
  end
346
352
 
347
- describe Gecode::Model, '(single variable minimization)' do
353
+ describe Gecode::Mixin, '(single variable minimization)' do
348
354
  before do
349
355
  @method_name = 'minimize!'
350
356
  @variable_name = 'x'
@@ -363,7 +369,7 @@ describe Gecode::Model, '(single variable minimization)' do
363
369
  it_should_behave_like 'single variable optimization'
364
370
  end
365
371
 
366
- describe Gecode::Model, '(single variable maximization)' do
372
+ describe Gecode::Mixin, '(single variable maximization)' do
367
373
  before do
368
374
  @method_name = 'maximize!'
369
375
  @variable_name = 'z'
@@ -10,7 +10,7 @@ describe Gecode::SelectedSet::SelectedSetOperand do
10
10
  end
11
11
 
12
12
  it 'should implement #model' do
13
- @operand.model.should be_kind_of(Gecode::Model)
13
+ @operand.model.should be_kind_of(Gecode::Mixin)
14
14
  end
15
15
 
16
16
  it 'should implement #to_selected_set' do
@@ -20,12 +20,12 @@ describe Gecode::SelectedSet::SelectedSetOperand do
20
20
  @model.solve!
21
21
  set_var = set.to_set_var
22
22
  ((set_var.lower_bound == []) &&
23
- (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
23
+ (set_var.upper_bound == Gecode::Mixin::LARGEST_SET_BOUND)).should_not(
24
24
  be_true)
25
25
  enum.each do |element|
26
26
  set_var = element.to_set_var
27
27
  ((set_var.lower_bound == []) &&
28
- (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
28
+ (set_var.upper_bound == Gecode::Mixin::LARGEST_SET_BOUND)).should_not(
29
29
  be_true)
30
30
  end
31
31
  end
@@ -8,7 +8,7 @@ describe Gecode::SelectedSet::SelectedSetOperand do
8
8
  end
9
9
 
10
10
  it 'should implement #model' do
11
- @operand.model.should be_kind_of(Gecode::Model)
11
+ @operand.model.should be_kind_of(Gecode::Mixin)
12
12
  end
13
13
 
14
14
  it 'should implement #to_set_elements' do
@@ -17,7 +17,7 @@ describe Gecode::SelectedSet::SelectedSetOperand do
17
17
  @model.solve!
18
18
  set_var = set.to_set_var
19
19
  ((set_var.lower_bound == []) &&
20
- (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
20
+ (set_var.upper_bound == Gecode::Mixin::LARGEST_SET_BOUND)).should_not(
21
21
  be_true)
22
22
  end
23
23
 
@@ -8,6 +8,10 @@ PKG_FILE_NAME_WITH_GECODE = "#{PKG_NAME_WITH_GECODE}-#{PKG_VERSION}"
8
8
  # The location where the precompiled DLL should be placed.
9
9
  DLL_LOCATION = 'lib/gecode.dll'
10
10
  EXT_DIR = 'ext'
11
+ GECODE_DIR = 'vendor/gecode'
12
+ GECODE_NAME = 'gecode-2.2.0'
13
+ GECODE_ARCHIVE_NAME = "#{GECODE_NAME}.tar.gz"
14
+
11
15
 
12
16
  desc 'Generate RDoc'
13
17
  rd = Rake::RDocTask.new do |rdoc|
@@ -16,7 +20,7 @@ rd = Rake::RDocTask.new do |rdoc|
16
20
  rdoc.template = 'doc/rdoc/jamis.rb'
17
21
  rdoc.options << '--line-numbers' << '--inline-source' <<
18
22
  '--accessor' << 'delegate' << '--main' << 'README'
19
- rdoc.rdoc_files.include('README', 'CHANGES', 'LGPL-LICENSE', 'lib/**/*.rb')
23
+ rdoc.rdoc_files.include('README', 'CHANGES', 'THANKS', 'LGPL-LICENSE', 'lib/**/*.rb')
20
24
  end
21
25
 
22
26
  TMP_DIR = 'doc/tmp/rdoc_dev'
@@ -43,6 +47,18 @@ task :prepare_rdoc_dev do
43
47
  end
44
48
  end
45
49
 
50
+ desc 'Extracts the source of Gecode before it is packaged into a gem'
51
+ task :extract_gecode do
52
+ next if File.exist? "#{EXT_DIR}/#{GECODE_NAME}"
53
+ cd(EXT_DIR) do
54
+ cp "../#{GECODE_DIR}/#{GECODE_ARCHIVE_NAME}", GECODE_ARCHIVE_NAME
55
+ system("tar -xvf #{GECODE_ARCHIVE_NAME}")
56
+ rm GECODE_ARCHIVE_NAME
57
+ end
58
+ end
59
+ # To ensure that the Gecode files exist for the gem spec.
60
+ Rake::Task['extract_gecode'].invoke
61
+
46
62
  spec = Gem::Specification.new do |s|
47
63
  s.name = PKG_NAME
48
64
  s.version = GecodeR::VERSION
@@ -67,7 +83,7 @@ spec = Gem::Specification.new do |s|
67
83
  ].to_a
68
84
  s.require_path = 'lib'
69
85
  s.extensions << 'ext/extconf.rb'
70
- s.requirements << 'Gecode 2.1.1'
86
+ s.requirements << 'Gecode 2.2.0'
71
87
 
72
88
  s.has_rdoc = true
73
89
  s.rdoc_options = rd.options
@@ -103,13 +119,13 @@ spec_windows_binary_with_gecode.requirements = []
103
119
  spec_windows_binary_with_gecode.files = spec.files.dup -
104
120
  FileList['ext/**/*'].to_a +
105
121
  FileList['vendor/gecode/win32/lib/*'].to_a << 'lib/gecode.dll'
106
- spec_windows_binary_with_gecode.platform = 'mswin32' #Gem::Platform::WIN32
122
+ spec_windows_binary_with_gecode.platform = 'x86-mswin32-60' #Gem::Platform::WIN32
107
123
 
108
124
  # Create a clone of the gem spec that includes Gecode.
109
125
  spec_with_gecode = spec.dup
110
126
  spec_with_gecode.name = PKG_NAME_WITH_GECODE
111
127
  spec_with_gecode.extensions =
112
- spec_with_gecode.extensions.dup.unshift 'ext/gecode-2.1.1/configure'
128
+ spec_with_gecode.extensions.dup.unshift 'ext/gecode-2.2.0/configure'
113
129
  spec_with_gecode.requirements = []
114
130
  spec_with_gecode.files = spec.files.dup + FileList['ext/gecode-*/**/*'].to_a
115
131
 
@@ -141,6 +157,8 @@ end
141
157
  desc 'Removes generated distribution files'
142
158
  task :clobber do
143
159
  rm DLL_LOCATION if File.exists? DLL_LOCATION
160
+ extracted_gecode = "#{EXT_DIR}/#{GECODE_NAME}"
161
+ rm_r extracted_gecode if File.exists? extracted_gecode
144
162
  FileList[
145
163
  "#{EXT_DIR}/*.o",
146
164
  "#{EXT_DIR}/gecode.{cc,hh}",
@@ -179,6 +197,9 @@ gecode_release_files = [
179
197
  #"pkg/#{PKG_FILE_NAME_WITH_GECODE}.zip",
180
198
  "pkg/#{PKG_FILE_NAME_WITH_GECODE}-x86-mswin32.gem"
181
199
  ]
200
+ gecode_release_files.each do |pkg|
201
+ file pkg => :extract_gecode
202
+ end
182
203
  desc 'Publish Gecode/R with Gecode packages on RubyForge'
183
204
  task :publish_gecoder_with_gecode_packages =>
184
205
  [:verify_user] + gecode_release_files do