cxx 0.1.5
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/.gitignore +1 -0
- data/Rakefile.rb +3 -0
- data/bin/cxx +9 -0
- data/cxx.gemspec +18 -0
- data/lib/cxx.rb +223 -0
- data/lib/cxx/eval_context.rb +126 -0
- data/lib/cxx/wizard/Rakefile.rb.template +11 -0
- data/lib/cxx/wizard/project.rb.template +6 -0
- data/lib/cxx/wizard/project_wizard.rb +113 -0
- metadata +86 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg
|
data/Rakefile.rb
ADDED
data/bin/cxx
ADDED
data/cxx.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
spec = Gem::Specification.new do |s|
|
2
|
+
s.name = 'cxx'
|
3
|
+
s.description = 'ruby-based dsl for cxxproject'
|
4
|
+
s.summary = 'defines the method cxx_configuration'
|
5
|
+
s.version = '0.1.5'
|
6
|
+
s.author = 'christian koestlin'
|
7
|
+
s.email = 'christian.koestlin@gmail.com'
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.files = `git ls-files`.split($\)
|
10
|
+
s.require_path = 'lib'
|
11
|
+
|
12
|
+
s.add_dependency 'cxxproject'
|
13
|
+
s.add_dependency 'highline'
|
14
|
+
|
15
|
+
s.executables = ['cxx']
|
16
|
+
|
17
|
+
s.has_rdoc = false
|
18
|
+
end
|
data/lib/cxx.rb
ADDED
@@ -0,0 +1,223 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
require 'cxxproject/cxxproject'
|
4
|
+
require 'logger'
|
5
|
+
require 'pp'
|
6
|
+
require 'pathname'
|
7
|
+
require 'cxxproject/ext/rake'
|
8
|
+
require 'cxxproject/buildingblocks/module'
|
9
|
+
require 'cxxproject/buildingblocks/makefile'
|
10
|
+
require 'cxxproject/buildingblocks/executable'
|
11
|
+
require 'cxxproject/buildingblocks/source_library'
|
12
|
+
require 'cxxproject/buildingblocks/single_source'
|
13
|
+
require 'cxxproject/buildingblocks/binary_library'
|
14
|
+
require 'cxxproject/buildingblocks/custom_building_block'
|
15
|
+
require 'cxxproject/buildingblocks/command_line'
|
16
|
+
require 'cxxproject/toolchain/colorizing_formatter'
|
17
|
+
require 'cxxproject/plugin_context'
|
18
|
+
require 'cxx/eval_context'
|
19
|
+
|
20
|
+
module Cxx
|
21
|
+
|
22
|
+
class RubyDsl
|
23
|
+
attr_accessor :base_dir, :all_tasks, :build_dir
|
24
|
+
|
25
|
+
def initialize(projects, build_dir, toolchain_name, base_dir='.', &option_block)
|
26
|
+
@build_dir = build_dir
|
27
|
+
option_block.call if option_block
|
28
|
+
toolchain = Cxxproject::Toolchain::Provider[toolchain_name]
|
29
|
+
raise "no provider with name \"#{toolchain_name}\" found" unless toolchain
|
30
|
+
@base_dir = base_dir
|
31
|
+
cd(@base_dir, :verbose => false) do
|
32
|
+
@projects = projects.to_a
|
33
|
+
end
|
34
|
+
|
35
|
+
# TODO: this should be cleaned up somehow...
|
36
|
+
if Cxxproject::Utils::OS.linux?
|
37
|
+
toolchain[:LINKER][:LIB_PREFIX_FLAGS] = "-Wl,--whole-archive"
|
38
|
+
toolchain[:LINKER][:LIB_POSTFIX_FLAGS] = "-Wl,--no-whole-archive"
|
39
|
+
end
|
40
|
+
|
41
|
+
Rake::application.deriveIncludes = true
|
42
|
+
|
43
|
+
initialize_logging(build_dir)
|
44
|
+
@all_tasks = instantiate_tasks(toolchain, build_dir)
|
45
|
+
|
46
|
+
create_generic_tasks
|
47
|
+
create_console_colorization
|
48
|
+
create_multitask
|
49
|
+
create_dont_bail_on_first_task
|
50
|
+
describe_clean_task
|
51
|
+
|
52
|
+
load_nontoolchain_plugins
|
53
|
+
end
|
54
|
+
|
55
|
+
def load_nontoolchain_plugins
|
56
|
+
registry = Frazzle::Registry.new('cxxproject', '_', '-')
|
57
|
+
registry.get_all_plugins.select { |name|name.index('toolchain') == nil }.each do |plugin|
|
58
|
+
registry.load_plugin(plugin, Cxxproject::PluginContext.new(self, Cxxproject::ALL_BUILDING_BLOCKS, @log))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize_logging(build_dir)
|
63
|
+
@log = Logger.new(STDOUT)
|
64
|
+
@log.formatter = proc { |severity, datetime, progname, msg|
|
65
|
+
"#{severity}: #{msg}\n"
|
66
|
+
}
|
67
|
+
# Logger loglevels: fatal, error, warn, info, debug
|
68
|
+
# Rake --verbose -> info
|
69
|
+
# Rake --trace -> debug
|
70
|
+
@log.level = Logger::ERROR
|
71
|
+
@log.level = Logger::INFO if RakeFileUtils.verbose == true
|
72
|
+
@log.level = Logger::DEBUG if Rake::application.options.trace
|
73
|
+
@log.debug "initializing for build_dir: \"#{build_dir}\", base_dir: \"#{@base_dir}\""
|
74
|
+
end
|
75
|
+
|
76
|
+
def describe_clean_task
|
77
|
+
Rake::Task[:clean].add_description('clean')
|
78
|
+
end
|
79
|
+
|
80
|
+
def create_dont_bail_on_first_task
|
81
|
+
desc 'dont bail on first error'
|
82
|
+
task :dont_bail_on_first_error do
|
83
|
+
Rake::Task.bail_on_first_error = false
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def create_multitask
|
88
|
+
desc 'set parallelization of multitask'
|
89
|
+
task :multitask, :threads do |t, args|
|
90
|
+
arg = args.threads
|
91
|
+
if arg
|
92
|
+
Rake::application.max_parallel_tasks = arg.to_i
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def create_console_colorization
|
98
|
+
# default is on
|
99
|
+
Cxxproject::ColorizingFormatter.enabled = true
|
100
|
+
desc 'Toggle colorization of console output (use true|t|yes|y|1|on for true ... everything else is false)'
|
101
|
+
task :toggle_colorize, :on_off do |t, args|
|
102
|
+
arg = args[:on_off] || 'false'
|
103
|
+
on_off = arg.match(/(true|t|yes|y|1|on)$/) != nil
|
104
|
+
Cxxproject::ColorizingFormatter.enabled = on_off
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def create_generic_tasks
|
109
|
+
tasks = [:lib, :exe, :run]
|
110
|
+
tasks << nil
|
111
|
+
tasks.each { |i| create_filter_task_with_namespace(i) }
|
112
|
+
end
|
113
|
+
|
114
|
+
def create_filter_task_with_namespace(basename)
|
115
|
+
if basename
|
116
|
+
desc "invoke #{basename} with filter"
|
117
|
+
namespace basename do
|
118
|
+
create_filter_task("#{basename}:")
|
119
|
+
end
|
120
|
+
else
|
121
|
+
desc 'invoke with filter'
|
122
|
+
create_filter_task('')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def create_filter_task(basename)
|
127
|
+
task :filter, :filter do |t, args|
|
128
|
+
filter = ".*"
|
129
|
+
if args[:filter]
|
130
|
+
filter = "#{args[:filter]}"
|
131
|
+
end
|
132
|
+
filter = Regexp.new("#{basename}#{filter}")
|
133
|
+
Rake::Task.tasks.each do |to_check|
|
134
|
+
name = to_check.name
|
135
|
+
if ("#{basename}:filter" != name)
|
136
|
+
match = filter.match(name)
|
137
|
+
if match
|
138
|
+
to_check.invoke
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def instantiate_tasks(toolchain, build_dir)
|
146
|
+
check_for_project_configs
|
147
|
+
|
148
|
+
if @log.debug?
|
149
|
+
@log.debug "project_configs:"
|
150
|
+
@projects.each { |c| @log.debug " * #{c}" }
|
151
|
+
end
|
152
|
+
register_projects()
|
153
|
+
Cxxproject::ALL_BUILDING_BLOCKS.values.each do |block|
|
154
|
+
prepare_block(block, toolchain, build_dir)
|
155
|
+
end
|
156
|
+
Cxxproject::ALL_BUILDING_BLOCKS.values.inject([]) do |memo,block|
|
157
|
+
@log.debug "creating tasks for block: #{block.name}/taskname: #{block.get_task_name} (#{block})"
|
158
|
+
memo << block.convert_to_rake()
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def check_for_project_configs
|
163
|
+
cd(@base_dir, :verbose => false) do
|
164
|
+
@projects.each do |p|
|
165
|
+
abort "project config #{p} cannot be found!" unless File.exists?(p)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def prepare_block(block, toolchain, build_dir)
|
171
|
+
block.set_tcs(toolchain) unless block.has_tcs?
|
172
|
+
block.set_output_dir(Dir.pwd + "/" + build_dir)
|
173
|
+
block.complete_init()
|
174
|
+
end
|
175
|
+
|
176
|
+
def register_projects()
|
177
|
+
cd(@base_dir,:verbose => false) do |b|
|
178
|
+
@projects.each_with_index do |project_file, i|
|
179
|
+
@log.debug "register project #{project_file}"
|
180
|
+
dirname = File.dirname(project_file)
|
181
|
+
@log.debug "dirname for project was: #{dirname}"
|
182
|
+
cd(dirname,:verbose => false) do | base_dir |
|
183
|
+
@log.debug "register project #{project_file} from within directory: #{Dir.pwd}"
|
184
|
+
eval_file(b, File.basename(project_file))
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def eval_file(b, project_file)
|
191
|
+
loadContext = EvalContext.new
|
192
|
+
begin
|
193
|
+
loadContext.eval_project(File.read(File.basename(project_file)), project_file, Dir.pwd)
|
194
|
+
rescue Exception => e
|
195
|
+
puts "problems with #{File.join(b, project_file)} in dir: #{Dir.pwd}"
|
196
|
+
raise e
|
197
|
+
end
|
198
|
+
|
199
|
+
loadContext.all_blocks.each do |block|
|
200
|
+
block.
|
201
|
+
set_project_dir(Dir.pwd).
|
202
|
+
set_config_files([Dir.pwd + "/" + project_file])
|
203
|
+
if block.respond_to?(:sources) && block.sources.instance_of?(Rake::FileList)
|
204
|
+
block.set_sources(block.sources.to_a)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def define_project_info_task
|
210
|
+
desc "shows your defined projects"
|
211
|
+
task :project_info do
|
212
|
+
Cxxproject::ALL_BUILDING_BLOCKS.each_value do |bb|
|
213
|
+
pp bb
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def cxx(projects, output_dir, toolchain_name, base_dir, &block)
|
222
|
+
Cxx::RubyDsl.new(projects, output_dir, toolchain_name, base_dir, &block)
|
223
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'cxxproject/context'
|
2
|
+
require 'cxxproject/cxxproject'
|
3
|
+
require 'cxxproject/utils/utils'
|
4
|
+
|
5
|
+
module Cxx
|
6
|
+
class BinaryLibs
|
7
|
+
class << self
|
8
|
+
def [](*libs)
|
9
|
+
libraries = Array.new
|
10
|
+
libs.each do |x|
|
11
|
+
libraries << Cxxproject::BinaryLibrary.new(x)
|
12
|
+
end
|
13
|
+
libraries
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class EvalContext
|
19
|
+
include Cxxproject::Context
|
20
|
+
|
21
|
+
attr_accessor :all_blocks
|
22
|
+
|
23
|
+
# must be called to add building blocks
|
24
|
+
def cxx_configuration(&block)
|
25
|
+
@all_blocks = []
|
26
|
+
block.call
|
27
|
+
end
|
28
|
+
|
29
|
+
def eval_project(project_text, project_file, pwd)
|
30
|
+
@current_project_file = project_file
|
31
|
+
@current_working_dir = pwd
|
32
|
+
instance_eval(project_text)
|
33
|
+
end
|
34
|
+
|
35
|
+
# specify an executable
|
36
|
+
# hash supports:
|
37
|
+
# * :sources
|
38
|
+
# * :includes
|
39
|
+
# * :dependencies
|
40
|
+
# * :libpath
|
41
|
+
# * :output_dir
|
42
|
+
def exe(name, hash)
|
43
|
+
raise "not a hash" unless hash.is_a?(Hash)
|
44
|
+
check_hash(hash,[:sources,:includes,:dependencies,:libpath,:output_dir])
|
45
|
+
bblock = Cxxproject::Executable.new(name)
|
46
|
+
bblock.set_sources(hash[:sources]) if hash.has_key?(:sources)
|
47
|
+
bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
|
48
|
+
calc_lib_searchpath(hash).each { |sp| bblock.add_lib_element(Cxxproject::HasLibraries::SEARCH_PATH, sp) }
|
49
|
+
if hash.has_key?(:dependencies)
|
50
|
+
bblock.set_dependencies(hash[:dependencies])
|
51
|
+
hash[:dependencies].each { |d| bblock.add_lib_element(Cxxproject::HasLibraries::DEPENDENCY, d) }
|
52
|
+
end
|
53
|
+
bblock.set_output_dir(hash[:output_dir]) if hash.has_key?(:output_dir)
|
54
|
+
all_blocks << bblock
|
55
|
+
end
|
56
|
+
|
57
|
+
def calc_lib_searchpath(hash)
|
58
|
+
if hash.has_key?(:libpath)
|
59
|
+
hash[:libpath]
|
60
|
+
else
|
61
|
+
if Cxxproject::Utils::OS.linux? || Cxxproject::Utils::OS.mac?
|
62
|
+
["/usr/local/lib","/usr/lib"]
|
63
|
+
elsif Cxxproject::Utils::OS.windows?
|
64
|
+
["C:/tool/cygwin/lib", "C:/Tool/cygwin/usr/local/lib"]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# specify a sourcelib
|
70
|
+
# hash supports:
|
71
|
+
# * :sources
|
72
|
+
# * :includes
|
73
|
+
# * :dependencies
|
74
|
+
# * :toolchain
|
75
|
+
# * :file_dependencies
|
76
|
+
# * :output_dir
|
77
|
+
def source_lib(name, hash)
|
78
|
+
raise "not a hash" unless hash.is_a?(Hash)
|
79
|
+
check_hash(hash,[:sources, :includes, :dependencies, :toolchain, :file_dependencies, :output_dir])
|
80
|
+
raise ":sources need to be defined" unless hash.has_key?(:sources)
|
81
|
+
bblock = Cxxproject::SourceLibrary.new(name)
|
82
|
+
bblock.set_sources(hash[:sources])
|
83
|
+
bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
|
84
|
+
bblock.set_tcs(hash[:toolchain]) if hash.has_key?(:toolchain)
|
85
|
+
if hash.has_key?(:dependencies)
|
86
|
+
bblock.set_dependencies(hash[:dependencies])
|
87
|
+
hash[:dependencies].each { |d| bblock.add_lib_element(Cxxproject::HasLibraries::DEPENDENCY, d) }
|
88
|
+
end
|
89
|
+
bblock.file_dependencies = hash[:file_dependencies] if hash.has_key?(:file_dependencies)
|
90
|
+
bblock.set_output_dir(hash[:output_dir]) if hash.has_key?(:output_dir)
|
91
|
+
all_blocks << bblock
|
92
|
+
end
|
93
|
+
|
94
|
+
# specify some binary libs
|
95
|
+
# returns all binary libs as array
|
96
|
+
def bin_libs(*names)
|
97
|
+
res = []
|
98
|
+
mapped = names.map{|n|n.to_s}
|
99
|
+
mapped.each do |name|
|
100
|
+
res << Cxxproject::BinaryLibrary.new(name)
|
101
|
+
end
|
102
|
+
mapped
|
103
|
+
end
|
104
|
+
|
105
|
+
def compile(name, hash)
|
106
|
+
raise "not a hash" unless hash.is_a?(Hash)
|
107
|
+
check_hash(hash,[:sources,:includes])
|
108
|
+
bblock = Cxxproject::SingleSource.new(name)
|
109
|
+
bblock.set_sources(hash[:sources]) if hash.has_key?(:sources)
|
110
|
+
bblock.set_includes(hash[:includes]) if hash.has_key?(:includes)
|
111
|
+
all_blocks << bblock
|
112
|
+
end
|
113
|
+
|
114
|
+
def custom(name, hash)
|
115
|
+
raise "not a hash" unless hash.is_a?(Hash)
|
116
|
+
check_hash(hash,[:execute, :dependencies])
|
117
|
+
bblock = Cxxproject::CustomBuildingBlock.new(name)
|
118
|
+
bblock.set_actions(hash[:execute]) if hash.has_key?(:execute)
|
119
|
+
if hash.has_key?(:dependencies)
|
120
|
+
bblock.set_dependencies(hash[:dependencies])
|
121
|
+
end
|
122
|
+
all_blocks << bblock
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'cxx'
|
2
|
+
|
3
|
+
unittest_flags = {
|
4
|
+
:DEFINES => ['UNIT_TEST','CPPUNIT_MAIN=main'],
|
5
|
+
:FLAGS => "-O0 -g3 -Wall"
|
6
|
+
}
|
7
|
+
|
8
|
+
cxx(Dir['**/project.rb'], 'out', "<%= toolchain %>", './') do
|
9
|
+
Provider.modify_cpp_compiler("<%= toolchain %>", unittest_flags)
|
10
|
+
end
|
11
|
+
|
@@ -0,0 +1,113 @@
|
|
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.latest_specs.each 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__),"Rakefile.rb.template"))
|
71
|
+
project_template = IO.read(File.join(File.dirname(__FILE__),"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
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cxx
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- christian koestlin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: cxxproject
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: highline
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: ruby-based dsl for cxxproject
|
47
|
+
email: christian.koestlin@gmail.com
|
48
|
+
executables:
|
49
|
+
- cxx
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- Rakefile.rb
|
55
|
+
- bin/cxx
|
56
|
+
- cxx.gemspec
|
57
|
+
- lib/cxx.rb
|
58
|
+
- lib/cxx/eval_context.rb
|
59
|
+
- lib/cxx/wizard/Rakefile.rb.template
|
60
|
+
- lib/cxx/wizard/project.rb.template
|
61
|
+
- lib/cxx/wizard/project_wizard.rb
|
62
|
+
homepage:
|
63
|
+
licenses: []
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.8.24
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: defines the method cxx_configuration
|
86
|
+
test_files: []
|