destination 0.0.1 → 0.0.2

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: 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