teapot 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,109 @@
1
+ # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'pathname'
22
+
23
+ require 'teapot/context'
24
+ require 'teapot/environment'
25
+ require 'teapot/commands'
26
+
27
+ require 'teapot/definition'
28
+
29
+ module Teapot
30
+ class Package
31
+ def initialize(path, name, options = {})
32
+ # The path where the package is (or will be) located:
33
+ @path = path
34
+
35
+ # Get the name of the package from the options, if provided:
36
+ if options[:name]
37
+ @name = options[:name]
38
+ end
39
+
40
+ if Symbol === name
41
+ # If the name argument was symbolic, we convert it into a string, and use it for both the uri and the name itself:
42
+ @uri = name.to_s
43
+ @name ||= @uri
44
+ else
45
+ # Otherwise, we assume a path may have been given, and use that instead:
46
+ @name ||= File.basename(name)
47
+ @uri = name
48
+ end
49
+
50
+ # Copy the options provided:
51
+ @options = options
52
+ end
53
+
54
+ attr :name
55
+ attr :path
56
+
57
+ attr :uri
58
+ attr :options, true
59
+
60
+ def local?
61
+ @options.key? :local
62
+ end
63
+
64
+ def external?
65
+ @options.key? :source
66
+ end
67
+
68
+ def external_url(relative_root)
69
+ base_uri = URI(@options[:source].to_s)
70
+
71
+ if base_uri.scheme == nil || base_uri.scheme == 'file'
72
+ base_uri = URI "file://" + File.expand_path(base_uri.path, relative_root) + "/"
73
+ end
74
+
75
+ return relative_url(base_uri)
76
+ end
77
+
78
+ def to_s
79
+ "<#{self.class.name} #{@name.dump} path=#{path}>"
80
+ end
81
+
82
+ # Package may be used as hash key / in a set:
83
+
84
+ def hash
85
+ @path.hash
86
+ end
87
+
88
+ def eql?(other)
89
+ @path.eql?(other.path)
90
+ end
91
+
92
+ private
93
+
94
+ def relative_url(base_uri)
95
+ source_uri = URI(@uri)
96
+
97
+ unless source_uri.absolute?
98
+ source_uri = base_uri + source_uri
99
+ end
100
+
101
+ # Git can't handle the default formatting that Ruby uses for file URIs.
102
+ if source_uri.scheme == "file"
103
+ source_uri = "file://" + source_uri.path
104
+ end
105
+
106
+ return source_uri
107
+ end
108
+ end
109
+ end
@@ -21,48 +21,41 @@
21
21
  require 'pathname'
22
22
  require 'teapot/build'
23
23
  require 'teapot/dependency'
24
+ require 'teapot/definition'
24
25
 
25
26
  module Teapot
26
27
  class BuildError < StandardError
27
28
  end
28
29
 
29
- class Target
30
+ class Target < Definition
30
31
  include Dependency
31
32
 
32
33
  def initialize(context, package, name)
33
- @context = context
34
- @package = package
34
+ super context, package, name
35
35
 
36
- @name = name
37
-
38
- @install = nil
39
-
40
- @path = @package.path
36
+ @build = nil
41
37
  end
42
38
 
43
- attr :context
44
- attr :package
45
- attr :name
46
-
47
- attr :path
48
-
49
39
  def builder
50
40
  Build.top(@path)
51
41
  end
52
42
 
53
- def install(&block)
54
- @install = Proc.new(&block)
43
+ def build(&block)
44
+ @build = Proc.new(&block)
55
45
  end
56
46
 
57
- def install!(context, config = {})
58
- return unless @install
47
+ def build!(configuration, config = {})
48
+ return unless @build
49
+
50
+ # Reduce the number of keystrokes for good health:
51
+ context = configuration.context
59
52
 
60
53
  chain = Dependency::chain(context.selection, dependencies, context.targets.values)
61
54
 
62
55
  environments = []
63
56
 
64
57
  # The base configuration environment:
65
- environments << context.config.environment
58
+ # environments << configuration.environment
66
59
 
67
60
  # Calculate the dependency chain's ordered environments:
68
61
  environments += chain.provisions.collect do |provision|
@@ -76,7 +69,7 @@ module Teapot
76
69
  environment = Environment.combine(*environments)
77
70
 
78
71
  local_build = environment.merge do
79
- default platforms_path context.config.platforms_path
72
+ default platforms_path configuration.platforms_path
80
73
  default build_prefix {platforms_path + "cache/#{platform_name}-#{variant}"}
81
74
  default install_prefix {platforms_path + "#{platform_name}-#{variant}"}
82
75
 
@@ -84,11 +77,7 @@ module Teapot
84
77
  append linkflags {"-L#{install_prefix + "lib"}"}
85
78
  end
86
79
 
87
- @install.call(local_build)
88
- end
89
-
90
- def to_s
91
- "<Target: #{@name}>"
80
+ @build.call(local_build)
92
81
  end
93
82
  end
94
83
  end
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Teapot
22
- VERSION = "0.6.0"
22
+ VERSION = "0.7.0"
23
23
  end
@@ -20,9 +20,14 @@ Gem::Specification.new do |gem|
20
20
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
21
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
22
  gem.require_paths = ["lib"]
23
-
23
+
24
+ gem.required_ruby_version = '>= 1.9.3'
25
+
24
26
  gem.add_dependency "rainbow"
25
27
  gem.add_dependency "rexec"
26
28
  gem.add_dependency "trollop"
27
29
  gem.add_dependency "facter"
30
+
31
+ # This could be a good option in the future for teapot fetch:
32
+ #gem.add_dependency "rugged"
28
33
  end
@@ -0,0 +1,33 @@
1
+
2
+ #
3
+ # This file is part of the "Teapot" project, and is released under the MIT license.
4
+ #
5
+
6
+ required_version "0.7"
7
+
8
+ define_configuration 'test' do |configuration|
9
+ configuration.public!
10
+
11
+ configuration[:source] = "../dream-framework"
12
+
13
+ configuration.require "variants"
14
+
15
+ configuration.require "platform-darwin-osx"
16
+ configuration.require "platform-darwin-ios"
17
+
18
+ configuration.require "unit-test"
19
+ configuration.require "euclid"
20
+
21
+ configuration.require "ogg"
22
+ configuration.require "vorbis"
23
+
24
+ configuration.require "jpeg"
25
+ configuration.require "png"
26
+
27
+ configuration.require "freetype"
28
+
29
+ configuration.require "dream"
30
+ configuration.require "tagged-format"
31
+
32
+ configuration.require "opencv"
33
+ end
@@ -22,20 +22,23 @@ require 'pathname'
22
22
  require 'test/unit'
23
23
  require 'stringio'
24
24
 
25
- require 'teapot/config'
25
+ require 'teapot/context'
26
26
 
27
27
  class TestConfig < Test::Unit::TestCase
28
28
  ROOT = Pathname.new(__FILE__).dirname
29
29
 
30
- def test_config
31
- config = Teapot::Config.new(ROOT)
30
+ def test_context
31
+ context = Teapot::Context.new(ROOT)
32
32
 
33
- config.instance_eval do
34
- source "../infusions/"
35
- package "png"
36
- end
33
+ # There is one configuration:
34
+ assert_equal 1, context.configurations.count
37
35
 
38
- assert_equal "../infusions/", config.options[:source]
39
- assert_equal 1, config.packages.size
36
+ # No targets were defined:
37
+ assert_equal 0, context.targets.count
38
+
39
+ default_configuration = context.default_configuration
40
+
41
+ # 13 defined packages + 1 implicit package.
42
+ assert_equal 14, default_configuration.packages.count
40
43
  end
41
44
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teapot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
5
- prerelease:
4
+ version: 0.7.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Samuel Williams
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-15 00:00:00.000000000 Z
11
+ date: 2013-03-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rainbow
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rexec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: trollop
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: facter
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -105,8 +96,16 @@ files:
105
96
  - lib/teapot/build/targets/files.rb
106
97
  - lib/teapot/build/targets/library.rb
107
98
  - lib/teapot/commands.rb
108
- - lib/teapot/config.rb
99
+ - lib/teapot/configuration.rb
109
100
  - lib/teapot/context.rb
101
+ - lib/teapot/controller.rb
102
+ - lib/teapot/controller/build.rb
103
+ - lib/teapot/controller/clean.rb
104
+ - lib/teapot/controller/create.rb
105
+ - lib/teapot/controller/fetch.rb
106
+ - lib/teapot/controller/generate.rb
107
+ - lib/teapot/controller/list.rb
108
+ - lib/teapot/definition.rb
110
109
  - lib/teapot/dependency.rb
111
110
  - lib/teapot/environment.rb
112
111
  - lib/teapot/environment/base.rb
@@ -114,43 +113,42 @@ files:
114
113
  - lib/teapot/environment/evaluator.rb
115
114
  - lib/teapot/environment/flatten.rb
116
115
  - lib/teapot/environment/system.rb
116
+ - lib/teapot/generator.rb
117
+ - lib/teapot/loader.rb
118
+ - lib/teapot/name.rb
119
+ - lib/teapot/package.rb
117
120
  - lib/teapot/target.rb
118
121
  - lib/teapot/version.rb
119
122
  - teapot.gemspec
120
- - test/test_config.rb
123
+ - test/teapot.rb
121
124
  - test/test_dependency.rb
122
125
  - test/test_environment.rb
126
+ - test/test_teapot.rb
123
127
  homepage: ''
124
128
  licenses: []
129
+ metadata: {}
125
130
  post_install_message:
126
131
  rdoc_options: []
127
132
  require_paths:
128
133
  - lib
129
134
  required_ruby_version: !ruby/object:Gem::Requirement
130
- none: false
131
135
  requirements:
132
136
  - - ! '>='
133
137
  - !ruby/object:Gem::Version
134
- version: '0'
135
- segments:
136
- - 0
137
- hash: -3435379409085677514
138
+ version: 1.9.3
138
139
  required_rubygems_version: !ruby/object:Gem::Requirement
139
- none: false
140
140
  requirements:
141
141
  - - ! '>='
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
- segments:
145
- - 0
146
- hash: -3435379409085677514
147
144
  requirements: []
148
145
  rubyforge_project:
149
- rubygems_version: 1.8.24
146
+ rubygems_version: 2.0.2
150
147
  signing_key:
151
- specification_version: 3
148
+ specification_version: 4
152
149
  summary: Teapot is a tool for managing complex cross-platform builds.
153
150
  test_files:
154
- - test/test_config.rb
151
+ - test/teapot.rb
155
152
  - test/test_dependency.rb
156
153
  - test/test_environment.rb
154
+ - test/test_teapot.rb
@@ -1,164 +0,0 @@
1
- # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require 'pathname'
22
-
23
- require 'teapot/context'
24
- require 'teapot/environment'
25
- require 'teapot/commands'
26
-
27
- module Teapot
28
- class Config
29
- include Dependency
30
-
31
- class Package
32
- def initialize(config, name, options = {})
33
- @config = config
34
-
35
- if options[:name]
36
- @name = options[:name]
37
- end
38
-
39
- if Symbol === name
40
- @uri = name.to_s
41
- @name ||= @uri
42
- else
43
- @name ||= File.basename(name)
44
- @uri = name
45
- end
46
-
47
- @options = options
48
- @global = Environment.new
49
- end
50
-
51
- attr :name
52
- attr :uri
53
- attr :options
54
- attr :global
55
-
56
- def relative_url(base_uri)
57
- source_uri = URI(@uri)
58
-
59
- unless source_uri.absolute?
60
- source_uri = base_uri + source_uri
61
- end
62
-
63
- # Git can't handle the default formatting that Ruby uses for file URIs.
64
- if source_uri.scheme == "file"
65
- source_uri = "file://" + source_uri.path
66
- end
67
-
68
- return source_uri
69
- end
70
-
71
- def local?
72
- @options.key? :local
73
- end
74
-
75
- def loader_path
76
- "teapot.rb"
77
- end
78
-
79
- def path
80
- @config.packages_path + @name
81
- end
82
-
83
- def to_s
84
- "<#{@name}>"
85
- end
86
- end
87
-
88
- def initialize(root, options = {})
89
- @root = Pathname.new(root)
90
- @options = options
91
-
92
- @packages = []
93
-
94
- @environment = Environment.new
95
- end
96
-
97
- def name
98
- :config
99
- end
100
-
101
- attr :root
102
- attr :packages
103
- attr :options
104
-
105
- attr :environment
106
-
107
- def packages_path
108
- @root + (@options[:packages_path] || "packages")
109
- end
110
-
111
- def platforms_path
112
- @root + (@options[:platforms_path] || "platforms")
113
- end
114
-
115
- def host(*args, &block)
116
- name = @options[:host_platform] || RUBY_PLATFORM
117
-
118
- if block_given?
119
- if args.find{|arg| arg === name}
120
- yield
121
- end
122
- else
123
- name
124
- end
125
- end
126
-
127
- attr :options
128
- attr :packages
129
-
130
- def source(path)
131
- @options[:source] = path
132
- end
133
-
134
- def package(name, options = {})
135
- @packages << Package.new(self, name, options)
136
- end
137
-
138
- def load(teapot_path)
139
- instance_eval File.read(teapot_path), teapot_path
140
- end
141
-
142
- def self.load(root, options = {})
143
- config = new(root, options)
144
-
145
- yield config if block_given?
146
-
147
- teapot_path = File.join(root, "Teapot")
148
- config.load(teapot_path) if File.exist? teapot_path
149
-
150
- return config
151
- end
152
-
153
- def self.load_default(root = Dir.getwd, options = {})
154
- # Load project specific Teapot file
155
- load(root, options) do |config|
156
- user_path = File.expand_path("~/.Teapot")
157
-
158
- if File.exist? user_path
159
- config.load(user_path)
160
- end
161
- end
162
- end
163
- end
164
- end