summaryrefslogtreecommitdiff
path: root/features/step_definitions/compilation.rb
blob: 020a3d8179c8afeb543a0a00cd7658c8925a38f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Given /^scaffold code for extension '(.*)'$/ do |extension_name|
  setup_scaffold
  setup_task_for extension_name
  setup_source_for extension_name
end

Given /^binary extension '(.*)' do exist in '(.*)'$/ do |extension_name, folder|
  setup_binaries_for extension_name, folder
end

Given /^intermediate files for extension '(.*)' do exist in '(.*)'$/ do |extension_name, folder|
  setup_intermediate_files_for extension_name, folder
end

When /^touching '(.*)' file of extension '(.*)'$/ do |file, extension_name|
  FileUtils.touch "ext/#{extension_name}/#{file}"
end

Then /^binary extension '(.*)' (must|must not) exist in '(.*)'$/ do |extension_name, condition, folder|
  ext_for_platform = File.join(folder, "#{extension_name}.#{RbConfig::CONFIG['DLEXT']}")
  if condition == 'must'
    File.exist?(ext_for_platform).should be_true
  else
    File.exist?(ext_for_platform).should be_false
  end
end

def setup_scaffold
  # create folder structure
  FileUtils.mkdir_p "lib"
  FileUtils.mkdir_p "tasks"
  FileUtils.mkdir_p "tmp"

  # create Rakefile loader
  File.open("Rakefile", 'w') do |rakefile|
    rakefile.puts template_rakefile.strip
  end
end

def setup_task_for(extension_name)
  # create folder structure
  FileUtils.mkdir_p "ext/#{extension_name}"

  # create specific extension rakefile
  File.open("tasks/#{extension_name}.rake", 'w') do |ext_rake|
    ext_rake.puts template_rake_extension(extension_name)
  end
end

def setup_source_for(extension_name)
  # source C file
  File.open("ext/#{extension_name}/source.c", 'w') do |c|
    c.puts template_source_c(extension_name)
  end

  # header H file
  File.open("ext/#{extension_name}/source.h", 'w') do |h|
    h.puts template_source_h
  end

  # extconf.rb file
  File.open("ext/#{extension_name}/extconf.rb", 'w') do |ext|
    ext.puts template_extconf(extension_name)
  end
end

def setup_binaries_for(extension_name, folder)
  ext_for_platform = File.join(folder, "#{extension_name}.#{RbConfig::CONFIG['DLEXT']}")
  FileUtils.touch ext_for_platform
end

def setup_intermediate_files_for(extension_name, folder)
  setup_binaries_for(extension_name, folder)
  FileUtils.touch "#{folder}/Makefile"
  FileUtils.touch "#{folder}/source.#{RbConfig::CONFIG['OBJEXT']}"
end