motion-cocoapods 1.3.7 → 1.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d03a62fa181ba305ae74b453108a2e5a22774293
4
- data.tar.gz: f06e706c4d317d22dd527082a2aa6420529112a1
3
+ metadata.gz: b763eae72ff22dc16f112c56c334712927a268c2
4
+ data.tar.gz: d33fb42510b1aabd3ee3898121d8872833d58603
5
5
  SHA512:
6
- metadata.gz: b5641b33a7b7aae45b1842e2555db2d276ab7f6f07599cb760dc731a9bfc67617962400b7d88a4201e2000117994d318866a3fe06f6c0b15bd987461f10f90a5
7
- data.tar.gz: 8d4a8bbb18d4d296aef5e35e5d009475fe2e982617bb0e84e7087f34c597cca6dee6defcbf3aa3836bf81e73bcdfe497cd816d3ec1112f5491866155be83849f
6
+ metadata.gz: 523db5f80d68402f1a7109ad58ada92d4faf3fd37a478c16e19fc5e752cfeb64b406cd4344c402ce67c9972a6c9b5f8ecc8ea9b8750db815523e4a697cd99a82
7
+ data.tar.gz: 2f5037a251bc4d2072baced390d552755a3cca1e42f414ae0c294a84ef2f0cccc1812029f3ff07a640d7ee0ae71fba6f3a4a9158fc548680049cd58fa6c88ca5
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012, Laurent Sansonetti <lrz@hipbyte.com>
1
+ Copyright (c) 2012-2013, Laurent Sansonetti <lrz@hipbyte.com>
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # motion-cocoapods
2
+
3
+ motion-cocoapods allows RubyMotion projects to integrate with the
4
+ [CocoaPods](http://cocoapods.org) dependency manager.
5
+
6
+
7
+ ## Installation
8
+
9
+ ```
10
+ $ [sudo] gem install motion-cocoapods
11
+ ```
12
+
13
+ Or if you use Bundler:
14
+
15
+ ```ruby
16
+ gem 'motion-cocoapods', '~> 1.4.0'
17
+ ```
18
+
19
+
20
+ ## Setup
21
+
22
+ 1. Edit the `Rakefile` of your RubyMotion project and add the following require
23
+ line:
24
+
25
+ ```ruby
26
+ require 'rubygems'
27
+ require 'motion-cocoapods'
28
+ ```
29
+
30
+ 2. Still in the `Rakefile`, set your dependencies using the same language as
31
+ you would do in [Podfiles](http://docs.cocoapods.org/podfile.html).
32
+
33
+ ```ruby
34
+ Motion::Project::App.setup do |app|
35
+ # ...
36
+ app.pods do
37
+ pod 'AFNetworking'
38
+ end
39
+ end
40
+ ```
41
+
42
+ 3. If this is the first time using CocoaPods on your machine, you'll need to
43
+ let CocoaPods do some setup work with the following command:
44
+
45
+ ```
46
+ $ [bundle exec] pod setup
47
+ ```
48
+
49
+
50
+ ## Tasks
51
+
52
+ To tell motion-cocoapods to download your dependencies, run the following rake
53
+ task:
54
+
55
+ ```
56
+ $ rake pod:install
57
+ ```
58
+
59
+ That’s all. The build system will properly download the given pods and their
60
+ dependencies. On the next build of your application it will pod the pods and
61
+ link them to your application executable.
62
+
63
+ If the `vendor/Podfile.lock` file exists, this will be used to install specific
64
+ versions. To update the versions, use the following rake task:
65
+
66
+ ```
67
+ $ rake pod:update
68
+ ```
69
+
70
+ ## Options
71
+
72
+ By default the output of CocoaPods doing its work is silenced. If, however, you
73
+ would like to see the output, you can set the `COCOAPODS_VERBOSE` env variable:
74
+
75
+ ```
76
+ $ rake pod:install COCOAPODS_VERBOSE=1
77
+ ```
78
+
79
+ As part of the install and update tasks, the specification repostories will get
80
+ updated. You can disable this with the `COCOAPODS_NO_REPO_UPDATE` env variable:
81
+
82
+ ```
83
+ $ rake pod:install COCOAPODS_NO_REPO_UPDATE=1
84
+ ```
85
+
86
+
87
+ ## Contribute
88
+
89
+ 1. Setup a local development environment.
90
+
91
+ ```
92
+ $ git clone git://github.com/HipByte/motion-cocoapods.git
93
+ $ cd motion-cocoapods
94
+ $ rake bootstrap
95
+ ```
96
+
97
+ 2. Verify that all the tests are passing.
98
+
99
+ ```
100
+ $ rake spec
101
+ ```
102
+
103
+ 3. Create your patch and send a
104
+ [pull-request](http://help.github.com/send-pull-requests/).
105
+
106
+
107
+ ## License
108
+
109
+ Copyright (c) 2012-2013, Laurent Sansonetti <lrz@hipbyte.com>
110
+ All rights reserved.
111
+
112
+ Redistribution and use in source and binary forms, with or without
113
+ modification, are permitted provided that the following conditions are met:
114
+
115
+ 1. Redistributions of source code must retain the above copyright notice, this
116
+ list of conditions and the following disclaimer.
117
+ 2. Redistributions in binary form must reproduce the above copyright notice,
118
+ this list of conditions and the following disclaimer in the documentation
119
+ and/or other materials provided with the distribution.
120
+
121
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
122
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
123
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
124
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
125
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
126
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
127
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
128
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
129
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
130
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
131
+
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012, Laurent Sansonetti <lrz@hipbyte.com>
1
+ # Copyright (c) 2012-2013, Laurent Sansonetti <lrz@hipbyte.com>
2
2
  # All rights reserved.
3
3
  #
4
4
  # Redistribution and use in source and binary forms, with or without
@@ -46,23 +46,10 @@ module Motion::Project
46
46
  class App
47
47
  class << self
48
48
  def build_with_cocoapods(platform, opts = {})
49
- _config = config
50
- pods = _config.pods
51
- # We run the update/install commands only if necessary.
52
- cp_config = Pod::Config.instance
53
- analyzer = Pod::Installer::Analyzer.new(cp_config.sandbox, pods.podfile, cp_config.lockfile)
54
- begin
55
- need_install = analyzer.needs_install?
56
- rescue
57
- need_install = true
58
- end
59
- if ENV['COCOCAPODS_UPDATE']
60
- pods.install!(true)
61
- else
62
- pods.install! if need_install
49
+ unless File.exist?(CocoaPods::PODS_ROOT)
50
+ $stderr.puts "[!] No CocoaPods dependencies found in #{CocoaPods::PODS_ROOT}, run the `rake pod:install` task."
51
+ exit 1
63
52
  end
64
- pods.link_project
65
-
66
53
  build_without_cocoapods(platform, opts)
67
54
  end
68
55
 
@@ -84,16 +71,51 @@ module Motion::Project
84
71
  @podfile = Pod::Podfile.new {}
85
72
  @podfile.platform((App.respond_to?(:template) ? App.template : :ios), config.deployment_target)
86
73
  cp_config.podfile = @podfile
87
-
88
- cp_config.skip_repo_update = ENV['COCOAPODS_NO_UPDATE']
89
- if ENV['COCOAPODS_VERBOSE']
90
- cp_config.verbose = true
91
- else
92
- cp_config.silent = true
93
- end
94
-
74
+ cp_config.skip_repo_update = true
75
+ cp_config.verbose = !!ENV['COCOAPODS_VERBOSE']
95
76
  cp_config.integrate_targets = false
96
77
  cp_config.installation_root = Pathname.new(File.expand_path(config.project_dir)) + 'vendor'
78
+
79
+ configure_project
80
+ end
81
+
82
+ # Adds the Pods project to the RubyMotion config as a vendored project and
83
+ #
84
+ def configure_project
85
+ @config.vendor_project(PODS_ROOT, :xcode,
86
+ :target => 'Pods',
87
+ :headers_dir => 'Headers',
88
+ :products => %w{ libPods.a }
89
+ )
90
+
91
+ @config.resources_dirs << resources_dir.to_s
92
+
93
+ # TODO replace this all once Xcodeproj has the proper xcconfig parser.
94
+ if (xcconfig = self.pods_xcconfig) && ldflags = xcconfig.to_hash['OTHER_LDFLAGS']
95
+ lib_search_paths = xcconfig.to_hash['LIBRARY_SEARCH_PATHS'] || ""
96
+ lib_search_paths.gsub!('$(PODS_ROOT)', "-L#{@config.project_dir}/#{PODS_ROOT}")
97
+
98
+ framework_search_paths = xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS']
99
+ if framework_search_paths
100
+ framework_search_paths.scan(/\"([^\"]+)\"/) do |search_path|
101
+ path = search_path.first.gsub!(/(\$\(PODS_ROOT\))|(\$\{PODS_ROOT\})/, "#{@config.project_dir}/#{PODS_ROOT}")
102
+ @config.framework_search_paths << path if path
103
+ end
104
+ end
105
+
106
+ @config.frameworks.concat(ldflags.scan(/-framework\s+([^\s]+)/).map { |m| m[0] })
107
+ @config.frameworks.uniq!
108
+ @config.libs.concat(ldflags.scan(/-l([^\s]+)/).map { |m|
109
+ if lib_search_paths.length == 0 || File.exist?("/usr/lib/lib#{m[0]}.dylib")
110
+ "/usr/lib/lib#{m[0]}.dylib"
111
+ else
112
+ "#{lib_search_paths} -ObjC -l#{m[0]}"
113
+ end
114
+ })
115
+ @config.weak_frameworks.concat(ldflags.scan(/-weak_framework\s+([^\s]+)/).map { |m| m[0] })
116
+ @config.weak_frameworks.uniq!
117
+ @config.libs.uniq!
118
+ end
97
119
  end
98
120
 
99
121
  # DSL
@@ -112,7 +134,7 @@ module Motion::Project
112
134
  @podfile.post_install(&block)
113
135
  end
114
136
 
115
- # Installation & Linking
137
+ # Installation
116
138
  #-------------------------------------------------------------------------#
117
139
 
118
140
  def pods_installer
@@ -127,68 +149,32 @@ module Motion::Project
127
149
  # Let RubyMotion re-generate the BridgeSupport file whenever the list of
128
150
  # installed pods changes.
129
151
  #
130
- def install!(update=false)
152
+ def install!(update)
131
153
  pods_installer.update_mode = update
132
154
  pods_installer.install!
133
155
  if bridgesupport_file.exist? && !pods_installer.installed_specs.empty?
134
156
  bridgesupport_file.delete
135
157
  end
136
- end
137
158
 
138
- # Adds the Pods project to the RubyMotion config as a vendored project.
139
- #
140
- def link_project
141
159
  install_resources
142
- copy_headers
143
-
144
- @config.vendor_project(PODS_ROOT, :xcode,
145
- :target => 'Pods',
146
- :headers_dir => 'Headers',
147
- :products => %w{ libPods.a }
148
- )
149
-
150
- if ldflags = pods_xcconfig.to_hash['OTHER_LDFLAGS']
151
- lib_search_paths = pods_xcconfig.to_hash['LIBRARY_SEARCH_PATHS'] || ""
152
- lib_search_paths.gsub!('$(PODS_ROOT)', "-L#{@config.project_dir}/#{PODS_ROOT}")
153
-
154
- framework_search_paths = pods_xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS']
155
- if framework_search_paths
156
- framework_search_paths.scan(/\"([^\"]+)\"/) do |search_path|
157
- path = search_path.first.gsub!(/(\$\(PODS_ROOT\))|(\$\{PODS_ROOT\})/, "#{@config.project_dir}/#{PODS_ROOT}")
158
- @config.framework_search_paths << path if path
159
- end
160
- end
161
-
162
- @config.frameworks.concat(ldflags.scan(/-framework\s+([^\s]+)/).map { |m| m[0] })
163
- @config.frameworks.uniq!
164
- @config.libs.concat(ldflags.scan(/-l([^\s]+)/).map { |m|
165
- if lib_search_paths.length == 0 || File.exist?("/usr/lib/lib#{m[0]}.dylib")
166
- "/usr/lib/lib#{m[0]}.dylib"
167
- else
168
- "#{lib_search_paths} -all_load -l#{m[0]}"
169
- end
170
- })
171
- @config.weak_frameworks.concat(ldflags.scan(/-weak_framework\s+([^\s]+)/).map { |m| m[0] })
172
- @config.weak_frameworks.uniq!
173
- @config.libs.uniq!
174
- end
160
+ copy_cocoapods_env_and_prefix_headers
175
161
  end
176
162
 
163
+ # TODO this probably breaks in cases like resource bundles etc, need to test.
177
164
  def install_resources
178
165
  FileUtils.mkdir_p(resources_dir)
179
166
  resources.each do |file|
180
167
  begin
181
- FileUtils.cp_r file, resources_dir
168
+ FileUtils.cp_r file, resources_dir if file.exist?
182
169
  rescue ArgumentError => exc
183
170
  unless exc.message =~ /same file/
184
171
  raise
185
172
  end
186
173
  end
187
174
  end
188
- @config.resources_dirs << resources_dir.to_s
189
175
  end
190
176
 
191
- def copy_headers
177
+ def copy_cocoapods_env_and_prefix_headers
192
178
  headers = Dir.glob(["#{PODS_ROOT}/*.h", "#{PODS_ROOT}/*.pch"])
193
179
  headers.each do |header|
194
180
  src = File.basename(header)
@@ -206,13 +192,18 @@ module Motion::Project
206
192
  Pod::Config.instance
207
193
  end
208
194
 
195
+ def analyzer
196
+ cp_config = Pod::Config.instance
197
+ Pod::Installer::Analyzer.new(cp_config.sandbox, @podfile, cp_config.lockfile)
198
+ end
199
+
209
200
  def bridgesupport_file
210
201
  Pathname.new(@config.project_dir) + PODS_ROOT + 'Pods.bridgesupport'
211
202
  end
212
203
 
213
204
  def pods_xcconfig
214
205
  path = Pathname.new(@config.project_dir) + PODS_ROOT + 'Pods.xcconfig'
215
- Xcodeproj::Config.new(path)
206
+ Xcodeproj::Config.new(path) if path.exist?
216
207
  end
217
208
 
218
209
  def resources
@@ -221,6 +212,7 @@ module Motion::Project
221
212
  f.each_line do |line|
222
213
  if matched = line.match(/install_resource\s+(.*)/)
223
214
  path = (matched[1].strip)[1..-2]
215
+ path.sub!("${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}", ".build")
224
216
  resources << Pathname.new(@config.project_dir) + PODS_ROOT + path
225
217
  end
226
218
  end
@@ -231,17 +223,44 @@ module Motion::Project
231
223
  def resources_dir
232
224
  Pathname.new(@config.project_dir) + PODS_ROOT + 'Resources'
233
225
  end
226
+ end
227
+ end
228
+
229
+ namespace :pod do
230
+ task :update_spec_repos do
231
+ if ENV['COCOCAPODS_NO_UPDATE']
232
+ $stderr.puts '[!] The COCOCAPODS_NO_UPDATE env variable has been deprecated, use COCOAPODS_NO_REPO_UPDATE instead.'
233
+ ENV['COCOAPODS_NO_REPO_UPDATE'] = '1'
234
+ end
235
+ Pod::SourcesManager.update(nil, true) unless ENV['COCOAPODS_NO_REPO_UPDATE']
236
+ end
234
237
 
235
- def inspect
236
- ''
238
+ desc "Download and integrate newly added pods"
239
+ task :install => :update_spec_repos do
240
+ pods = App.config.pods
241
+ begin
242
+ need_install = pods.analyzer.needs_install?
243
+ rescue
244
+ # TODO fix this, see https://github.com/HipByte/motion-cocoapods/issues/57#issuecomment-17810809
245
+ need_install = true
237
246
  end
247
+ pods.install!(false) if need_install
248
+ end
249
+
250
+ desc "Update outdated pods"
251
+ task :update => :update_spec_repos do
252
+ pods = App.config.pods
253
+ pods.install!(true)
238
254
  end
239
255
  end
240
256
 
241
- namespace :pod do
242
- desc "Update outdated pods and build objects"
243
- task :update do
244
- ENV['COCOCAPODS_UPDATE'] = "true"
245
- Rake::Task["build"].invoke
257
+ namespace :clean do
258
+ # This gets appended to the already existing clean:all task.
259
+ task :all do
260
+ dir = Motion::Project::CocoaPods::PODS_ROOT
261
+ if File.exist?(dir)
262
+ App.info 'Delete', dir
263
+ rm_rf dir
264
+ end
246
265
  end
247
- end
266
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012, Laurent Sansonetti <lrz@hipbyte.com>
1
+ # Copyright (c) 2012-2013, Laurent Sansonetti <lrz@hipbyte.com>
2
2
  # All rights reserved.
3
3
  #
4
4
  # Redistribution and use in source and binary forms, with or without
@@ -24,6 +24,6 @@
24
24
 
25
25
  module Motion::Project
26
26
  class CocoaPods
27
- VERSION = '1.3.7'
27
+ VERSION = '1.4.0'
28
28
  end
29
- end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.7
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Sansonetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-30 00:00:00.000000000 Z
11
+ date: 2013-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.17.0
19
+ version: 0.26.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.17.0
26
+ version: 0.26.2
27
27
  description: motion-cocoapods allows RubyMotion projects to have access to the CocoaPods
28
28
  dependency manager.
29
29
  email: lrz@hipbyte.com
@@ -34,10 +34,11 @@ files:
34
34
  - lib/motion/project/cocoapods.rb
35
35
  - lib/motion/project/version.rb
36
36
  - lib/motion-cocoapods.rb
37
- - README.rdoc
37
+ - README.md
38
38
  - LICENSE
39
39
  homepage: http://www.rubymotion.com
40
- licenses: []
40
+ licenses:
41
+ - MIT
41
42
  metadata: {}
42
43
  post_install_message:
43
44
  rdoc_options: []
@@ -55,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
56
  version: '0'
56
57
  requirements: []
57
58
  rubyforge_project:
58
- rubygems_version: 2.1.5
59
+ rubygems_version: 2.0.3
59
60
  signing_key:
60
61
  specification_version: 4
61
62
  summary: CocoaPods integration for RubyMotion projects
data/README.rdoc DELETED
@@ -1,98 +0,0 @@
1
- = motion-cocoapods
2
-
3
- motion-cocoapods allows RubyMotion projects to integrate with the CocoaPods
4
- dependency manager.
5
-
6
-
7
- == Requirements
8
-
9
- * CocoaPods (see http://cocoapods.org).
10
-
11
- * RubyMotion 1.0 or greater (see http://www.rubymotion.com).
12
-
13
-
14
- == Installation
15
-
16
- $ sudo gem install motion-cocoapods
17
-
18
-
19
- == Setup
20
-
21
- 1. Edit the +Rakefile+ of your RubyMotion project and add the following require
22
- line.
23
-
24
- require 'rubygems'
25
- require 'motion-cocoapods'
26
-
27
- 2. Still in the +Rakefile+, set your dependencies using the same language as
28
- you would do in Podfiles.
29
-
30
- Motion::Project::App.setup do |app|
31
- # ...
32
- app.pods do
33
- pod 'JSONKit'
34
- end
35
- end
36
-
37
- That's all. The build system will properly download the given pods and their
38
- dependencies, build them and link them to your application executable.
39
-
40
-
41
- == Options
42
-
43
- If a Podfile.lock file exists, this will be used to install specific versions.
44
- To update the versions, you can set the +COCOCAPODS_UPDATE+ env variable.
45
-
46
- $ rake COCOCAPODS_UPDATE=1
47
-
48
- By default the output of CocoaPods doing its work is silenced. If, however, you
49
- would like to see the output, you can set the +COCOAPODS_VERBOSE+ env variable.
50
-
51
- $ rake COCOAPODS_VERBOSE=1
52
-
53
- On every build, CocoaPods will try to update the specification repos in
54
- +~/.cocoapods+, if you want to skip this then set the +COCOAPODS_NO_UPDATE+ env
55
- variable.
56
-
57
- $ rake COCOAPODS_NO_UPDATE=1
58
-
59
-
60
- == Contribute
61
-
62
- 1. Setup a local development environment.
63
-
64
- $ git clone git://github.com/HipByte/motion-cocoapods.git
65
- $ cd motion-cocoapods
66
- $ rake bootstrap
67
-
68
- 2. Verify that all the tests are passing.
69
-
70
- $ rake spec
71
-
72
- 3. Create your patch and send a pull-request[http://help.github.com/send-pull-requests/].
73
-
74
-
75
- == License
76
-
77
- Copyright (c) 2012, Laurent Sansonetti <lrz@hipbyte.com>
78
- All rights reserved.
79
-
80
- Redistribution and use in source and binary forms, with or without
81
- modification, are permitted provided that the following conditions are met:
82
-
83
- 1. Redistributions of source code must retain the above copyright notice, this
84
- list of conditions and the following disclaimer.
85
- 2. Redistributions in binary form must reproduce the above copyright notice,
86
- this list of conditions and the following disclaimer in the documentation
87
- and/or other materials provided with the distribution.
88
-
89
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
90
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
91
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
92
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
93
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
94
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
95
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
96
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
97
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
98
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.