mini_portile2 2.4.0 → 2.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +1,43 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'mini_portile2/version'
1
+ require_relative "lib/mini_portile2/version"
5
2
 
6
3
  Gem::Specification.new do |spec|
7
- spec.name = "mini_portile2"
8
- spec.version = MiniPortile::VERSION
4
+ spec.name = "mini_portile2"
5
+ spec.version = MiniPortile::VERSION
9
6
 
10
- spec.authors = ['Luis Lavena', 'Mike Dalessio', 'Lars Kanis']
11
- spec.email = 'mike.dalessio@gmail.com'
7
+ spec.authors = ["Luis Lavena", "Mike Dalessio", "Lars Kanis"]
8
+ spec.email = "mike.dalessio@gmail.com"
12
9
 
13
- spec.summary = "Simplistic port-like solution for developers"
14
- spec.description = "Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system."
10
+ spec.summary = "Simple autoconf and cmake builder for developers"
11
+ spec.description = <<~TEXT
12
+ Simple autoconf and cmake builder for developers. It provides a standard way to compile against
13
+ dependency libraries without requiring system-wide installation. It also simplifies
14
+ vendoring and cross-compilation by providing a consistent build interface.
15
+ TEXT
15
16
 
16
- spec.homepage = 'http://github.com/flavorjones/mini_portile'
17
- spec.licenses = ['MIT']
17
+ spec.homepage = "https://github.com/flavorjones/mini_portile"
18
+ spec.licenses = ["MIT"]
18
19
 
19
20
  begin
20
- spec.files = `git ls-files -z`.split("\x0")
21
+ spec.files = `git ls-files -z`.split("\x0")
21
22
  rescue Exception => e
22
23
  warn "WARNING: could not set spec.files: #{e.class}: #{e}"
23
24
  end
24
25
 
25
26
  # omit the `examples` directory from the gem, because it's large and
26
27
  # not necessary to be packaged in the gem.
27
- example_files = spec.files.grep(%r{^examples/})
28
+ example_files = spec.files.grep(%r{^examples/})
28
29
  spec.files -= example_files
29
30
 
30
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
31
- spec.test_files = spec.files.grep(%r{^(test|spec|features|examples)/})
31
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
32
+ spec.test_files = spec.files.grep(%r{^(test|spec|features|examples)/})
32
33
  spec.require_paths = ["lib"]
33
34
 
34
- spec.add_development_dependency "bundler", "~> 1.17"
35
- spec.add_development_dependency "rake", "~> 12.0"
36
- spec.add_development_dependency "minitest", "~> 5.11"
37
- spec.add_development_dependency "minitest-hooks", "~> 1.5.0"
38
- spec.add_development_dependency "minitar", "~> 0.7"
39
- spec.add_development_dependency "concourse", "~> 0.16"
35
+ spec.required_ruby_version = ">= 2.3.0"
40
36
 
41
- spec.required_ruby_version = ">= 1.9.2"
37
+ spec.add_development_dependency "bundler", "~> 2.2"
38
+ spec.add_development_dependency "minitar", "~> 0.9"
39
+ spec.add_development_dependency "minitest", "~> 5.15"
40
+ spec.add_development_dependency "minitest-hooks", "~> 1.5"
41
+ spec.add_development_dependency "rake", "~> 13.0"
42
+ spec.add_development_dependency "webrick", "~> 1.7"
42
43
  end
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxml2/2.11.5
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxml2/2.11.5/lib
4
+ includedir=${prefix}/include
5
+ modules=1
6
+
7
+ Name: libXML
8
+ Version: 2.11.5
9
+ Description: libXML library version2.
10
+ Requires:
11
+ Libs: -L${libdir} -lxml2
12
+ Libs.private: -L/foo/zlib/1.3/lib -lz -lm
13
+ Cflags: -I${includedir}/libxml2 -ggdb3
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxslt/1.1.38
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxslt/1.1.38/lib
4
+ includedir=${prefix}/include
5
+
6
+
7
+ Name: libexslt
8
+ Version: 0.8.21
9
+ Description: EXSLT Extension library
10
+ Requires: libxml-2.0, libxslt
11
+ Cflags: -I${includedir}
12
+ Libs: -L${libdir} -lexslt
13
+ Libs.private: -lm
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxslt/1.1.38
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxslt/1.1.38/lib
4
+ includedir=${prefix}/include
5
+
6
+
7
+ Name: libxslt
8
+ Version: 1.1.38
9
+ Description: XSLT library version 2.
10
+ Requires: libxml-2.0
11
+ Cflags: -I${includedir} -Wno-deprecated-enum-enum-conversion
12
+ Libs: -L${libdir} -lxslt
13
+ Libs.private: -lm
data/test/helper.rb CHANGED
@@ -57,4 +57,20 @@ class TestCase < Minitest::Test
57
57
  ensure
58
58
  ENV['GIT_DIR'] = old
59
59
  end
60
+
61
+ def with_env(env)
62
+ before = ENV.to_h.dup
63
+ env.each { |k, v| ENV[k] = v }
64
+ yield
65
+ ensure
66
+ ENV.replace(before)
67
+ end
68
+
69
+ def without_env(*keys, &blk)
70
+ before = ENV.to_h.dup
71
+ keys.flatten.each { |k| ENV.delete(k) }
72
+ yield
73
+ ensure
74
+ ENV.replace(before)
75
+ end
60
76
  end
@@ -0,0 +1,139 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TestActivate < TestCase
4
+ attr_reader :recipe
5
+
6
+ def setup
7
+ super
8
+
9
+ @save_env = %w[PATH CPATH LIBRARY_PATH LDFLAGS].inject({}) do |env, var|
10
+ env.update(var => ENV[var])
11
+ end
12
+
13
+ FileUtils.rm_rf(["tmp", "ports"]) # remove any previous test files
14
+
15
+ @recipe = MiniPortile.new("foo", "1.0.0").tap do |recipe|
16
+ recipe.logger = StringIO.new
17
+ end
18
+ end
19
+
20
+ def teardown
21
+ FileUtils.rm_rf(["tmp", "ports"]) # remove any previous test files
22
+
23
+ @save_env.each do |var, val|
24
+ ENV[var] = val
25
+ end
26
+
27
+ super
28
+ end
29
+
30
+ def test_PATH_env_var_when_bin_does_not_exist
31
+ ENV["PATH"] = "foo"
32
+ refute(Dir.exist?(bin_path))
33
+ refute_includes(path_elements('PATH'), bin_path)
34
+
35
+ recipe.activate
36
+
37
+ refute_includes(path_elements('PATH'), bin_path)
38
+ end
39
+
40
+ def test_PATH_env_var_when_bin_exists
41
+ ENV["PATH"] = "foo"
42
+ FileUtils.mkdir_p(bin_path)
43
+ refute_includes(path_elements('PATH'), bin_path)
44
+
45
+ recipe.activate
46
+
47
+ assert_includes(path_elements('PATH'), bin_path)
48
+ assert_equal(path_elements('PATH').first, bin_path)
49
+ end
50
+
51
+ def test_CPATH_env_var_when_include_does_not_exist
52
+ ENV["CPATH"] = "foo"
53
+ refute(Dir.exist?(include_path))
54
+ refute_includes(path_elements('CPATH'), include_path)
55
+
56
+ recipe.activate
57
+
58
+ refute_includes(path_elements('CPATH'), include_path)
59
+ end
60
+
61
+ def test_CPATH_env_var_when_include_exists
62
+ ENV["CPATH"] = "foo"
63
+ FileUtils.mkdir_p(include_path)
64
+ refute_includes(path_elements('CPATH'), include_path)
65
+
66
+ recipe.activate
67
+
68
+ assert_includes(path_elements('CPATH'), include_path)
69
+ assert_equal(path_elements('CPATH').first, include_path)
70
+ end
71
+
72
+ def test_LIBRARY_PATH_env_var_when_lib_does_not_exist
73
+ ENV["LIBRARY_PATH"] = "foo"
74
+ refute(Dir.exist?(lib_path))
75
+ refute_includes(path_elements('LIBRARY_PATH'), lib_path)
76
+
77
+ recipe.activate
78
+
79
+ refute_includes(path_elements('LIBRARY_PATH'), lib_path)
80
+ end
81
+
82
+ def test_LIBRARY_PATH_env_var_when_lib_exists
83
+ ENV["LIBRARY_PATH"] = "foo"
84
+ FileUtils.mkdir_p(lib_path)
85
+ refute_includes(path_elements('LIBRARY_PATH'), lib_path)
86
+
87
+ recipe.activate
88
+
89
+ assert_includes(path_elements('LIBRARY_PATH'), lib_path)
90
+ assert_equal(path_elements('LIBRARY_PATH').first, lib_path)
91
+ end
92
+
93
+ def test_LDFLAGS_env_var_when_not_cross_compiling
94
+ ENV["LDFLAGS"] = "-lfoo"
95
+ FileUtils.mkdir_p(lib_path)
96
+ assert_equal(recipe.host, recipe.original_host) # assert on setup)
97
+
98
+ refute_includes(flag_elements('LDFLAGS'), "-L#{lib_path}")
99
+
100
+ recipe.activate
101
+
102
+ refute_includes(flag_elements('LDFLAGS'), "-L#{lib_path}")
103
+ end
104
+
105
+ def test_LDFLAGS_env_var_when_cross_compiling
106
+ ENV["LDFLAGS"] = "-lfoo"
107
+ recipe.host = recipe.original_host + "-x" # make them not-equal
108
+ FileUtils.mkdir_p(lib_path)
109
+
110
+ refute_includes(flag_elements('LDFLAGS'), "-L#{lib_path}")
111
+
112
+ recipe.activate
113
+
114
+ assert_includes(flag_elements('LDFLAGS'), "-L#{lib_path}")
115
+ assert_equal(flag_elements('LDFLAGS').first, "-L#{lib_path}")
116
+ end
117
+
118
+ private
119
+
120
+ def path_elements(varname)
121
+ ENV.fetch(varname, "").split(File::PATH_SEPARATOR)
122
+ end
123
+
124
+ def flag_elements(varname)
125
+ ENV.fetch(varname, "").split
126
+ end
127
+
128
+ def bin_path
129
+ MiniPortile.native_path(File.join(recipe.path, "bin"))
130
+ end
131
+
132
+ def include_path
133
+ MiniPortile.native_path(File.join(recipe.path, "include"))
134
+ end
135
+
136
+ def lib_path
137
+ MiniPortile.native_path(File.join(recipe.path, "lib"))
138
+ end
139
+ end
data/test/test_cmake.rb CHANGED
@@ -5,8 +5,6 @@ class TestCMake < TestCase
5
5
 
6
6
  def before_all
7
7
  super
8
- return if MiniPortile.windows?
9
-
10
8
  @assets_path = File.expand_path("../assets", __FILE__)
11
9
  @tar_path = File.expand_path("../../tmp/test-cmake-1.0.tar.gz", __FILE__)
12
10
 
@@ -16,32 +14,32 @@ class TestCMake < TestCase
16
14
  create_tar(@tar_path, @assets_path, "test-cmake-1.0")
17
15
  start_webrick(File.dirname(@tar_path))
18
16
 
19
- @recipe = MiniPortileCMake.new("test-cmake", "1.0").tap do |recipe|
20
- recipe.files << "http://localhost:#{HTTP_PORT}/#{ERB::Util.url_encode(File.basename(@tar_path))}"
21
- recipe.patch_files << File.join(@assets_path, "patch 1.diff")
22
- recipe.configure_options << "--option=\"path with 'space'\""
23
- git_dir = File.join(@assets_path, "git")
24
- with_custom_git_dir(git_dir) do
25
- recipe.cook
26
- end
17
+ @recipe = init_recipe
18
+
19
+ git_dir = File.join(@assets_path, "git")
20
+ with_custom_git_dir(git_dir) do
21
+ recipe.cook
27
22
  end
28
23
  end
29
24
 
30
25
  def after_all
31
26
  super
32
- return if MiniPortile.windows?
33
-
34
27
  stop_webrick
35
28
  # leave test files for inspection
36
29
  end
37
30
 
31
+ def exe_name
32
+ case
33
+ when MiniPortile.windows? then "hello.exe"
34
+ else "hello"
35
+ end
36
+ end
37
+
38
38
  def test_cmake_inherits_from_base
39
39
  assert(MiniPortileCMake <= MiniPortile)
40
40
  end
41
41
 
42
42
  def test_configure
43
- skip if MiniPortile.windows?
44
-
45
43
  cmakecache = File.join(work_dir, "CMakeCache.txt")
46
44
  assert File.exist?(cmakecache), cmakecache
47
45
 
@@ -49,16 +47,215 @@ class TestCMake < TestCase
49
47
  end
50
48
 
51
49
  def test_compile
52
- skip if MiniPortile.windows?
53
-
54
- binary = File.join(work_dir, "hello")
50
+ binary = File.join(work_dir, exe_name)
55
51
  assert File.exist?(binary), binary
56
52
  end
57
53
 
58
54
  def test_install
59
- skip if MiniPortile.windows?
60
-
61
- binary = File.join(recipe.path, "bin", "hello")
55
+ binary = File.join(recipe.path, "bin", exe_name)
62
56
  assert File.exist?(binary), binary
63
57
  end
58
+
59
+ def init_recipe
60
+ MiniPortileCMake.new("test-cmake", "1.0").tap do |recipe|
61
+ recipe.files << "http://localhost:#{HTTP_PORT}/#{ERB::Util.url_encode(File.basename(@tar_path))}"
62
+ recipe.patch_files << File.join(@assets_path, "patch 1.diff")
63
+ end
64
+ end
65
+ end
66
+
67
+ class TestCMakeConfig < TestCMake
68
+ def test_make_command_configuration
69
+ MiniPortile.stub(:mswin?, false) do
70
+ without_env("MAKE") do
71
+ assert_equal("make", MiniPortileCMake.new("test", "1.0.0").make_cmd)
72
+ assert_equal("xyzzy", MiniPortileCMake.new("test", "1.0.0", make_command: "xyzzy").make_cmd)
73
+ end
74
+ with_env("MAKE"=>"asdf") do
75
+ assert_equal("asdf", MiniPortileCMake.new("test", "1.0.0").make_cmd)
76
+ assert_equal("asdf", MiniPortileCMake.new("test", "1.0.0", make_command: "xyzzy").make_cmd)
77
+ end
78
+ end
79
+
80
+ MiniPortile.stub(:mswin?, true) do
81
+ assert_equal("nmake", MiniPortileCMake.new("test", "1.0.0").make_cmd)
82
+ end
83
+ end
84
+
85
+ def test_configure_defaults_with_macos
86
+ recipe = init_recipe
87
+ recipe.host = 'some-host'
88
+
89
+ with_env({ "CC" => nil, "CXX" => nil }) do
90
+ MiniPortile.stub(:darwin?, true) do
91
+ with_stubbed_target(os: 'darwin22', cpu: 'arm64') do
92
+ with_compilers(recipe, host_prefix: true, c_compiler: 'clang', cxx_compiler: 'clang++') do
93
+ Open3.stub(:capture2, cmake_help_mock('Unix')) do
94
+ assert_equal(
95
+ [
96
+ "-DCMAKE_SYSTEM_NAME=Darwin",
97
+ "-DCMAKE_SYSTEM_PROCESSOR=arm64",
98
+ "-DCMAKE_C_COMPILER=some-host-clang",
99
+ "-DCMAKE_CXX_COMPILER=some-host-clang++",
100
+ "-DCMAKE_BUILD_TYPE=Release"
101
+ ],
102
+ recipe.configure_defaults)
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ def test_configure_defaults_with_manual_system_name
111
+ recipe = init_recipe
112
+ recipe.system_name = 'Custom'
113
+
114
+ MiniPortile.stub(:darwin?, false) do
115
+ with_stubbed_target do
116
+ with_compilers(recipe) do
117
+ Open3.stub(:capture2, cmake_help_mock('Unix')) do
118
+ assert_equal(
119
+ [
120
+ "-DCMAKE_SYSTEM_NAME=Custom",
121
+ "-DCMAKE_SYSTEM_PROCESSOR=x86_64",
122
+ "-DCMAKE_C_COMPILER=gcc",
123
+ "-DCMAKE_CXX_COMPILER=g++",
124
+ "-DCMAKE_BUILD_TYPE=Release"
125
+ ],
126
+ recipe.configure_defaults)
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ def test_configure_defaults_with_unix_makefiles
134
+ recipe = init_recipe
135
+
136
+ MiniPortile.stub(:linux?, true) do
137
+ MiniPortile.stub(:darwin?, false) do
138
+ with_stubbed_target do
139
+ with_compilers(recipe) do
140
+ Open3.stub(:capture2, cmake_help_mock('Unix')) do
141
+ MiniPortile.stub(:mingw?, true) do
142
+ assert_equal(default_x86_compile_flags,
143
+ recipe.configure_defaults)
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ def test_configure_defaults_with_msys_makefiles
153
+ recipe = init_recipe
154
+
155
+ MiniPortile.stub(:linux?, true) do
156
+ MiniPortile.stub(:darwin?, false) do
157
+ with_stubbed_target do
158
+ with_compilers(recipe) do
159
+ Open3.stub(:capture2, cmake_help_mock('MSYS')) do
160
+ MiniPortile.stub(:mingw?, true) do
161
+ assert_equal(['-G', 'MSYS Makefiles'] + default_x86_compile_flags, recipe.configure_defaults)
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
169
+
170
+ def test_configure_defaults_with_nmake_makefiles
171
+ recipe = init_recipe
172
+
173
+ MiniPortile.stub(:linux?, true) do
174
+ MiniPortile.stub(:darwin?, false) do
175
+ with_stubbed_target do
176
+ with_compilers(recipe) do
177
+ Open3.stub(:capture2, cmake_help_mock('NMake')) do
178
+ MiniPortile.stub(:mswin?, true) do
179
+ assert_equal(['-G', 'NMake Makefiles'] + default_x86_compile_flags, recipe.configure_defaults)
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ def test_cmake_command_configuration
189
+ without_env("CMAKE") do
190
+ assert_equal("cmake", MiniPortileCMake.new("test", "1.0.0").cmake_cmd)
191
+ assert_equal("xyzzy", MiniPortileCMake.new("test", "1.0.0", cmake_command: "xyzzy").cmake_cmd)
192
+ end
193
+ with_env("CMAKE"=>"asdf") do
194
+ assert_equal("asdf", MiniPortileCMake.new("test", "1.0.0").cmake_cmd)
195
+ assert_equal("asdf", MiniPortileCMake.new("test", "1.0.0", cmake_command: "xyzzy").cmake_cmd)
196
+ end
197
+ end
198
+
199
+ def test_cmake_build_type_configuration
200
+ without_env("CMAKE_BUILD_TYPE") do
201
+ assert_equal("Release", MiniPortileCMake.new("test", "1.0.0").cmake_build_type)
202
+ assert_equal("xyzzy", MiniPortileCMake.new("test", "1.0.0", cmake_build_type: "xyzzy").cmake_build_type)
203
+ end
204
+ with_env("CMAKE_BUILD_TYPE"=>"Debug") do
205
+ assert_equal("Debug", MiniPortileCMake.new("test", "1.0.0").cmake_build_type)
206
+ assert_equal("Debug", MiniPortileCMake.new("test", "1.0.0", cmake_build_type: "xyzzy").cmake_build_type)
207
+ end
208
+ end
209
+
210
+ private
211
+
212
+ def with_stubbed_target(os: 'linux', cpu: 'x86_64')
213
+ MiniPortile.stub(:target_os, os) do
214
+ MiniPortile.stub(:target_cpu, cpu) do
215
+ yield
216
+ end
217
+ end
218
+ end
219
+
220
+ def with_compilers(recipe, host_prefix: false, c_compiler: 'gcc', cxx_compiler: 'g++')
221
+ mock = MiniTest::Mock.new
222
+
223
+ if host_prefix
224
+ mock.expect(:call, true, ["#{recipe.host}-#{c_compiler}"])
225
+ mock.expect(:call, true, ["#{recipe.host}-#{cxx_compiler}"])
226
+ else
227
+ mock.expect(:call, false, ["#{recipe.host}-#{c_compiler}"])
228
+ mock.expect(:call, true, [c_compiler])
229
+ mock.expect(:call, false, ["#{recipe.host}-#{cxx_compiler}"])
230
+ mock.expect(:call, true, [cxx_compiler])
231
+ end
232
+
233
+ recipe.stub(:which, mock) do
234
+ yield
235
+ end
236
+ end
237
+
238
+ def default_x86_compile_flags
239
+ [
240
+ "-DCMAKE_SYSTEM_NAME=Linux",
241
+ "-DCMAKE_SYSTEM_PROCESSOR=x86_64",
242
+ "-DCMAKE_C_COMPILER=gcc",
243
+ "-DCMAKE_CXX_COMPILER=g++",
244
+ "-DCMAKE_BUILD_TYPE=Release"
245
+ ]
246
+ end
247
+
248
+ def cmake_help_mock(generator_type)
249
+ open3_mock = MiniTest::Mock.new
250
+ cmake_script = <<~SCRIPT
251
+ echo "The following generators are available on this platform (* marks default):"
252
+ echo "* #{generator_type} Makefiles = Generates standard #{generator_type.upcase} makefiles."
253
+ SCRIPT
254
+
255
+ exit_status = MiniTest::Mock.new
256
+ exit_status.expect(:success?, true)
257
+ expected_output = [cmake_script, exit_status]
258
+ open3_mock.expect(:call, expected_output, ['cmake --help'])
259
+ open3_mock
260
+ end
64
261
  end
data/test/test_cook.rb CHANGED
@@ -67,6 +67,32 @@ class TestCook < TestCase
67
67
  end
68
68
  end
69
69
 
70
+ class TestCookConfiguration < TestCase
71
+ def test_make_command_configuration
72
+ without_env("MAKE") do
73
+ assert_equal("make", MiniPortile.new("test", "1.0.0").make_cmd)
74
+ assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", make_command: "xyzzy").make_cmd)
75
+ end
76
+ with_env("MAKE"=>"asdf") do
77
+ assert_equal("asdf", MiniPortile.new("test", "1.0.0").make_cmd)
78
+ assert_equal("asdf", MiniPortile.new("test", "1.0.0", make_command: "xyzzy").make_cmd)
79
+ end
80
+ end
81
+
82
+ def test_gcc_command_configuration
83
+ without_env("CC") do
84
+ expected_compiler = RbConfig::CONFIG["CC"] || "gcc"
85
+ assert_equal(expected_compiler, MiniPortile.new("test", "1.0.0").gcc_cmd)
86
+ assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").gcc_cmd)
87
+ end
88
+ with_env("CC"=>"asdf") do
89
+ assert_equal("asdf", MiniPortile.new("test", "1.0.0").gcc_cmd)
90
+ assert_equal("asdf", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").gcc_cmd)
91
+ end
92
+ end
93
+ end
94
+
95
+
70
96
  class TestCookWithBrokenGitDir < TestCase
71
97
  #
72
98
  # this is a test for #69
@@ -113,3 +139,32 @@ class TestCookWithBrokenGitDir < TestCase
113
139
  end
114
140
  end
115
141
  end
142
+
143
+ class TestCookAgainstSourceDirectory < TestCase
144
+ attr_accessor :recipe
145
+
146
+ def setup
147
+ super
148
+
149
+ @recipe ||= MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
150
+ recipe.source_directory = File.expand_path("../assets/test mini portile-1.0.0", __FILE__)
151
+ end
152
+ end
153
+
154
+ def test_source_directory
155
+ recipe.cook
156
+
157
+ path = File.join(work_dir, "configure.txt")
158
+ assert(File.exist?(path))
159
+ assert_equal((recipe.configure_options + ["--prefix=#{recipe.path}"]).inspect,
160
+ File.read(path).chomp);
161
+
162
+ path = File.join(work_dir, "compile.txt")
163
+ assert(File.exist?(path))
164
+ assert_equal("[\"all\"]", File.read(path).chomp);
165
+
166
+ path = File.join(work_dir, "install.txt")
167
+ assert(File.exist?(path))
168
+ assert_equal("[\"install\"]", File.read(path).chomp);
169
+ end
170
+ end
@@ -18,10 +18,12 @@ describe "recipe download" do
18
18
  end
19
19
  end
20
20
 
21
- block.call
22
-
23
- thread.kill
24
- server.close
21
+ begin
22
+ block.call
23
+ ensure
24
+ thread.kill
25
+ server.close
26
+ end
25
27
 
26
28
  request_count.must_be :>, 0
27
29
  end
@@ -60,7 +62,7 @@ describe "recipe download" do
60
62
  @recipe.files << "file://#{path}"
61
63
  @recipe.download
62
64
  assert File.exist?(dest)
63
- Digest::MD5.file(dest).hexdigest.must_equal "5deffb997041bbb5f11bdcafdbb47975"
65
+ Digest::MD5.file(dest).hexdigest.must_equal "ee0e9f44e72213015ef976d5ac23931d"
64
66
  end
65
67
 
66
68
  it "other" do
@@ -0,0 +1,39 @@
1
+ require_relative "helper"
2
+
3
+ class TestExecute < TestCase
4
+ def setup
5
+ super
6
+ @env = {"TEST_ENV_VAR1" => "VAR1_VALUE", "TEST_ENV_VAR2" => "VAR2_VALUE"}
7
+ @recipe = MiniPortile.new("test_execute", "1.0.0")
8
+ @log_path = @recipe.send(:tmp_path)
9
+ FileUtils.mkdir_p File.join(@log_path, "subdir") # normally created by `download`
10
+ end
11
+
12
+ def test_execute_one_big_string_arg
13
+ class << @recipe
14
+ def execute_with_env(env)
15
+ execute("testenv1",
16
+ %Q(ruby -e "puts ENV['TEST_ENV_VAR1'].inspect ; exit 0"),
17
+ {:env => env, :initial_message => false, :debug => true})
18
+ end
19
+ end
20
+
21
+ @recipe.execute_with_env(@env)
22
+
23
+ assert_equal("VAR1_VALUE".inspect, IO.read(File.join(@log_path, "testenv1.log")).chomp)
24
+ end
25
+
26
+ def test_execute_array_args
27
+ class << @recipe
28
+ def execute_with_env(env)
29
+ execute("testenv2",
30
+ ["ruby", "-e", "puts ENV['TEST_ENV_VAR2'].inspect"],
31
+ {:env => env, :initial_message => false, :debug => true})
32
+ end
33
+ end
34
+
35
+ @recipe.execute_with_env(@env)
36
+
37
+ assert_equal("VAR2_VALUE".inspect, IO.read(File.join(@log_path, "testenv2.log")).chomp)
38
+ end
39
+ end