destination 0.0.3 → 0.1.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 +4 -4
- data/.gitignore +3 -0
- data/Gemfile.lock +32 -0
- data/lib/dest.rb +3 -0
- data/lib/dest/project/base.rb +33 -2
- data/lib/dest/rake.rb +87 -37
- data/lib/dest/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 097b24f39873e393a93fa196eafaa61f65ca1d11
|
4
|
+
data.tar.gz: 311237b8696731bda8c796a5dac78850f0cd686e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c025dcd871e7f0927cfdf4d4159c947a4695ba5950ae8677aa52d6a556434565b478683325a20a161a80758186114bdf663825de0b402d7075c3f1060dc51fb3
|
7
|
+
data.tar.gz: 20f46d9dc5b690c67e7b1f08fe3e10bd3809766e9944dddc34515dcc8b57a0fc3bb738eccfdef2ee8f85089d66c0dc33621589064994d61f4724dd9bf2d66816
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
dest (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.2.5)
|
10
|
+
rake (10.3.2)
|
11
|
+
rspec (3.0.0)
|
12
|
+
rspec-core (~> 3.0.0)
|
13
|
+
rspec-expectations (~> 3.0.0)
|
14
|
+
rspec-mocks (~> 3.0.0)
|
15
|
+
rspec-core (3.0.3)
|
16
|
+
rspec-support (~> 3.0.0)
|
17
|
+
rspec-expectations (3.0.3)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.0.0)
|
20
|
+
rspec-mocks (3.0.3)
|
21
|
+
rspec-support (~> 3.0.0)
|
22
|
+
rspec-support (3.0.3)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
bundler (~> 1.5)
|
29
|
+
dest!
|
30
|
+
rake
|
31
|
+
rspec
|
32
|
+
rspec-expectations
|
data/lib/dest.rb
CHANGED
data/lib/dest/project/base.rb
CHANGED
@@ -6,12 +6,22 @@ module Dest
|
|
6
6
|
end
|
7
7
|
|
8
8
|
class Base
|
9
|
-
attr_accessor :dir, :frameworks, :sources, :target
|
9
|
+
attr_accessor :dir, :frameworks, :sources, :target, :compile_flags, :link_flags, :main
|
10
|
+
# Testing stuff
|
11
|
+
attr_accessor :test_frameworks, :test_target, :test_sources
|
12
|
+
|
10
13
|
def initialize dir
|
11
14
|
@dir = dir
|
12
15
|
@frameworks = ['Foundation']
|
13
16
|
@sources = []
|
14
17
|
@target = guess_target
|
18
|
+
@compile_flags = ''
|
19
|
+
@link_flags = ''
|
20
|
+
@main = guess_main
|
21
|
+
|
22
|
+
@test_frameworks = []
|
23
|
+
@test_target = nil
|
24
|
+
@test_sources = []
|
15
25
|
end
|
16
26
|
# def scan_sources
|
17
27
|
# src = Dir[File.join(@dir, 'src', '**/*.m')]
|
@@ -21,13 +31,28 @@ module Dest
|
|
21
31
|
def add_source fn
|
22
32
|
@sources << File.expand_path(fn)
|
23
33
|
end
|
34
|
+
alias :add_source_file :add_source
|
24
35
|
def add_source_directory dir
|
25
|
-
|
36
|
+
glob_sources(dir).each {|fn| @sources << fn }
|
37
|
+
end
|
38
|
+
def add_test_directory dir
|
39
|
+
glob_sources(dir).each {|fn| @test_sources << fn }
|
40
|
+
end
|
41
|
+
|
42
|
+
# Handy utility method to pull in special Xcode frameworks needed for
|
43
|
+
# testing and the like.
|
44
|
+
def include_xcode_frameworks!
|
45
|
+
@compile_flags << "-F #{Dest::Util::XCODE_FRAMEWORKS}"
|
46
|
+
@link_flags << "-F #{Dest::Util::XCODE_FRAMEWORKS} -Wl,-rpath,#{Dest::Util::XCODE_FRAMEWORKS}"
|
26
47
|
end
|
48
|
+
|
27
49
|
def guess_target
|
28
50
|
# Turns '/a/b/c' into just 'c'
|
29
51
|
File.basename dir
|
30
52
|
end
|
53
|
+
def guess_main
|
54
|
+
File.join(@dir, 'main.m')
|
55
|
+
end
|
31
56
|
|
32
57
|
def self.setup dir=nil, &block
|
33
58
|
unless dir
|
@@ -37,6 +62,12 @@ module Dest
|
|
37
62
|
Dest::Project.current = proj
|
38
63
|
block.call proj
|
39
64
|
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def glob_sources dir
|
68
|
+
Dir[File.join dir, '**/*.m'].map {|fn| File.expand_path fn }
|
69
|
+
end
|
70
|
+
|
40
71
|
end
|
41
72
|
end
|
42
73
|
end
|
data/lib/dest/rake.rb
CHANGED
@@ -25,6 +25,9 @@ module Dest
|
|
25
25
|
flags << '-Wall' # All warnings
|
26
26
|
flags << '-emit-llvm'
|
27
27
|
flags << '-fobjc-arc'
|
28
|
+
if project.compile_flags
|
29
|
+
flags << project.compile_flags
|
30
|
+
end
|
28
31
|
@flags = flags.join ' '
|
29
32
|
end
|
30
33
|
|
@@ -33,13 +36,18 @@ module Dest
|
|
33
36
|
dir = File.dirname object
|
34
37
|
FileUtils.mkdir_p dir
|
35
38
|
# Then build
|
36
|
-
|
39
|
+
sh "clang #{source} #{flags} -o #{object}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def time_action name
|
43
|
+
start = Time.now
|
44
|
+
yield
|
45
|
+
diff = ((Time.now - start) * 1000).round
|
46
|
+
puts name + " (#{diff.to_s} ms)".light_black
|
37
47
|
end
|
38
48
|
|
39
49
|
# Set up rake hooks
|
40
50
|
def setup
|
41
|
-
# puts project.sources.inspect
|
42
|
-
# puts project.target
|
43
51
|
@build_dir = File.join project.dir, 'build'
|
44
52
|
unless Dir.exists? @build_dir
|
45
53
|
Dir.mkdir @build_dir
|
@@ -52,52 +60,94 @@ module Dest
|
|
52
60
|
puts "Built #{File.basename project.target}".green
|
53
61
|
end
|
54
62
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
time_action "Linking #{File.basename target} from #{objects.length.to_s} objects" do
|
62
|
-
# Then figure out our frameworks and objects
|
63
|
-
objects = objects.join ' '
|
64
|
-
frameworks = project.frameworks.map {|f| "-framework #{f}" }.join ' '
|
65
|
-
system "clang #{objects} -lobjc #{frameworks} -o #{target}"
|
66
|
-
end
|
63
|
+
self.setup_target
|
64
|
+
self.setup_source_files
|
65
|
+
|
66
|
+
if project.test_target
|
67
|
+
self.setup_test_target
|
68
|
+
self.setup_test_files
|
67
69
|
end
|
68
70
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
desc 'Clean up build artifacts and target'
|
72
|
+
task 'clean' do
|
73
|
+
sh "rm -f #{project.target}"
|
74
|
+
project.sources.each do |fn|
|
75
|
+
fn = objectsify fn
|
76
|
+
sh "rm -f #{fn}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
namespace 'test' do
|
81
|
+
desc 'Build the test target'
|
82
|
+
task 'build' => project.test_target do
|
83
|
+
puts "Built #{File.basename project.test_target}".green
|
84
|
+
end
|
85
|
+
desc 'Clean test build artifacts'
|
86
|
+
task 'clean' do
|
87
|
+
sh "rm -f #{project.test_target}"
|
88
|
+
project.test_sources.each do |fn|
|
89
|
+
fn = objectsify fn
|
90
|
+
sh "rm -f #{fn}"
|
91
|
+
end
|
92
|
+
end
|
74
93
|
end
|
94
|
+
|
95
|
+
end#setup
|
96
|
+
|
97
|
+
# Build the target file from the sources
|
98
|
+
def setup_target
|
99
|
+
link_target_task project.target, (project.sources + [project.main]).map {|fn| objectsify fn }
|
100
|
+
end
|
75
101
|
|
76
|
-
|
102
|
+
# Set up a file task for every source file
|
103
|
+
def setup_source_files
|
77
104
|
project.sources.each do |src|
|
78
105
|
# Figure out where stuff should come from and go to
|
79
106
|
source_file = src
|
80
107
|
object_file = objectsify src
|
81
|
-
|
82
|
-
file object_file => source_file do |t|
|
83
|
-
# Try to strip off the leading directory
|
84
|
-
fn = src.sub project.dir+'/', ''
|
85
|
-
time_action "Compiling #{fn}" do
|
86
|
-
compile source_file, object_file
|
87
|
-
end
|
88
|
-
end
|
108
|
+
compile_task object_file, source_file
|
89
109
|
end#project.sources.each
|
110
|
+
end#setup_source_files
|
111
|
+
|
112
|
+
# Set up test source files and test target tasks
|
113
|
+
def setup_test_files
|
114
|
+
project.test_sources.each do |src|
|
115
|
+
compile_task objectsify(src), src
|
116
|
+
end
|
117
|
+
end
|
118
|
+
def setup_test_target
|
119
|
+
link_target_task project.test_target,
|
120
|
+
(project.sources + project.test_sources).map {|fn| objectsify fn },
|
121
|
+
:frameworks => project.test_frameworks
|
122
|
+
end
|
90
123
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
124
|
+
private
|
125
|
+
def compile_task object, source
|
126
|
+
file object => source do |t|
|
127
|
+
# Try to strip off the leading directory
|
128
|
+
fn = source.sub project.dir+'/', ''
|
129
|
+
time_action "Compiling #{fn}" do
|
130
|
+
compile source, object
|
97
131
|
end
|
98
132
|
end
|
99
|
-
|
100
|
-
|
133
|
+
end
|
134
|
+
def link_target_task target, objects, opts = {}
|
135
|
+
file target => objects do |t|
|
136
|
+
# Little message
|
137
|
+
time_action "Linking #{File.basename target} from #{objects.length.to_s} objects" do
|
138
|
+
# Then figure out our frameworks and objects
|
139
|
+
objects = objects.join ' '
|
140
|
+
frameworks = project.frameworks
|
141
|
+
if opts[:frameworks]
|
142
|
+
opts[:frameworks].each {|f| frameworks << f }
|
143
|
+
end
|
144
|
+
# Concatenate all the frameworks together
|
145
|
+
frameworks = frameworks.map {|f| "-framework #{f}" }.join ' '
|
146
|
+
flags = project.link_flags || ''
|
147
|
+
sh "clang #{objects} -lobjc #{frameworks} #{flags} -o #{target}"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end#link_target_task
|
101
151
|
|
102
152
|
end#Rake
|
103
153
|
end#Dest
|
data/lib/dest/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: destination
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dirk Gadsden
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- ".gitignore"
|
103
103
|
- ".rspec"
|
104
104
|
- Gemfile
|
105
|
+
- Gemfile.lock
|
105
106
|
- LICENSE
|
106
107
|
- README.md
|
107
108
|
- dest.gemspec
|