cxxproject 0.6.9 → 0.6.10
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/Rakefile.rb +0 -2
- data/lib/cxxproject/context.rb +1 -2
- data/lib/{cxxproject.rb → cxxproject/cxxproject.rb} +15 -11
- data/lib/cxxproject/ext/hash.rb +12 -0
- data/lib/cxxproject/plugin_context.rb +13 -14
- data/lib/cxxproject/toolchain/toolchain.rb +2 -16
- data/lib/cxxproject/version.rb +1 -1
- metadata +10 -26
- data/bin/cxx +0 -10
- data/lib/cxxproject/torake.rb +0 -257
- data/lib/cxxproject/utils/console.rb +0 -6
- data/lib/tools/Rakefile.rb.template +0 -10
- data/lib/tools/project.rb.template +0 -6
- data/lib/tools/project_wizard.rb +0 -113
data/Rakefile.rb
CHANGED
data/lib/cxxproject/context.rb
CHANGED
@@ -3,25 +3,29 @@ require 'rubygems'
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'rake/clean'
|
5
5
|
|
6
|
-
require 'cxxproject/utils/optional'
|
7
6
|
|
8
7
|
require 'cxxproject/ext/string'
|
8
|
+
require 'cxxproject/ext/hash'
|
9
|
+
|
10
|
+
require 'cxxproject/utils/optional'
|
9
11
|
require 'cxxproject/utils/utils'
|
10
|
-
require 'cxxproject/
|
11
|
-
|
12
|
-
require 'cxxproject/utils/graphstream'
|
12
|
+
require 'cxxproject/utils/stats'
|
13
|
+
|
13
14
|
require 'cxxproject/toolchain/provider'
|
14
15
|
|
15
|
-
require 'cxxproject/utils/progress'
|
16
|
-
require 'cxxproject/utils/rbcurse'
|
17
|
-
require 'cxxproject/utils/progress'
|
18
|
-
require 'cxxproject/utils/rbcurse'
|
19
|
-
require 'cxxproject/utils/stats'
|
20
16
|
require 'cxxproject/version'
|
21
17
|
|
18
|
+
require 'cxxproject/plugin_context'
|
19
|
+
|
20
|
+
require 'frazzle/frazzle'
|
21
|
+
registry = Frazzle::Registry.new('cxxproject', '_', '')
|
22
|
+
|
23
|
+
toolchain_plugins = registry.get_plugins('toolchain')
|
24
|
+
toolchain_plugins.each do |toolchain_plugin|
|
25
|
+
registry.load_plugin(toolchain_plugin, Cxxproject::PluginContext.new(nil, nil, nil))
|
26
|
+
end
|
27
|
+
|
22
28
|
include Cxxproject::Toolchain
|
23
|
-
CxxProject2Rake = Cxxproject::CxxProject2Rake
|
24
|
-
BinaryLibs = Cxxproject::BinaryLibs
|
25
29
|
|
26
30
|
def version_info
|
27
31
|
Cxxproject::Version.cxxproject
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Hash
|
2
|
+
def method_missing(m, *args, &block)
|
3
|
+
if m.to_s =~ /(.*)=$/ # was assignment
|
4
|
+
self[$1] = args[0]
|
5
|
+
else
|
6
|
+
fetch(m.to_s, nil)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
def recursive_merge(h)
|
10
|
+
self.merge!(h) {|key, _old, _new| if _old.class == Hash then _old.recursive_merge(_new) else _new end }
|
11
|
+
end
|
12
|
+
end
|
@@ -34,13 +34,13 @@ module Cxxproject
|
|
34
34
|
# * :command
|
35
35
|
def toolchain(name, tc)
|
36
36
|
raise "not a tc" unless tc.is_a?(Hash)
|
37
|
-
check_hash(tc,Provider.default.keys)
|
37
|
+
check_hash(tc, Cxxproject::Toolchain::Provider.default.keys)
|
38
38
|
check_compiler(tc[:COMPILER]) if tc[:COMPILER]
|
39
39
|
check_linker(tc[:LINKER]) if tc[:LINKER]
|
40
40
|
check_archiver(tc[:ARCHIVER]) if tc[:ARCHIVER]
|
41
41
|
PluginContext::expand(tc)
|
42
|
-
Provider.add(name)
|
43
|
-
Provider.merge(Provider[name], tc)
|
42
|
+
Cxxproject::Toolchain::Provider.add(name)
|
43
|
+
Cxxproject::Toolchain::Provider.merge(Cxxproject::Toolchain::Provider[name], tc)
|
44
44
|
end
|
45
45
|
|
46
46
|
def self.expand(toolchain)
|
@@ -50,7 +50,7 @@ module Cxxproject
|
|
50
50
|
to_expand = find_toolchain_subhash(toolchain)
|
51
51
|
from = find_toolchain_element(toolchain,to_expand[:BASED_ON])
|
52
52
|
to_expand.delete(:BASED_ON)
|
53
|
-
Cxxproject::Toolchain::Provider.merge(to_expand,from,false)
|
53
|
+
Cxxproject::Toolchain::Provider.merge(to_expand, from, false)
|
54
54
|
end
|
55
55
|
return toolchain
|
56
56
|
end
|
@@ -60,7 +60,7 @@ module Cxxproject
|
|
60
60
|
tc.each do |k,v|
|
61
61
|
if k == :BASED_ON
|
62
62
|
res = true
|
63
|
-
elsif v.is_a?(Hash)
|
63
|
+
elsif v.is_a?(Hash)
|
64
64
|
res = needs_expansion(v)
|
65
65
|
end
|
66
66
|
if res
|
@@ -76,7 +76,7 @@ module Cxxproject
|
|
76
76
|
tc.each do |k,v|
|
77
77
|
if(k == :BASED_ON)
|
78
78
|
res << tc
|
79
|
-
elsif v.is_a?(Hash)
|
79
|
+
elsif v.is_a?(Hash)
|
80
80
|
loop.call(res,v)
|
81
81
|
end
|
82
82
|
end
|
@@ -84,7 +84,7 @@ module Cxxproject
|
|
84
84
|
loop.call(res,tc)
|
85
85
|
return res[0] if res.length > 0
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
|
89
89
|
def self.find_toolchain_element(tc,name)
|
90
90
|
res = []
|
@@ -104,21 +104,20 @@ module Cxxproject
|
|
104
104
|
|
105
105
|
def check_compiler(hash)
|
106
106
|
raise "not a hash" unless hash.is_a?(Hash)
|
107
|
-
check_hash(hash,Provider.default[:COMPILER].keys)
|
108
|
-
|
109
|
-
check_hash(hash[:
|
110
|
-
check_hash(hash[:
|
111
|
-
check_hash(hash[:ASM],Provider.default[:COMPILER][:ASM].keys << :BASED_ON) if hash[:ASM]
|
107
|
+
check_hash(hash, Cxxproject::Toolchain::Provider.default[:COMPILER].keys)
|
108
|
+
check_hash(hash[:CPP], Cxxproject::Toolchain::Provider.default[:COMPILER][:CPP].keys << :BASED_ON) if hash[:CPP]
|
109
|
+
check_hash(hash[:C], Cxxproject::Toolchain::Provider.default[:COMPILER][:C].keys << :BASED_ON) if hash[:C]
|
110
|
+
check_hash(hash[:ASM], Cxxproject::Toolchain::Provider.default[:COMPILER][:ASM].keys << :BASED_ON) if hash[:ASM]
|
112
111
|
end
|
113
112
|
|
114
113
|
def check_linker(hash)
|
115
114
|
raise "not a hash" unless hash.is_a?(Hash)
|
116
|
-
check_hash(hash,Provider.default[:LINKER].keys)
|
115
|
+
check_hash(hash, Cxxproject::Toolchain::Provider.default[:LINKER].keys)
|
117
116
|
end
|
118
117
|
|
119
118
|
def check_archiver(hash)
|
120
119
|
raise "not a hash" unless hash.is_a?(Hash)
|
121
|
-
check_hash(hash,Provider.default[:ARCHIVER].keys)
|
120
|
+
check_hash(hash, Cxxproject::Toolchain::Provider.default[:ARCHIVER].keys)
|
122
121
|
end
|
123
122
|
|
124
123
|
# will use the content of the plugin.rb file and evaluate it
|
@@ -1,19 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
|
-
class Hash
|
4
|
-
def method_missing(m, *args, &block)
|
5
|
-
if m.to_s =~ /(.*)=$/ # was assignment
|
6
|
-
self[$1] = args[0]
|
7
|
-
else
|
8
|
-
fetch(m.to_s, nil)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
def recursive_merge(h)
|
12
|
-
self.merge!(h) {|key, _old, _new| if _old.class == Hash then _old.recursive_merge(_new) else _new end }
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
3
|
class Toolchain
|
18
4
|
attr_reader :toolchain
|
19
5
|
def initialize(toolchain_file)
|
@@ -26,13 +12,13 @@ class Toolchain
|
|
26
12
|
basechain = YAML::load(File.open(File.join(File.dirname(__FILE__),"#{@based_on}.json")))
|
27
13
|
@toolchain = basechain.recursive_merge(@toolchain)
|
28
14
|
end
|
29
|
-
def method_missing(m, *args, &block)
|
15
|
+
def method_missing(m, *args, &block)
|
30
16
|
if @toolchain[m.to_s]
|
31
17
|
self.class.send(:define_method, m) { @toolchain[m.to_s] }
|
32
18
|
@toolchain[m.to_s]
|
33
19
|
else
|
34
20
|
return super
|
35
21
|
end
|
36
|
-
end
|
22
|
+
end
|
37
23
|
|
38
24
|
end
|
data/lib/cxxproject/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: cxxproject
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.6.
|
5
|
+
version: 0.6.10
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- oliver mueller
|
@@ -10,21 +10,21 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-07-
|
13
|
+
date: 2012-07-12 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: colored
|
17
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: "0"
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
|
-
name:
|
27
|
+
name: frazzle
|
28
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
@@ -34,21 +34,10 @@ dependencies:
|
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: progressbar
|
39
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: "0"
|
45
|
-
type: :runtime
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: *id003
|
48
37
|
description: " Some more high level building blocks for cpp projects.\n"
|
49
38
|
email: oliver.mueller@gmail.com
|
50
|
-
executables:
|
51
|
-
|
39
|
+
executables: []
|
40
|
+
|
52
41
|
extensions: []
|
53
42
|
|
54
43
|
extra_rdoc_files: []
|
@@ -68,7 +57,6 @@ files:
|
|
68
57
|
- lib/cxxproject/utils/rbcurse_executable_ext.rb
|
69
58
|
- lib/cxxproject/utils/utils.rb
|
70
59
|
- lib/cxxproject/utils/rbcurse_tasktable.rb
|
71
|
-
- lib/cxxproject/utils/console.rb
|
72
60
|
- lib/cxxproject/utils/progress.rb
|
73
61
|
- lib/cxxproject/utils/graphstream.rb
|
74
62
|
- lib/cxxproject/toolchain/provider.rb
|
@@ -82,11 +70,11 @@ files:
|
|
82
70
|
- lib/cxxproject/ext/rake.rb
|
83
71
|
- lib/cxxproject/ext/progressbar.rb
|
84
72
|
- lib/cxxproject/ext/stdout.rb
|
73
|
+
- lib/cxxproject/ext/hash.rb
|
85
74
|
- lib/cxxproject/ext/rake_dirty.rb
|
86
75
|
- lib/cxxproject/ext/file.rb
|
87
76
|
- lib/cxxproject/context.rb
|
88
77
|
- lib/cxxproject/plugin_context.rb
|
89
|
-
- lib/cxxproject/torake.rb
|
90
78
|
- lib/cxxproject/buildingblocks/building_block.rb
|
91
79
|
- lib/cxxproject/buildingblocks/has_libraries_mixin.rb
|
92
80
|
- lib/cxxproject/buildingblocks/custom_building_block.rb
|
@@ -101,8 +89,7 @@ files:
|
|
101
89
|
- lib/cxxproject/buildingblocks/source_library.rb
|
102
90
|
- lib/cxxproject/buildingblocks/command_line.rb
|
103
91
|
- lib/cxxproject/eval_context.rb
|
104
|
-
- lib/
|
105
|
-
- lib/cxxproject.rb
|
92
|
+
- lib/cxxproject/cxxproject.rb
|
106
93
|
- Rakefile.rb
|
107
94
|
- spec/string_spec.rb
|
108
95
|
- spec/project_path_spec.rb
|
@@ -124,9 +111,6 @@ files:
|
|
124
111
|
- spec/cxxproject_2_rake_spec.rb
|
125
112
|
- spec/toolchain_spec.rb
|
126
113
|
- spec/rake_listener_ext_spec.rb
|
127
|
-
- lib/tools/Rakefile.rb.template
|
128
|
-
- lib/tools/project.rb.template
|
129
|
-
- bin/cxx
|
130
114
|
homepage: https://github.com/marcmo/cxxproject
|
131
115
|
licenses: []
|
132
116
|
|
@@ -140,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
124
|
requirements:
|
141
125
|
- - ">="
|
142
126
|
- !ruby/object:Gem::Version
|
143
|
-
hash: -
|
127
|
+
hash: -240781837461888490
|
144
128
|
segments:
|
145
129
|
- 0
|
146
130
|
version: "0"
|
data/bin/cxx
DELETED
data/lib/cxxproject/torake.rb
DELETED
@@ -1,257 +0,0 @@
|
|
1
|
-
require 'logger'
|
2
|
-
require 'pp'
|
3
|
-
require 'pathname'
|
4
|
-
require 'cxxproject/ext/rake'
|
5
|
-
require 'cxxproject/buildingblocks/module'
|
6
|
-
require 'cxxproject/buildingblocks/makefile'
|
7
|
-
require 'cxxproject/buildingblocks/executable'
|
8
|
-
require 'cxxproject/buildingblocks/source_library'
|
9
|
-
require 'cxxproject/buildingblocks/single_source'
|
10
|
-
require 'cxxproject/buildingblocks/binary_library'
|
11
|
-
require 'cxxproject/buildingblocks/custom_building_block'
|
12
|
-
require 'cxxproject/buildingblocks/command_line'
|
13
|
-
require 'cxxproject/toolchain/colorizing_formatter'
|
14
|
-
require 'cxxproject/eval_context'
|
15
|
-
require 'cxxproject/plugin_context'
|
16
|
-
|
17
|
-
require 'rubygems'
|
18
|
-
|
19
|
-
module Cxxproject
|
20
|
-
|
21
|
-
class CxxProject2Rake
|
22
|
-
attr_accessor :base_dir, :all_tasks
|
23
|
-
|
24
|
-
def initialize(projects, build_dir, toolchain_name, base_dir='.', &option_block)
|
25
|
-
load_toolchain_plugins
|
26
|
-
option_block.call if option_block
|
27
|
-
toolchain = Provider[toolchain_name]
|
28
|
-
raise "no provider with name \"#{toolchain_name}\" found" unless toolchain
|
29
|
-
@base_dir = base_dir
|
30
|
-
cd(@base_dir, :verbose => false) do
|
31
|
-
@projects = projects.to_a
|
32
|
-
end
|
33
|
-
|
34
|
-
# TODO: this should be cleaned up somehow...
|
35
|
-
if Utils::OS.linux?
|
36
|
-
toolchain[:LINKER][:LIB_PREFIX_FLAGS] = "-Wl,--whole-archive"
|
37
|
-
toolchain[:LINKER][:LIB_POSTFIX_FLAGS] = "-Wl,--no-whole-archive"
|
38
|
-
end
|
39
|
-
|
40
|
-
Rake::application.deriveIncludes = true
|
41
|
-
|
42
|
-
initialize_logging(build_dir)
|
43
|
-
@all_tasks = instantiate_tasks(toolchain, build_dir)
|
44
|
-
|
45
|
-
create_generic_tasks
|
46
|
-
create_console_colorization
|
47
|
-
create_multitask
|
48
|
-
create_dont_bail_on_first_task
|
49
|
-
describe_clean_task
|
50
|
-
create_console_task
|
51
|
-
|
52
|
-
load_nontoolchain_plugins
|
53
|
-
end
|
54
|
-
|
55
|
-
def find_gems
|
56
|
-
latest = Gem::Specification.latest_specs
|
57
|
-
latest.select do |gem|
|
58
|
-
yield(gem)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def load_toolchain_plugins
|
63
|
-
toolchains = find_gems do |gem|
|
64
|
-
Regexp.new('cxxproject_(.+)toolchain').match(gem.name)
|
65
|
-
end
|
66
|
-
load_gems(toolchains)
|
67
|
-
end
|
68
|
-
|
69
|
-
def load_nontoolchain_plugins
|
70
|
-
cxx = Regexp.new('cxxproject_(.+)')
|
71
|
-
no_toolchain = Regexp.new('.*toolchain.*')
|
72
|
-
gems_to_load = find_gems do |gem|
|
73
|
-
cxx.match(gem.name) && !(no_toolchain.match(gem.name))
|
74
|
-
end
|
75
|
-
load_gems(gems_to_load)
|
76
|
-
end
|
77
|
-
|
78
|
-
def load_gems(gems)
|
79
|
-
context = PluginContext.new(self, ALL_BUILDING_BLOCKS, @log)
|
80
|
-
gems.each do |gem|
|
81
|
-
load_plugin(gem, context)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def load_plugin(gem, pluginContext)
|
86
|
-
begin
|
87
|
-
path = File.join(gem.full_gem_path, 'lib', 'plugin.rb')
|
88
|
-
content = File.read(path)
|
89
|
-
pluginContext.eval_plugin(content)
|
90
|
-
rescue Exception => e
|
91
|
-
puts "problems with gem #{gem} in dir: #{path}: #{e}"
|
92
|
-
raise e
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def create_console_task
|
97
|
-
require 'cxxproject/utils/console'
|
98
|
-
end
|
99
|
-
|
100
|
-
def initialize_logging(build_dir)
|
101
|
-
@log = Logger.new(STDOUT)
|
102
|
-
@log.formatter = proc { |severity, datetime, progname, msg|
|
103
|
-
"#{severity}: #{msg}\n"
|
104
|
-
}
|
105
|
-
# Logger loglevels: fatal, error, warn, info, debug
|
106
|
-
# Rake --verbose -> info
|
107
|
-
# Rake --trace -> debug
|
108
|
-
@log.level = Logger::ERROR
|
109
|
-
@log.level = Logger::INFO if RakeFileUtils.verbose == true
|
110
|
-
@log.level = Logger::DEBUG if Rake::application.options.trace
|
111
|
-
@log.debug "initializing for build_dir: \"#{build_dir}\", base_dir: \"#{@base_dir}\""
|
112
|
-
end
|
113
|
-
|
114
|
-
def describe_clean_task
|
115
|
-
Rake::Task[:clean].add_description('clean')
|
116
|
-
end
|
117
|
-
|
118
|
-
def create_dont_bail_on_first_task
|
119
|
-
desc 'dont bail on first error'
|
120
|
-
task :dont_bail_on_first_error do
|
121
|
-
Rake::Task.bail_on_first_error = false
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def create_multitask
|
126
|
-
desc 'set parallelization of multitask'
|
127
|
-
task :multitask, :threads do |t, args|
|
128
|
-
arg = args.threads
|
129
|
-
if arg
|
130
|
-
Rake::application.max_parallel_tasks = arg.to_i
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def create_console_colorization
|
136
|
-
# default is on
|
137
|
-
Cxxproject::ColorizingFormatter.enabled = true
|
138
|
-
desc 'Toggle colorization of console output (use true|t|yes|y|1|on for true ... everything else is false)'
|
139
|
-
task :toggle_colorize, :on_off do |t, args|
|
140
|
-
arg = args[:on_off] || 'false'
|
141
|
-
on_off = arg.match(/(true|t|yes|y|1|on)$/) != nil
|
142
|
-
Cxxproject::ColorizingFormatter.enabled = on_off
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def create_generic_tasks
|
147
|
-
tasks = [:lib, :exe, :run]
|
148
|
-
tasks << nil
|
149
|
-
tasks.each { |i| create_filter_task_with_namespace(i) }
|
150
|
-
end
|
151
|
-
|
152
|
-
def create_filter_task_with_namespace(basename)
|
153
|
-
if basename
|
154
|
-
desc "invoke #{basename} with filter"
|
155
|
-
namespace basename do
|
156
|
-
create_filter_task("#{basename}:")
|
157
|
-
end
|
158
|
-
else
|
159
|
-
desc 'invoke with filter'
|
160
|
-
create_filter_task('')
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def create_filter_task(basename)
|
165
|
-
task :filter, :filter do |t, args|
|
166
|
-
filter = ".*"
|
167
|
-
if args[:filter]
|
168
|
-
filter = "#{args[:filter]}"
|
169
|
-
end
|
170
|
-
filter = Regexp.new("#{basename}#{filter}")
|
171
|
-
Rake::Task.tasks.each do |to_check|
|
172
|
-
name = to_check.name
|
173
|
-
if ("#{basename}:filter" != name)
|
174
|
-
match = filter.match(name)
|
175
|
-
if match
|
176
|
-
to_check.invoke
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def instantiate_tasks(toolchain, build_dir)
|
184
|
-
check_for_project_configs
|
185
|
-
|
186
|
-
if @log.debug?
|
187
|
-
@log.debug "project_configs:"
|
188
|
-
@projects.each { |c| @log.debug " * #{c}" }
|
189
|
-
end
|
190
|
-
register_projects()
|
191
|
-
ALL_BUILDING_BLOCKS.values.each do |block|
|
192
|
-
prepare_block(block, toolchain, build_dir)
|
193
|
-
end
|
194
|
-
ALL_BUILDING_BLOCKS.values.inject([]) do |memo,block|
|
195
|
-
@log.debug "creating tasks for block: #{block.name}/taskname: #{block.get_task_name} (#{block})"
|
196
|
-
memo << block.convert_to_rake()
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
def check_for_project_configs
|
201
|
-
cd(@base_dir, :verbose => false) do
|
202
|
-
@projects.each do |p|
|
203
|
-
abort "project config #{p} cannot be found!" unless File.exists?(p)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def prepare_block(block, toolchain, build_dir)
|
209
|
-
block.set_tcs(toolchain) unless block.has_tcs?
|
210
|
-
block.set_output_dir(Dir.pwd + "/" + build_dir)
|
211
|
-
block.complete_init()
|
212
|
-
end
|
213
|
-
|
214
|
-
def register_projects()
|
215
|
-
cd(@base_dir,:verbose => false) do |b|
|
216
|
-
@projects.each_with_index do |project_file, i|
|
217
|
-
@log.debug "register project #{project_file}"
|
218
|
-
dirname = File.dirname(project_file)
|
219
|
-
@log.debug "dirname for project was: #{dirname}"
|
220
|
-
cd(dirname,:verbose => false) do | base_dir |
|
221
|
-
@log.debug "register project #{project_file} from within directory: #{Dir.pwd}"
|
222
|
-
eval_file(b, File.basename(project_file))
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
def eval_file(b, project_file)
|
229
|
-
loadContext = EvalContext.new
|
230
|
-
begin
|
231
|
-
loadContext.eval_project(File.read(File.basename(project_file)), project_file, Dir.pwd)
|
232
|
-
rescue Exception => e
|
233
|
-
puts "problems with #{File.join(b, project_file)} in dir: #{Dir.pwd}"
|
234
|
-
raise e
|
235
|
-
end
|
236
|
-
|
237
|
-
loadContext.all_blocks.each do |block|
|
238
|
-
block.
|
239
|
-
set_project_dir(Dir.pwd).
|
240
|
-
set_config_files([Dir.pwd + "/" + project_file])
|
241
|
-
if block.respond_to?(:sources) && block.sources.instance_of?(Rake::FileList)
|
242
|
-
block.set_sources(block.sources.to_a)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
def define_project_info_task
|
248
|
-
desc "shows your defined projects"
|
249
|
-
task :project_info do
|
250
|
-
ALL_BUILDING_BLOCKS.each_value do |bb|
|
251
|
-
pp bb
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
end
|
257
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'cxxproject'
|
2
|
-
BuildDir = "BuildDir"
|
3
|
-
|
4
|
-
unittest_flags = {
|
5
|
-
:DEFINES => ['UNIT_TEST','CPPUNIT_MAIN=main'],
|
6
|
-
:FLAGS => "-O0 -g3 -Wall"
|
7
|
-
}
|
8
|
-
toolchain = Provider.modify_cpp_compiler("<%= toolchain %>", unittest_flags)
|
9
|
-
dependent_projects = ['./project.rb']
|
10
|
-
CxxProject2Rake.new(dependent_projects, BuildDir, toolchain, './')
|
data/lib/tools/project_wizard.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'erb'
|
3
|
-
require 'rubygems'
|
4
|
-
|
5
|
-
def prepare_project(dir_name)
|
6
|
-
begin
|
7
|
-
require 'highline/import'
|
8
|
-
|
9
|
-
say "This will create a new cxx-project in directory: '#{dir_name}'"
|
10
|
-
if confirm("Are you sure you want to continue") then
|
11
|
-
building_block = choose_building_block
|
12
|
-
generate_makefile = confirm("Do you also whant to generate a rakefile", building_block.eql?("exe"))
|
13
|
-
|
14
|
-
toolchain = nil
|
15
|
-
if generate_makefile then
|
16
|
-
toolchain = choose_toolchain
|
17
|
-
return unless toolchain
|
18
|
-
end
|
19
|
-
|
20
|
-
create_project(dir_name, building_block, toolchain, generate_makefile)
|
21
|
-
say "Completed project-setup ;-)"
|
22
|
-
else
|
23
|
-
say "Stopped project-setup!"
|
24
|
-
end
|
25
|
-
|
26
|
-
rescue Interrupt
|
27
|
-
say "\nStopped project-setup!"
|
28
|
-
rescue LoadError
|
29
|
-
say "Please run 'gem install highline'"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def choose_building_block
|
34
|
-
res = nil
|
35
|
-
choose do |menu|
|
36
|
-
say "What building-block do you whant to create?"
|
37
|
-
menu.choice(:exe) { res = "exe" }
|
38
|
-
menu.choice(:lib) { res = "source_lib" }
|
39
|
-
menu.prompt = "Select a building-block: "
|
40
|
-
end
|
41
|
-
res
|
42
|
-
end
|
43
|
-
|
44
|
-
def choose_toolchain
|
45
|
-
res = nil
|
46
|
-
toolchains = []
|
47
|
-
toolchain_pattern = /cxxproject_(.*)toolchain/
|
48
|
-
Gem::Specification.find_all do |gem|
|
49
|
-
if gem.name =~ toolchain_pattern then
|
50
|
-
toolchains << $1
|
51
|
-
end
|
52
|
-
end
|
53
|
-
if toolchains.length > 0 then
|
54
|
-
choose do |menu|
|
55
|
-
say "What toolchain do you whant to use?"
|
56
|
-
toolchains.each do |toolchain|
|
57
|
-
menu.choice(toolchain.to_sym) { res = toolchain }
|
58
|
-
end
|
59
|
-
menu.prompt = "Select a toolchain: "
|
60
|
-
end
|
61
|
-
else
|
62
|
-
say "No toolchains installed!"
|
63
|
-
candidates = `gem list --remote "cxxproject_.*toolchain"`
|
64
|
-
say "You need at least one toolchain-plugin,- candidates are:\n#{candidates}"
|
65
|
-
end
|
66
|
-
res
|
67
|
-
end
|
68
|
-
|
69
|
-
def create_project(dir_name, building_block, toolchain, generate_rakefile)
|
70
|
-
rakefile_template = IO.read(File.join(File.dirname(__FILE__),"..","tools","Rakefile.rb.template"))
|
71
|
-
project_template = IO.read(File.join(File.dirname(__FILE__),"..","tools","project.rb.template"))
|
72
|
-
binding = create_binding("new-item", building_block, toolchain)
|
73
|
-
|
74
|
-
if !File.directory?(dir_name) then
|
75
|
-
mkdir_p(dir_name, :verbose => false)
|
76
|
-
end
|
77
|
-
|
78
|
-
rakefile_file = "#{dir_name}/Rakefile.rb"
|
79
|
-
if generate_rakefile && (!File.exists?(rakefile_file) || confirm("Override existing '#{rakefile_file}'")) then
|
80
|
-
write_template(rakefile_file, rakefile_template, binding)
|
81
|
-
end
|
82
|
-
|
83
|
-
project_file = "#{dir_name}/project.rb"
|
84
|
-
if !File.exists?(project_file) || confirm("Override existing '#{project_file}'") then
|
85
|
-
write_template(project_file, project_template, binding)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def create_binding(name, building_block, toolchain)
|
90
|
-
return binding()
|
91
|
-
end
|
92
|
-
|
93
|
-
def write_template(file_name, template, binding)
|
94
|
-
say "...write: '#{file_name}'"
|
95
|
-
File.open(file_name, 'w') do |f|
|
96
|
-
f.write ERB.new(template).result(binding)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def confirm(question, default = true)
|
101
|
-
res = nil
|
102
|
-
while res == nil
|
103
|
-
confirm = ask("#{question}? ") { |q| q.default = default ? "Y/n" : "y/N" }
|
104
|
-
if confirm.eql?("Y/n") || confirm.downcase.eql?("yes") || confirm.downcase.eql?("y") then
|
105
|
-
res = true
|
106
|
-
elsif confirm.eql?("y/N") || confirm.downcase.eql?("no") || confirm.downcase.eql?("n") then
|
107
|
-
res = false
|
108
|
-
else
|
109
|
-
say "Please enter \"yes\" or \"no\"."
|
110
|
-
end
|
111
|
-
end
|
112
|
-
return res
|
113
|
-
end
|