motion-cocoapods 1.3.7 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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.