destination 0.0.1 → 0.0.2

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: 51cf1d14a0c68b2167284b5cb4be5d8ae66d6a9b
4
- data.tar.gz: c44b499d6d4181c7957b32e5e75e3209f2c22120
3
+ metadata.gz: 9172790a783af746bd3b9860a06d304fd9252065
4
+ data.tar.gz: 174dbf1b3d5a570745e8f4e91b6beb611dd509a6
5
5
  SHA512:
6
- metadata.gz: 7331348cf976737cc1b7bcd4c6d360e3122b5d4b232ecad73057afb919e0b373b8ef03bf8b5a434d2754bbcd96a2a06e3da6d12e17dbba00434eee8e0321da2d
7
- data.tar.gz: 4b97cee34f568fc21302a09116f7d18f987ca34b7237e4325f2d10d0d149a04947cb5464cae940929442a9ff244e2495cf8f1d57836a8b5a2841321ce6be3357
6
+ metadata.gz: 18f7315f37c901dd4b12b4862570f9a4c20bb4708b5f405842a633e1234025a4b5aee8df94be173215e760871c11d1c641f80da2d1fccf3bb4d99dd680dafb73
7
+ data.tar.gz: f2dd718c9e7e7de7f52bb3372002c9302bc62e9dd279382984ac26f033992ec1d9acd2073aac521a805199c0741a54c1e0c354cf40665aef27867d138dd56ff2
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+
3
+ *.gem
4
+ **/*.bc
data/README.md CHANGED
@@ -6,9 +6,9 @@ Thing is, though, Obj-C and Clang *don't actually need Xcode*. Destination (shor
6
6
 
7
7
  ### Getting started
8
8
 
9
- ```
9
+ ```bash
10
10
  # Clone the repo
11
- ...
11
+ git clone https://github.com/dirk/dest.git
12
12
  # Go into the test project directory
13
13
  cd test/project
14
14
  # Invoke destination
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rake", '~> 3.0', '>= 3.0.0'
22
+ spec.add_dependency 'colorize', '~> 0.7'
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.5"
24
25
  spec.add_development_dependency "rspec", '~> 3.0', '>= 3.0.0'
@@ -1,4 +1,6 @@
1
1
 
2
+ require 'colorize'
3
+
2
4
  require 'dest/version'
3
5
  require 'dest/project/base'
4
6
 
@@ -6,18 +6,23 @@ module Dest
6
6
  end
7
7
 
8
8
  class Base
9
- attr_reader :dir
10
- attr_accessor :frameworks, :sources, :target
9
+ attr_accessor :dir, :frameworks, :sources, :target
11
10
  def initialize dir
12
11
  @dir = dir
13
12
  @frameworks = ['Foundation']
14
- @sources = scan_sources
15
- @target = guess_target
13
+ @sources = []
14
+ @target = guess_target
16
15
  end
17
- def scan_sources
18
- src = Dir[File.join(@dir, 'src', '*.m')]
19
- root = Dir[File.join(@dir, '*.m')]
20
- return src + root
16
+ # def scan_sources
17
+ # src = Dir[File.join(@dir, 'src', '**/*.m')]
18
+ # root = Dir[File.join(@dir, '*.m')]
19
+ # return src + root
20
+ # end
21
+ def add_source fn
22
+ @sources << File.expand_path(fn)
23
+ end
24
+ def add_source_directory dir
25
+ Dir[File.join dir, '**/*.m'].map {|fn| File.expand_path fn }.each {|fn| @sources << fn }
21
26
  end
22
27
  def guess_target
23
28
  # Turns '/a/b/c' into just 'c'
@@ -29,7 +29,11 @@ module Dest
29
29
  end
30
30
 
31
31
  def compile source, object
32
- sh "clang #{source} #{flags} -o #{object}"
32
+ # Ensure we have the directory
33
+ dir = File.dirname object
34
+ FileUtils.mkdir_p dir
35
+ # Then build
36
+ system "clang #{source} #{flags} -o #{object}"
33
37
  end
34
38
 
35
39
  # Set up rake hooks
@@ -41,9 +45,11 @@ module Dest
41
45
  Dir.mkdir @build_dir
42
46
  end
43
47
 
48
+ task 'default' => 'build'
49
+
44
50
  desc 'Build the project'
45
51
  task 'build' => project.target do
46
- puts "Built #{File.basename project.target}"
52
+ puts "Built #{File.basename project.target}".green
47
53
  end
48
54
 
49
55
  # Build the sources into their objects via the rule below
@@ -52,11 +58,19 @@ module Dest
52
58
  target = t.name
53
59
  objects = t.prerequisites
54
60
  # Little message
55
- puts "Linking #{File.basename target} from #{objects.length.to_s} objects"
56
- # Then figure out our frameworks and objects
57
- objects = objects.join ' '
58
- frameworks = project.frameworks.map {|f| "-framework #{f}" }.join ' '
59
- sh "clang #{objects} -lobjc #{frameworks} -o #{target}"
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
67
+ end
68
+
69
+ def time_action name
70
+ start = Time.now
71
+ yield
72
+ diff = ((Time.now - start) * 1000).round
73
+ puts name + " (#{diff.to_s} ms)".light_black
60
74
  end
61
75
 
62
76
  # Set up a file task for every source file to catch changes
@@ -66,13 +80,24 @@ module Dest
66
80
  object_file = objectsify src
67
81
 
68
82
  file object_file => source_file do |t|
69
- basename = File.basename src
70
- puts "Compiling #{basename}"
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
89
+ end#project.sources.each
71
90
 
72
- compile source_file, object_file
91
+ desc 'Clean up build artifacts and target'
92
+ task 'clean' do
93
+ system "rm -f #{project.target}"
94
+ project.sources.each do |fn|
95
+ fn = objectsify fn
96
+ system "rm -f #{fn}"
73
97
  end
74
98
  end
75
99
 
76
- end#self.setup
100
+ end#setup
101
+
77
102
  end#Rake
78
103
  end#Dest
@@ -1,3 +1,3 @@
1
1
  module Dest
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -6,5 +6,7 @@ require 'dest/rake'
6
6
 
7
7
  Dest::Project::Base.setup do |proj|
8
8
  proj.frameworks << 'Cocoa'
9
+ proj.add_source 'main.m'
10
+ proj.add_source_directory 'Example'
9
11
  end
10
12
  Dest::Rake.setup
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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dirk Gadsden
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: colorize
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.7'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.7'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: bundler
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +105,7 @@ executables: []
91
105
  extensions: []
92
106
  extra_rdoc_files: []
93
107
  files:
108
+ - ".gitignore"
94
109
  - ".rspec"
95
110
  - Gemfile
96
111
  - LICENSE