jitsu 0.3.0 → 0.4.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.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/VERSION +1 -1
- data/bin/jitsu +6 -2
- data/features/jitsu.feature +18 -7
- data/features/step_definitions/jitsu_steps.rb +7 -1
- data/features/support/hooks.rb +6 -0
- data/jitsu.gemspec +8 -2
- data/lib/jitsu/errors.rb +34 -0
- data/lib/jitsu.rb +63 -45
- data/lib/schema.yaml +29 -0
- data/spec/jitsu_spec.rb +14 -56
- data/watchr_srcipt.rb +3 -3
- metadata +29 -15
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -17,6 +17,7 @@ GEM
|
|
17
17
|
git (>= 1.2.5)
|
18
18
|
rake
|
19
19
|
json (1.4.6)
|
20
|
+
kwalify (0.7.2)
|
20
21
|
rake (0.8.7)
|
21
22
|
rcov (0.9.9)
|
22
23
|
rspec (2.3.0)
|
@@ -38,6 +39,7 @@ DEPENDENCIES
|
|
38
39
|
bundler (~> 1.0.0)
|
39
40
|
cucumber
|
40
41
|
jeweler (~> 1.5.2)
|
42
|
+
kwalify (~> 0.7.2)
|
41
43
|
rcov
|
42
44
|
rspec (~> 2.3.0)
|
43
45
|
trollop (~> 1.16.2)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/bin/jitsu
CHANGED
data/features/jitsu.feature
CHANGED
@@ -18,7 +18,7 @@ Feature: Build C++ programs
|
|
18
18
|
"""
|
19
19
|
---
|
20
20
|
targets:
|
21
|
-
target
|
21
|
+
- name: target
|
22
22
|
type: executable
|
23
23
|
sources:
|
24
24
|
- main.cpp
|
@@ -51,13 +51,13 @@ Feature: Build C++ programs
|
|
51
51
|
"""
|
52
52
|
---
|
53
53
|
targets:
|
54
|
-
hello
|
54
|
+
- name: hello
|
55
55
|
type: executable
|
56
56
|
sources:
|
57
57
|
- main.cpp
|
58
58
|
dependencies:
|
59
59
|
- lib.a
|
60
|
-
lib.a
|
60
|
+
- name: lib.a
|
61
61
|
type: static_library
|
62
62
|
sources:
|
63
63
|
- lib.cpp
|
@@ -98,11 +98,11 @@ Feature: Build C++ programs
|
|
98
98
|
"""
|
99
99
|
---
|
100
100
|
targets:
|
101
|
-
lib.so
|
101
|
+
- name: lib.so
|
102
102
|
type: dynamic_library
|
103
103
|
sources:
|
104
104
|
- lib.cpp
|
105
|
-
blah
|
105
|
+
- name: blah
|
106
106
|
type: executable
|
107
107
|
sources:
|
108
108
|
- main.cpp
|
@@ -145,11 +145,11 @@ Feature: Build C++ programs
|
|
145
145
|
"""
|
146
146
|
---
|
147
147
|
targets:
|
148
|
-
lib.la
|
148
|
+
- name: lib.la
|
149
149
|
type: libtool_library
|
150
150
|
sources:
|
151
151
|
- lib.cpp
|
152
|
-
blah
|
152
|
+
- name: blah
|
153
153
|
type: executable
|
154
154
|
sources:
|
155
155
|
- main.cpp
|
@@ -161,3 +161,14 @@ Feature: Build C++ programs
|
|
161
161
|
And I run "libtool --mode=execute ./blah"
|
162
162
|
Then the output should be "Hello World" with a newline
|
163
163
|
|
164
|
+
Scenario: Try to run on invalid build.jitsu file
|
165
|
+
Given a directory
|
166
|
+
And a file "build.jitsu" with contents
|
167
|
+
"""
|
168
|
+
---
|
169
|
+
blah:
|
170
|
+
type: executable
|
171
|
+
sources:
|
172
|
+
- main.cpp
|
173
|
+
"""
|
174
|
+
Then running jitsu should produce an error
|
@@ -15,7 +15,7 @@ end
|
|
15
15
|
|
16
16
|
When /^I run jitsu$/ do
|
17
17
|
Dir.chdir @tmpdir do |dir|
|
18
|
-
Jitsu.
|
18
|
+
Jitsu.work
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -32,3 +32,9 @@ Then /^the output should be "([^"]*)" with a newline$/ do |desired|
|
|
32
32
|
@output.should == desired + "\n"
|
33
33
|
end
|
34
34
|
|
35
|
+
Then /^running jitsu should produce an error$/ do
|
36
|
+
Dir.chdir @tmpdir do |dir|
|
37
|
+
expect { Jitsu.work }.to raise_error(Jitsu::SyntaxError)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/jitsu.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jitsu}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ilkka Laukkanen"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-21}
|
13
13
|
s.default_executable = %q{jitsu}
|
14
14
|
s.description = %q{Jitsu is a frontend or meta build system for Ninja
|
15
15
|
(http://github.com/martine/ninja), a lightning-fast but
|
@@ -39,8 +39,11 @@ buildfiles.
|
|
39
39
|
"features/jitsu.feature",
|
40
40
|
"features/step_definitions/jitsu_steps.rb",
|
41
41
|
"features/support/env.rb",
|
42
|
+
"features/support/hooks.rb",
|
42
43
|
"jitsu.gemspec",
|
43
44
|
"lib/jitsu.rb",
|
45
|
+
"lib/jitsu/errors.rb",
|
46
|
+
"lib/schema.yaml",
|
44
47
|
"spec/jitsu_spec.rb",
|
45
48
|
"spec/spec_helper.rb",
|
46
49
|
"watchr_srcipt.rb"
|
@@ -60,6 +63,7 @@ buildfiles.
|
|
60
63
|
|
61
64
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
65
|
s.add_runtime_dependency(%q<trollop>, ["~> 1.16.2"])
|
66
|
+
s.add_runtime_dependency(%q<kwalify>, ["~> 0.7.2"])
|
63
67
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
64
68
|
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
65
69
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
@@ -68,6 +72,7 @@ buildfiles.
|
|
68
72
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
69
73
|
else
|
70
74
|
s.add_dependency(%q<trollop>, ["~> 1.16.2"])
|
75
|
+
s.add_dependency(%q<kwalify>, ["~> 0.7.2"])
|
71
76
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
72
77
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
73
78
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
@@ -77,6 +82,7 @@ buildfiles.
|
|
77
82
|
end
|
78
83
|
else
|
79
84
|
s.add_dependency(%q<trollop>, ["~> 1.16.2"])
|
85
|
+
s.add_dependency(%q<kwalify>, ["~> 0.7.2"])
|
80
86
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
81
87
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
82
88
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
data/lib/jitsu/errors.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Exception classes for Jitsu module
|
2
|
+
#
|
3
|
+
module Jitsu
|
4
|
+
|
5
|
+
# Base class for Jitsu errors.
|
6
|
+
#
|
7
|
+
class JitsuError < StandardError
|
8
|
+
end
|
9
|
+
|
10
|
+
# Jitsufile syntax error.
|
11
|
+
#
|
12
|
+
class SyntaxError < JitsuError
|
13
|
+
|
14
|
+
# Construct a new SyntaxError.
|
15
|
+
#
|
16
|
+
# @param jitsufile [String] path to file where error happened.
|
17
|
+
# @param msg [String] error message.
|
18
|
+
# @param errors [Enumerable] list of errors from Kwalify, or nil.
|
19
|
+
def initialize(jitsufile, msg, errors=nil)
|
20
|
+
message = msg
|
21
|
+
if errors and errors.is_a?(Enumerable)and not errors.empty?
|
22
|
+
message << ":"
|
23
|
+
errors.each do |err|
|
24
|
+
message << "\n"
|
25
|
+
message << (err.filename ? err.filename : jitsufile) << ":"
|
26
|
+
message << (err.linenum ? "#{err.linenum}" : "0") << ":"
|
27
|
+
message << err.path << " -- " << err.message
|
28
|
+
end
|
29
|
+
end
|
30
|
+
super(message)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/lib/jitsu.rb
CHANGED
@@ -1,9 +1,24 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'kwalify'
|
2
3
|
|
4
|
+
require 'jitsu/errors'
|
5
|
+
|
6
|
+
# Main Jitsu module.
|
7
|
+
#
|
8
|
+
# Usage:
|
9
|
+
#
|
10
|
+
# Dir.chdir 'directory-with-jitsufiles'
|
11
|
+
# Jitsu.work
|
3
12
|
module Jitsu
|
4
13
|
JITSU_FILE_NAME = 'build.jitsu'
|
5
14
|
NINJA_FILE_NAME = 'build.ninja'
|
6
15
|
|
16
|
+
# Process jitsufiles in current directory.
|
17
|
+
#
|
18
|
+
def self.work
|
19
|
+
Jitsu.output(Jitsu.read(Jitsu.jitsufile))
|
20
|
+
end
|
21
|
+
|
7
22
|
# Get path to ninja.
|
8
23
|
#
|
9
24
|
# @return [String] path to `ninja` or nil if ninja was not found.
|
@@ -32,7 +47,14 @@ module Jitsu
|
|
32
47
|
# @param jitsufile [String] path to jitsu file from e.g. Jitsu::jitsufile.
|
33
48
|
# @return [Hash] a hash of the build specification.
|
34
49
|
def self.read(jitsufile)
|
35
|
-
YAML.
|
50
|
+
schema = YAML.load_file(File.join(File.dirname(__FILE__), 'schema.yaml'))
|
51
|
+
validator = Kwalify::Validator.new(schema)
|
52
|
+
parser = Kwalify::Yaml::Parser.new(validator)
|
53
|
+
doc = parser.parse(File.read(jitsufile))
|
54
|
+
if parser.errors and not parser.errors.empty?
|
55
|
+
raise Jitsu::SyntaxError.new(jitsufile, "Syntax errors in Jitsufile", parser.errors)
|
56
|
+
end
|
57
|
+
doc
|
36
58
|
end
|
37
59
|
|
38
60
|
# Check if any of the targets needs libtool.
|
@@ -40,7 +62,7 @@ module Jitsu
|
|
40
62
|
# @param targets [Enum] the targets from a build specification hash.
|
41
63
|
# @return [Boolean] true if libtool required, nil otherwise.
|
42
64
|
def self.libtool_needed_for(targets)
|
43
|
-
not targets.select { |
|
65
|
+
not targets.select { |target| target['type'] == 'libtool_library' }.empty?
|
44
66
|
end
|
45
67
|
|
46
68
|
# Output jitsu build specification as build.ninja file(s).
|
@@ -88,12 +110,12 @@ rule ltlink
|
|
88
110
|
command = ${libtool} --quiet --mode=link ${ld} ${ldflags} -o ${out} ${in}
|
89
111
|
EOS
|
90
112
|
end
|
91
|
-
data['targets'].each do |target
|
113
|
+
data['targets'].each do |target|
|
92
114
|
f.write "\n"
|
93
|
-
sources =
|
94
|
-
Jitsu.send "handle_#{
|
115
|
+
sources = target['sources']
|
116
|
+
Jitsu.send "handle_#{target['type']}".to_sym, f, target, sources, data['targets']
|
95
117
|
end
|
96
|
-
f.write("\nbuild all: phony || #{data['targets'].
|
118
|
+
f.write("\nbuild all: phony || #{data['targets'].map { |t| t['name'] }.join(' ')}\n")
|
97
119
|
end
|
98
120
|
end
|
99
121
|
|
@@ -102,10 +124,10 @@ EOS
|
|
102
124
|
# @param out [IO] the output stream where output is written.
|
103
125
|
# @param sources [Enumerable] a list of sourcefile names to output rules
|
104
126
|
# for.
|
105
|
-
# @param
|
106
|
-
def self.output_sources(out, sources,
|
107
|
-
cxxflags =
|
108
|
-
libtool =
|
127
|
+
# @param target [Hash] the entire build spec hash for this target.
|
128
|
+
def self.output_sources(out, sources, target)
|
129
|
+
cxxflags = target['cxxflags']
|
130
|
+
libtool = target['type'] == 'libtool_library'
|
109
131
|
rule = (libtool ? "ltcxx" : "cxx")
|
110
132
|
sources.each do |src|
|
111
133
|
object = (libtool ? source_to_ltobject(src) : source_to_object(src))
|
@@ -117,74 +139,70 @@ EOS
|
|
117
139
|
# Output build rules for one executable target.
|
118
140
|
#
|
119
141
|
# @param out [IO] the output stream where output is written.
|
120
|
-
# @param target [
|
142
|
+
# @param target [Hash] the entire build spec hash for this target.
|
121
143
|
# @param sources [Enumerable] a list of sourcefile names to output rules
|
122
144
|
# for.
|
123
|
-
# @param conf [Hash] the entire build spec hash for this target.
|
124
145
|
# @param targets [Hash] all targets for the build
|
125
|
-
def self.handle_executable(out, target, sources,
|
126
|
-
output_sources(out, sources,
|
127
|
-
libtool = libtool_needed_for targets.select { |
|
128
|
-
|
146
|
+
def self.handle_executable(out, target, sources, targets)
|
147
|
+
output_sources(out, sources, target)
|
148
|
+
libtool = libtool_needed_for targets.select { |tgt|
|
149
|
+
target['dependencies'] and target['dependencies'].include? tgt['name']
|
129
150
|
}
|
130
151
|
rule = libtool ? "ltlink" : "link"
|
131
|
-
out.write "build #{target}: #{rule} #{sources_to_objects(sources).join ' '}"
|
132
|
-
out.write " #{
|
152
|
+
out.write "build #{target['name']}: #{rule} #{sources_to_objects(sources).join ' '}"
|
153
|
+
out.write " #{target['dependencies'].join(' ')}" if target['dependencies']
|
133
154
|
out.write "\n"
|
134
|
-
out.write " ldflags = #{
|
155
|
+
out.write " ldflags = #{target['ldflags']}\n" if target['ldflags']
|
135
156
|
end
|
136
157
|
|
137
158
|
# Output build rules for one static library target.
|
138
159
|
#
|
139
160
|
# @param out [IO] the output stream where output is written.
|
140
|
-
# @param target [
|
161
|
+
# @param target [Hash] the entire build spec hash for this target.
|
141
162
|
# @param sources [Enumerable] a list of sourcefile names to output rules
|
142
163
|
# for.
|
143
|
-
# @param conf [Hash] the entire build spec hash for this target.
|
144
164
|
# @param targets [Hash] all targets for the build
|
145
|
-
def self.handle_static_library(out, target, sources,
|
146
|
-
output_sources(out, sources,
|
147
|
-
out.write "build #{target}: archive #{sources_to_objects(sources).join ' '}"
|
148
|
-
out.write " #{
|
165
|
+
def self.handle_static_library(out, target, sources, targets)
|
166
|
+
output_sources(out, sources, target)
|
167
|
+
out.write "build #{target['name']}: archive #{sources_to_objects(sources).join ' '}"
|
168
|
+
out.write " #{target['dependencies'].join(' ')}" if target['dependencies']
|
149
169
|
out.write "\n"
|
150
170
|
end
|
151
171
|
|
152
172
|
# Output build rules for one dynamic library target.
|
153
173
|
#
|
154
174
|
# @param out [IO] the output stream where output is written.
|
155
|
-
# @param target [
|
175
|
+
# @param target [Hash] the entire build spec hash for this target.
|
156
176
|
# @param sources [Enumerable] a list of sourcefile names to output rules
|
157
177
|
# for.
|
158
|
-
# @param conf [Hash] the entire build spec hash for this target.
|
159
178
|
# @param targets [Hash] all targets for the build
|
160
|
-
def self.handle_dynamic_library(out, target, sources,
|
161
|
-
|
162
|
-
|
163
|
-
output_sources(out, sources,
|
164
|
-
out.write "build #{target}: link #{sources_to_objects(sources).join ' '}"
|
165
|
-
out.write " #{
|
179
|
+
def self.handle_dynamic_library(out, target, sources, targets)
|
180
|
+
target['cxxflags'] ||= '${cxxflags}'
|
181
|
+
target['cxxflags'] += ' -fPIC'
|
182
|
+
output_sources(out, sources, target)
|
183
|
+
out.write "build #{target['name']}: link #{sources_to_objects(sources).join ' '}"
|
184
|
+
out.write " #{target['dependencies'].join(' ')}" if target['dependencies']
|
166
185
|
out.write "\n"
|
167
|
-
|
168
|
-
|
169
|
-
out.write " ldflags = #{
|
186
|
+
target['ldflags'] ||= '${ldflags}'
|
187
|
+
target['ldflags'] += " -shared -Wl,-soname,#{target['name']}"
|
188
|
+
out.write " ldflags = #{target['ldflags']}\n"
|
170
189
|
end
|
171
190
|
|
172
191
|
# Output build rules for one libtool library target.
|
173
192
|
#
|
174
193
|
# @param out [IO] the output stream where output is written.
|
175
|
-
# @param target [
|
194
|
+
# @param target [Hash] the entire build spec hash for this target.
|
176
195
|
# @param sources [Enumerable] a list of sourcefile names to output rules
|
177
196
|
# for.
|
178
|
-
# @param conf [Hash] the entire build spec hash for this target.
|
179
197
|
# @param targets [Hash] all targets for the build
|
180
|
-
def self.handle_libtool_library(out, target, sources,
|
181
|
-
output_sources(out, sources,
|
182
|
-
out.write "build #{target}: ltlink #{sources_to_ltobjects(sources).join ' '}"
|
183
|
-
out.write " #{
|
198
|
+
def self.handle_libtool_library(out, target, sources, targets)
|
199
|
+
output_sources(out, sources, target)
|
200
|
+
out.write "build #{target['name']}: ltlink #{sources_to_ltobjects(sources).join ' '}"
|
201
|
+
out.write " #{target['dependencies'].join(' ')}" if target['dependencies']
|
184
202
|
out.write "\n"
|
185
|
-
|
186
|
-
|
187
|
-
out.write " ldflags = #{
|
203
|
+
target['ldflags'] ||= '${ldflags}'
|
204
|
+
target['ldflags'] += " -rpath /usr/local/lib"
|
205
|
+
out.write " ldflags = #{target['ldflags']}\n"
|
188
206
|
end
|
189
207
|
|
190
208
|
# Convert sourcefile name to corresponding object file name.
|
data/lib/schema.yaml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
type: map
|
2
|
+
mapping:
|
3
|
+
"targets":
|
4
|
+
type: seq
|
5
|
+
required: yes
|
6
|
+
sequence:
|
7
|
+
- type: map
|
8
|
+
mapping:
|
9
|
+
"name":
|
10
|
+
type: str
|
11
|
+
required: yes
|
12
|
+
unique: yes
|
13
|
+
"type":
|
14
|
+
type: str
|
15
|
+
required: yes
|
16
|
+
"sources":
|
17
|
+
type: seq
|
18
|
+
sequence:
|
19
|
+
- type: str
|
20
|
+
unique: yes
|
21
|
+
"dependencies":
|
22
|
+
type: seq
|
23
|
+
sequence:
|
24
|
+
- type: str
|
25
|
+
unique: yes
|
26
|
+
"cxxflags":
|
27
|
+
type: str
|
28
|
+
"ldflags":
|
29
|
+
type: str
|
data/spec/jitsu_spec.rb
CHANGED
@@ -52,13 +52,14 @@ describe "Jitsu" do
|
|
52
52
|
f.write <<-EOS
|
53
53
|
---
|
54
54
|
targets:
|
55
|
-
test1
|
55
|
+
- name: test1
|
56
56
|
type: executable
|
57
|
-
sources:
|
57
|
+
sources:
|
58
|
+
- test1.cpp
|
58
59
|
cxxflags: -g -Wall
|
59
60
|
dependencies:
|
60
61
|
- test2
|
61
|
-
test2
|
62
|
+
- name: test2
|
62
63
|
type: static_library
|
63
64
|
sources:
|
64
65
|
- test2.cpp
|
@@ -66,7 +67,7 @@ targets:
|
|
66
67
|
EOS
|
67
68
|
end
|
68
69
|
data = Jitsu.read Jitsu.jitsufile
|
69
|
-
data['targets'].
|
70
|
+
data['targets'].map { |x| x['name'] }.should == ['test1', 'test2']
|
70
71
|
end
|
71
72
|
end
|
72
73
|
Dir.mktmpdir do |dir|
|
@@ -75,7 +76,7 @@ EOS
|
|
75
76
|
f.write <<-EOS
|
76
77
|
---
|
77
78
|
targets:
|
78
|
-
aaa1
|
79
|
+
- name: aaa1
|
79
80
|
type: executable
|
80
81
|
sources:
|
81
82
|
- aaa1a.cpp
|
@@ -83,7 +84,7 @@ targets:
|
|
83
84
|
cxxflags: -g -Wall
|
84
85
|
dependencies:
|
85
86
|
- aaa2
|
86
|
-
aaa2
|
87
|
+
- name: aaa2
|
87
88
|
type: dynamic_library
|
88
89
|
sources:
|
89
90
|
- aaa2.cpp
|
@@ -91,7 +92,7 @@ targets:
|
|
91
92
|
EOS
|
92
93
|
end
|
93
94
|
data = Jitsu.read Jitsu.jitsufile
|
94
|
-
data['targets'].
|
95
|
+
data['targets'].map { |x| x['name'] }.should == ['aaa1', 'aaa2']
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
@@ -103,7 +104,7 @@ EOS
|
|
103
104
|
f.write <<-EOS
|
104
105
|
---
|
105
106
|
targets:
|
106
|
-
aaa1
|
107
|
+
- name: aaa1
|
107
108
|
type: executable
|
108
109
|
sources:
|
109
110
|
- aaa1a.cpp
|
@@ -111,12 +112,12 @@ targets:
|
|
111
112
|
dependencies:
|
112
113
|
- aaa2.a
|
113
114
|
- aaa3.so
|
114
|
-
aaa2.a
|
115
|
+
- name: aaa2.a
|
115
116
|
type: static_library
|
116
117
|
sources:
|
117
118
|
- aaa2.cpp
|
118
119
|
cxxflags: -ansi -pedantic
|
119
|
-
aaa3.so
|
120
|
+
- name: aaa3.so
|
120
121
|
type: dynamic_library
|
121
122
|
sources:
|
122
123
|
- aaa3.cpp
|
@@ -145,27 +146,6 @@ rule archive
|
|
145
146
|
description = AR ${out}
|
146
147
|
command = ${ar} rT ${out} ${in}
|
147
148
|
|
148
|
-
EOS
|
149
|
-
# the targets are reversed on 1.8.7 :p
|
150
|
-
if RUBY_VERSION.start_with? '1.8'
|
151
|
-
ninjafile += <<-EOS
|
152
|
-
build aaa3.o: cxx aaa3.cpp
|
153
|
-
cxxflags = ${cxxflags} -fPIC
|
154
|
-
build aaa3.so: link aaa3.o
|
155
|
-
ldflags = ${ldflags} -shared -Wl,-soname,aaa3.so
|
156
|
-
|
157
|
-
build aaa2.o: cxx aaa2.cpp
|
158
|
-
cxxflags = -ansi -pedantic
|
159
|
-
build aaa2.a: archive aaa2.o
|
160
|
-
|
161
|
-
build aaa1a.o: cxx aaa1a.cpp
|
162
|
-
build aaa1b.o: cxx aaa1b.cpp
|
163
|
-
build aaa1: link aaa1a.o aaa1b.o aaa2.a aaa3.so
|
164
|
-
|
165
|
-
build all: phony || aaa3.so aaa2.a aaa1
|
166
|
-
EOS
|
167
|
-
else
|
168
|
-
ninjafile += <<-EOS
|
169
149
|
build aaa1a.o: cxx aaa1a.cpp
|
170
150
|
build aaa1b.o: cxx aaa1b.cpp
|
171
151
|
build aaa1: link aaa1a.o aaa1b.o aaa2.a aaa3.so
|
@@ -181,7 +161,6 @@ build aaa3.so: link aaa3.o
|
|
181
161
|
|
182
162
|
build all: phony || aaa1 aaa2.a aaa3.so
|
183
163
|
EOS
|
184
|
-
end
|
185
164
|
File.open('build.ninja', 'r').read.should == ninjafile
|
186
165
|
end
|
187
166
|
end
|
@@ -194,7 +173,7 @@ EOS
|
|
194
173
|
f.write <<-EOS
|
195
174
|
---
|
196
175
|
targets:
|
197
|
-
aaa1
|
176
|
+
- name: aaa1
|
198
177
|
type: executable
|
199
178
|
sources:
|
200
179
|
- aaa1a.cpp
|
@@ -202,12 +181,12 @@ targets:
|
|
202
181
|
dependencies:
|
203
182
|
- aaa2.a
|
204
183
|
- aaa3.la
|
205
|
-
aaa2.a
|
184
|
+
- name: aaa2.a
|
206
185
|
type: static_library
|
207
186
|
sources:
|
208
187
|
- aaa2.cpp
|
209
188
|
cxxflags: -ansi -pedantic
|
210
|
-
aaa3.la
|
189
|
+
- name: aaa3.la
|
211
190
|
type: libtool_library
|
212
191
|
sources:
|
213
192
|
- aaa3.cpp
|
@@ -246,26 +225,6 @@ rule ltlink
|
|
246
225
|
description = LD ${out}
|
247
226
|
command = ${libtool} --quiet --mode=link ${ld} ${ldflags} -o ${out} ${in}
|
248
227
|
|
249
|
-
EOS
|
250
|
-
# the targets are reversed on 1.8.7 :p
|
251
|
-
if RUBY_VERSION.start_with? '1.8'
|
252
|
-
ninjafile += <<-EOS
|
253
|
-
build aaa3.lo: ltcxx aaa3.cpp
|
254
|
-
build aaa3.la: ltlink aaa3.lo
|
255
|
-
ldflags = ${ldflags} -rpath /usr/local/lib
|
256
|
-
|
257
|
-
build aaa2.o: cxx aaa2.cpp
|
258
|
-
cxxflags = -ansi -pedantic
|
259
|
-
build aaa2.a: archive aaa2.o
|
260
|
-
|
261
|
-
build aaa1a.o: cxx aaa1a.cpp
|
262
|
-
build aaa1b.o: cxx aaa1b.cpp
|
263
|
-
build aaa1: ltlink aaa1a.o aaa1b.o aaa2.a aaa3.la
|
264
|
-
|
265
|
-
build all: phony || aaa3.la aaa2.a aaa1
|
266
|
-
EOS
|
267
|
-
else
|
268
|
-
ninjafile += <<-EOS
|
269
228
|
build aaa1a.o: cxx aaa1a.cpp
|
270
229
|
build aaa1b.o: cxx aaa1b.cpp
|
271
230
|
build aaa1: ltlink aaa1a.o aaa1b.o aaa2.a aaa3.la
|
@@ -280,7 +239,6 @@ build aaa3.la: ltlink aaa3.lo
|
|
280
239
|
|
281
240
|
build all: phony || aaa1 aaa2.a aaa3.la
|
282
241
|
EOS
|
283
|
-
end
|
284
242
|
File.open('build.ninja', 'r').read.should == ninjafile
|
285
243
|
end
|
286
244
|
end
|
data/watchr_srcipt.rb
CHANGED
@@ -6,7 +6,7 @@ def run_features
|
|
6
6
|
system("rake features")
|
7
7
|
end
|
8
8
|
|
9
|
-
watch('
|
10
|
-
|
11
|
-
|
9
|
+
watch('spec/.*\.rb$') {|md| run_specs}
|
10
|
+
watch('features/.*\.(feature|rb)$') {|md| run_features}
|
11
|
+
watch('(bin/jitsu|lib/.*\.(rb|yaml)$)') {|md| run_specs && run_features}
|
12
12
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jitsu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ilkka Laukkanen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-21 00:00:00 +02:00
|
14
14
|
default_executable: jitsu
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,8 +25,19 @@ dependencies:
|
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: kwalify
|
29
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.7.2
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rspec
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
30
41
|
none: false
|
31
42
|
requirements:
|
32
43
|
- - ~>
|
@@ -34,10 +45,10 @@ dependencies:
|
|
34
45
|
version: 2.3.0
|
35
46
|
type: :development
|
36
47
|
prerelease: false
|
37
|
-
version_requirements: *
|
48
|
+
version_requirements: *id003
|
38
49
|
- !ruby/object:Gem::Dependency
|
39
50
|
name: yard
|
40
|
-
requirement: &
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
52
|
none: false
|
42
53
|
requirements:
|
43
54
|
- - ~>
|
@@ -45,10 +56,10 @@ dependencies:
|
|
45
56
|
version: 0.6.0
|
46
57
|
type: :development
|
47
58
|
prerelease: false
|
48
|
-
version_requirements: *
|
59
|
+
version_requirements: *id004
|
49
60
|
- !ruby/object:Gem::Dependency
|
50
61
|
name: cucumber
|
51
|
-
requirement: &
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
52
63
|
none: false
|
53
64
|
requirements:
|
54
65
|
- - ">="
|
@@ -56,10 +67,10 @@ dependencies:
|
|
56
67
|
version: "0"
|
57
68
|
type: :development
|
58
69
|
prerelease: false
|
59
|
-
version_requirements: *
|
70
|
+
version_requirements: *id005
|
60
71
|
- !ruby/object:Gem::Dependency
|
61
72
|
name: bundler
|
62
|
-
requirement: &
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
63
74
|
none: false
|
64
75
|
requirements:
|
65
76
|
- - ~>
|
@@ -67,10 +78,10 @@ dependencies:
|
|
67
78
|
version: 1.0.0
|
68
79
|
type: :development
|
69
80
|
prerelease: false
|
70
|
-
version_requirements: *
|
81
|
+
version_requirements: *id006
|
71
82
|
- !ruby/object:Gem::Dependency
|
72
83
|
name: jeweler
|
73
|
-
requirement: &
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
74
85
|
none: false
|
75
86
|
requirements:
|
76
87
|
- - ~>
|
@@ -78,10 +89,10 @@ dependencies:
|
|
78
89
|
version: 1.5.2
|
79
90
|
type: :development
|
80
91
|
prerelease: false
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *id007
|
82
93
|
- !ruby/object:Gem::Dependency
|
83
94
|
name: rcov
|
84
|
-
requirement: &
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
85
96
|
none: false
|
86
97
|
requirements:
|
87
98
|
- - ">="
|
@@ -89,7 +100,7 @@ dependencies:
|
|
89
100
|
version: "0"
|
90
101
|
type: :development
|
91
102
|
prerelease: false
|
92
|
-
version_requirements: *
|
103
|
+
version_requirements: *id008
|
93
104
|
description: |
|
94
105
|
Jitsu is a frontend or meta build system for Ninja
|
95
106
|
(http://github.com/martine/ninja), a lightning-fast but
|
@@ -121,8 +132,11 @@ files:
|
|
121
132
|
- features/jitsu.feature
|
122
133
|
- features/step_definitions/jitsu_steps.rb
|
123
134
|
- features/support/env.rb
|
135
|
+
- features/support/hooks.rb
|
124
136
|
- jitsu.gemspec
|
125
137
|
- lib/jitsu.rb
|
138
|
+
- lib/jitsu/errors.rb
|
139
|
+
- lib/schema.yaml
|
126
140
|
- spec/jitsu_spec.rb
|
127
141
|
- spec/spec_helper.rb
|
128
142
|
- watchr_srcipt.rb
|
@@ -140,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
154
|
requirements:
|
141
155
|
- - ">="
|
142
156
|
- !ruby/object:Gem::Version
|
143
|
-
hash:
|
157
|
+
hash: 10677997
|
144
158
|
segments:
|
145
159
|
- 0
|
146
160
|
version: "0"
|