motion.h 0.0.2 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/Rakefile +6 -0
- data/lib/motion.h.rb +68 -11
- data/motion.h.gemspec +3 -3
- metadata +16 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 511528c649ad4a3843b64b4a92f5a8f4894d6210
|
4
|
+
data.tar.gz: 3ea00c01f5388e197681382011cf57f5413a358d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d4bc836006f18b002eb46f4879b8f9361ac3f8f202cc3797f7492242cbb6d0f716d8937259450c9225b3c15748359128b3005d6841042af9ca3a3542cacb3ac
|
7
|
+
data.tar.gz: d28c3f961aa804f253b4dd143b3c3f2e1bff62e0bb0cfa8f3fa8ec8be49a2dda7a233c48e1f1cdbe7336c3d62d997721edc20b76d5d9714eea685a41b7980c6c
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# motion.h
|
2
2
|
|
3
|
-
Expose iOS system
|
3
|
+
Expose iOS and OS X system libraries in RubyMotion.
|
4
4
|
|
5
|
-
Outside of the usual Apple frameworks, iOS
|
5
|
+
Outside of the usual Apple frameworks, iOS and OS X include many system libraries,
|
6
6
|
with the most well known examples being [SQLite](http://www.sqlite.org/), and
|
7
7
|
[Libxml2](http://www.xmlsoft.org/). RubyMotion provides the ability to directly
|
8
8
|
call into C libraries through a mechanism called BridgeSupport, which takes us
|
@@ -49,8 +49,20 @@ end
|
|
49
49
|
Example: Creating an in-memory database:
|
50
50
|
|
51
51
|
```ruby
|
52
|
-
|
53
|
-
sqlite3_open(':memory',
|
52
|
+
dbptr_out = Pointer.new(Sqlite3.type) # => sqlite3 **
|
53
|
+
sqlite3_open(':memory:', dbptr_out)
|
54
|
+
dbptr = dbptr_out.value # => sqlite3 *
|
55
|
+
sqlite3_exec(dbptr, 'create table gems (name text)', nil, nil, nil)
|
56
|
+
sqlite3_exec(dbptr, 'insert into gems values ("motion.h")', nil, nil, nil)
|
57
|
+
callback = ->(_context, count, values_array_ptr, column_names_array_ptr) {
|
58
|
+
count.times do |column_number|
|
59
|
+
column_name = column_names_array_ptr[column_number]
|
60
|
+
value = values_array_ptr[column_number]
|
61
|
+
puts "#{column_name}: #{value.inspect}"
|
62
|
+
end
|
63
|
+
0 # sqlite3_exec requires 0 to continue
|
64
|
+
}
|
65
|
+
sqlite3_exec(dbptr, 'select * from gems', callback, nil, nil)
|
54
66
|
```
|
55
67
|
|
56
68
|
### Objective-C Runtime
|
data/Rakefile
CHANGED
data/lib/motion.h.rb
CHANGED
@@ -2,13 +2,31 @@ unless defined? Motion::Project::Config
|
|
2
2
|
raise '"motion.h" must be required within a RubyMotion project Rakefile.'
|
3
3
|
end
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
module Motion::Project
|
6
|
+
class Config
|
7
|
+
# @param [String] header_file Requested C header file.
|
8
|
+
# @param [Hash] options Options for customizing BridgeSupport file generation
|
9
|
+
# @option options [String] :prefix Subdirectory of /usr/include used for root of included header files.
|
10
|
+
# @option options [String] :bridgesupport_dir Path where the generated bridgesupport file is saved. Defaults to ./build
|
11
|
+
def include(header_file, options={})
|
12
|
+
motion_h << MotionHeader.new(header_file, self, options).integrate
|
13
|
+
end
|
14
|
+
|
15
|
+
def motion_h
|
16
|
+
@motion_h ||= []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class App
|
21
|
+
class << self
|
22
|
+
def build_with_motion_h(platform, opts = {})
|
23
|
+
config.bridgesupport_files.concat(config.motion_h)
|
24
|
+
build_without_motion_h(platform, opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method "build_without_motion_h", "build"
|
28
|
+
alias_method "build", "build_with_motion_h"
|
29
|
+
end
|
12
30
|
end
|
13
31
|
end
|
14
32
|
|
@@ -31,7 +49,7 @@ class MotionHeader
|
|
31
49
|
def integrate
|
32
50
|
verify_header_file
|
33
51
|
generate_bridgesupport_file
|
34
|
-
|
52
|
+
bridgesupport_file
|
35
53
|
end
|
36
54
|
|
37
55
|
def verify_header_file
|
@@ -42,16 +60,52 @@ class MotionHeader
|
|
42
60
|
def generate_bridgesupport_file
|
43
61
|
return if File.exist?(bridgesupport_file)
|
44
62
|
Dir.mkdir(@bridgesupport_dir) unless Dir.exist?(@bridgesupport_dir)
|
45
|
-
|
63
|
+
cflags = [
|
64
|
+
"-I#{include_path}",
|
65
|
+
"-F#{frameworks_path}"
|
66
|
+
]
|
67
|
+
if product_version >= catalina_version
|
68
|
+
cflags << "--isysroot #{isysroot_dir}"
|
69
|
+
end
|
70
|
+
Bundler.with_unbundled_env do
|
71
|
+
`/Library/RubyMotion/bin/gen_bridge_metadata --format complete --64-bit --cflags '#{cflags.join(' ')}' #{@header_file} > #{bridgesupport_file}`
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def catalina_version
|
76
|
+
Gem::Version.new('10.15')
|
77
|
+
end
|
78
|
+
|
79
|
+
def product_version
|
80
|
+
Gem::Version.new(`sw_vers -productVersion`)
|
46
81
|
end
|
47
82
|
|
48
83
|
def include_path
|
49
|
-
|
84
|
+
sdk_dir = sdk_dir(@config.sdk_version)
|
85
|
+
path_components = [@config.xcode_dir, *sdk_dir, 'usr', 'include', @prefix].compact
|
50
86
|
File.join(*path_components)
|
51
87
|
end
|
52
88
|
|
89
|
+
def frameworks_path
|
90
|
+
sdk_dir = sdk_dir(@config.sdk_version)
|
91
|
+
path_components = [@config.xcode_dir, *sdk_dir, 'System', 'Library', 'Frameworks'].compact
|
92
|
+
File.join(*path_components)
|
93
|
+
end
|
94
|
+
|
95
|
+
def isysroot_dir
|
96
|
+
case platform
|
97
|
+
when :ios then 'iPhoneOS'
|
98
|
+
when :osx then 'MacOSX'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
53
102
|
def sdk_dir(sdk_version)
|
54
|
-
|
103
|
+
case platform
|
104
|
+
when :ios
|
105
|
+
['Platforms', 'iPhoneOS.platform', 'Developer', 'SDKs', "iPhoneOS#{sdk_version}.sdk"]
|
106
|
+
when :osx
|
107
|
+
['Platforms', 'MacOSX.platform', 'Developer', 'SDKs', "MacOSX#{sdk_version}.sdk"]
|
108
|
+
end
|
55
109
|
end
|
56
110
|
|
57
111
|
def bridgesupport_file
|
@@ -59,4 +113,7 @@ class MotionHeader
|
|
59
113
|
"#{@bridgesupport_dir}/#{file_name}.bridgesupport"
|
60
114
|
end
|
61
115
|
|
116
|
+
def platform
|
117
|
+
Motion::Project::App.respond_to?(:template) ? Motion::Project::App.template : :ios
|
118
|
+
end
|
62
119
|
end
|
data/motion.h.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = "motion.h"
|
4
|
-
spec.version = '0.0.
|
4
|
+
spec.version = '0.0.7'
|
5
5
|
spec.authors = ["Dave Lee"]
|
6
6
|
spec.email = ['dave@kastiglione.com']
|
7
|
-
spec.description = 'Expose iOS system C libraries in RubyMotion'
|
8
|
-
spec.summary = 'Expose iOS system C libraries in RubyMotion'
|
7
|
+
spec.description = 'Expose iOS system C libraries in RubyMotion.'
|
8
|
+
spec.summary = 'Expose iOS system C libraries in RubyMotion.'
|
9
9
|
spec.homepage = 'https://github.com/kastiglione/motion.h'
|
10
10
|
spec.license = "MIT"
|
11
11
|
|
metadata
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion.h
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Lee
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: Expose iOS system C libraries in RubyMotion
|
41
|
+
description: Expose iOS system C libraries in RubyMotion.
|
42
42
|
email:
|
43
43
|
- dave@kastiglione.com
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .gitignore
|
48
|
+
- ".gitignore"
|
49
49
|
- Gemfile
|
50
50
|
- LICENSE.txt
|
51
51
|
- README.md
|
@@ -56,25 +56,24 @@ homepage: https://github.com/kastiglione/motion.h
|
|
56
56
|
licenses:
|
57
57
|
- MIT
|
58
58
|
metadata: {}
|
59
|
-
post_install_message:
|
59
|
+
post_install_message:
|
60
60
|
rdoc_options: []
|
61
61
|
require_paths:
|
62
62
|
- lib
|
63
63
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- -
|
70
|
+
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
|
-
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
76
|
-
signing_key:
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.5.2.3
|
76
|
+
signing_key:
|
77
77
|
specification_version: 4
|
78
|
-
summary: Expose iOS system C libraries in RubyMotion
|
78
|
+
summary: Expose iOS system C libraries in RubyMotion.
|
79
79
|
test_files: []
|
80
|
-
has_rdoc:
|