cxx 0.1.15 → 0.1.16

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ M2JhZDYyM2Y0YzA0MTNkOGVlOWJjMjc1ZDcwMTdjYThjMjFmYTMyYw==
5
+ data.tar.gz: !binary |-
6
+ MDQwZjdlZWQ0ZmJiZWEwMzA1YThkMGEzNzUwOWMwMjVlYzkzMWRkYg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ OTIxNDZiY2RmNGU1MTFkZmI5MDhlYmRkZTJmODI2YjkxMzViODlhNTRlZjNl
10
+ MWExZTM5NDJlZTMwYmNjYjUxNDkxODYyNDlhMTg3Njg3N2MzOGZhOGIzZjdi
11
+ MjZhYTIxZDAwZjFmNzljMWMyZDk1NTRkODE5YjQxZmRjYWIxZjI=
12
+ data.tar.gz: !binary |-
13
+ Mzk2MWViZDNlMDgxMDUxNGFhZWQzMGYxYWJkMDZlZjFiZjE1YTA1NzNlM2Vj
14
+ MjdiNDkwYWQ5ZGQ0NjIyYzIyMTllM2RkNTE0MDUwODE1ZmQyMWNlZDdhOTBi
15
+ OWM2MDViZTU2OWVjOTc4NTQ5MDM1YjQ2YTAxZjEyM2I5NGZjMWI=
data/lib/cxx.rb CHANGED
@@ -5,14 +5,7 @@ require 'logger'
5
5
  require 'pp'
6
6
  require 'pathname'
7
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'
8
+ require 'cxxproject/buildingblocks/building_blocks'
16
9
  require 'cxxproject/toolchain/colorizing_formatter'
17
10
  require 'cxxproject/plugin_context'
18
11
  require 'cxx/eval_context'
@@ -24,8 +17,8 @@ module Cxx
24
17
 
25
18
  def initialize(projects, build_dir, toolchain_name, base_dir='.', &option_block)
26
19
  @build_dir = build_dir
27
- option_block.call if option_block
28
20
  toolchain = Cxxproject::Toolchain::Provider[toolchain_name]
21
+ option_block.call(toolchain) if option_block
29
22
  raise "no provider with name \"#{toolchain_name}\" found" unless toolchain
30
23
  @base_dir = base_dir
31
24
  cd(@base_dir, :verbose => false) do
@@ -38,6 +31,7 @@ module Cxx
38
31
  @all_tasks = instantiate_tasks(toolchain, build_dir)
39
32
 
40
33
  create_generic_tasks
34
+ create_tag_tasks
41
35
  create_console_colorization
42
36
  create_multitask
43
37
  create_dont_bail_on_first_task
@@ -48,8 +42,11 @@ module Cxx
48
42
 
49
43
  def load_nontoolchain_plugins
50
44
  registry = Frazzle::Registry.new('cxxproject', '_', '-')
51
- registry.get_all_plugins.select { |name|name.index('toolchain') == nil }.each do |plugin|
52
- registry.load_plugin(plugin, Cxxproject::PluginContext.new(self, Cxxproject::ALL_BUILDING_BLOCKS, @log))
45
+ plugins = registry.get_all_plugins.select do |name|
46
+ name.index('toolchain') == nil
47
+ end
48
+ plugins.each do |plugin|
49
+ registry.load_plugin(plugin, Cxxproject::PluginContext.create_three_args_context(self, Cxxproject::ALL_BUILDING_BLOCKS, @log))
53
50
  end
54
51
  end
55
52
 
@@ -105,6 +102,18 @@ module Cxx
105
102
  tasks.each { |i| create_filter_task_with_namespace(i) }
106
103
  end
107
104
 
105
+ def create_tag_tasks
106
+ desc 'invoke tagged building blocks'
107
+ task :tag, :tag do |t, args|
108
+ if args[:tag]
109
+ current_tag = args[:tag]
110
+ Rake::Task::tasks.select {|t|t.tags.include?(current_tag)}.each do |task|
111
+ task.invoke
112
+ end
113
+ end
114
+ end
115
+ end
116
+
108
117
  def create_filter_task_with_namespace(basename)
109
118
  if basename
110
119
  desc "invoke #{basename} with filter"
@@ -1,11 +1,13 @@
1
1
  require 'cxxproject'
2
2
  require 'cxxproject/context'
3
3
  require 'cxxproject/utils/utils'
4
+ require 'cxxproject/utils/deprecated'
4
5
 
5
6
  module Cxx
6
7
  class EvalContext
7
8
  include Cxxproject
8
9
  include Cxxproject::Context
10
+ extend Deprecated
9
11
 
10
12
  attr_accessor :all_blocks
11
13
 
@@ -21,7 +23,7 @@ module Cxx
21
23
  instance_eval(project_text)
22
24
  end
23
25
 
24
- def attatch_sources(hash,bblock)
26
+ def attach_sources(hash,bblock)
25
27
  if hash.has_key?(:sources)
26
28
  ss = hash[:sources]
27
29
  if ss.class == Array || ss.class == Rake::FileList
@@ -32,10 +34,17 @@ module Cxx
32
34
  end
33
35
  end
34
36
 
35
- def attatch_includes(hash,bblock)
37
+ def attach_includes(hash,bblock)
36
38
  bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
37
39
  end
38
40
 
41
+ def attach_tags(hash, bblock)
42
+ bblock.tags = Set.new
43
+ if hash.has_key?(:tags)
44
+ bblock.tags = hash[:tags].to_set
45
+ end
46
+ end
47
+
39
48
  # specify an executable
40
49
  # hash supports:
41
50
  # * :sources
@@ -44,19 +53,44 @@ module Cxx
44
53
  # * :output_dir
45
54
  def exe(name, hash)
46
55
  raise "not a hash" unless hash.is_a?(Hash)
47
- check_hash(hash,[:sources,:includes,:dependencies,:libpath,:output_dir])
56
+ check_hash(hash,[:sources,:includes,:dependencies,:libpath,:output_dir, :tags])
48
57
  bblock = Cxxproject::Executable.new(name)
49
- attatch_sources(hash,bblock)
50
- attatch_includes(hash,bblock)
58
+ attach_sources(hash,bblock)
59
+ attach_includes(hash,bblock)
60
+ attach_tags(hash, bblock)
51
61
  if hash.has_key?(:dependencies)
52
62
  bblock.set_dependencies(hash[:dependencies])
53
63
  hash[:dependencies].each { |d| bblock.add_lib_element(Cxxproject::HasLibraries::DEPENDENCY, d) }
54
64
  end
55
65
  bblock.set_output_dir(hash[:output_dir]) if hash.has_key?(:output_dir)
56
66
  all_blocks << bblock
67
+ bblock
57
68
  end
58
69
 
59
- # specify a sourcelib
70
+ # specify an executable
71
+ # hash supports:
72
+ # * :sources
73
+ # * :includes
74
+ # * :dependencies
75
+ # * :output_dir
76
+ # * :tags
77
+ def shared_lib(name, hash)
78
+ raise "not a hash" unless hash.is_a?(Hash)
79
+ check_hash(hash, [:sources, :includes, :dependencies, :output_dir, :tags])
80
+ bblock = Cxxproject::SharedLibrary.new(name)
81
+ attach_sources(hash,bblock)
82
+ attach_includes(hash,bblock)
83
+ attach_tags(hash, bblock)
84
+ if hash.has_key?(:dependencies)
85
+ bblock.set_dependencies(hash[:dependencies])
86
+ hash[:dependencies].each { |d| bblock.add_lib_element(Cxxproject::HasLibraries::DEPENDENCY, d) }
87
+ end
88
+ bblock.set_output_dir(hash[:output_dir]) if hash.has_key?(:output_dir)
89
+ all_blocks << bblock
90
+ bblock
91
+ end
92
+
93
+ # specify a static library
60
94
  # hash supports:
61
95
  # * :sources
62
96
  # * :includes
@@ -64,13 +98,16 @@ module Cxx
64
98
  # * :toolchain
65
99
  # * :file_dependencies
66
100
  # * :output_dir
67
- def source_lib(name, hash)
101
+ # * :whole_archive
102
+ # * :tags
103
+ def static_lib(name, hash)
68
104
  raise "not a hash" unless hash.is_a?(Hash)
69
- check_hash(hash, [:sources, :includes, :dependencies, :toolchain, :file_dependencies, :output_dir, :whole_archive])
105
+ check_hash(hash, [:sources, :includes, :dependencies, :toolchain, :file_dependencies, :output_dir, :whole_archive, :tags])
70
106
  raise ":sources need to be defined" unless hash.has_key?(:sources)
71
- bblock = Cxxproject::SourceLibrary.new(name, hash[:whole_archive])
72
- attatch_sources(hash,bblock)
73
- attatch_includes(hash,bblock)
107
+ bblock = Cxxproject::StaticLibrary.new(name, hash[:whole_archive])
108
+ attach_sources(hash,bblock)
109
+ attach_includes(hash,bblock)
110
+ attach_tags(hash, bblock)
74
111
  bblock.set_tcs(hash[:toolchain]) if hash.has_key?(:toolchain)
75
112
  if hash.has_key?(:dependencies)
76
113
  bblock.set_dependencies(hash[:dependencies])
@@ -79,14 +116,17 @@ module Cxx
79
116
  bblock.file_dependencies = hash[:file_dependencies] if hash.has_key?(:file_dependencies)
80
117
  bblock.set_output_dir(hash[:output_dir]) if hash.has_key?(:output_dir)
81
118
  all_blocks << bblock
119
+ bblock
82
120
  end
83
121
 
122
+ deprecated_alias :source_lib, :static_lib
123
+
84
124
  def bin_lib(name, hash=Hash.new)
85
125
  raise "not a hash" unless hash.is_a?(Hash)
86
126
  check_hash(hash, [:includes, :lib_path])
87
127
 
88
128
  bblock = Cxxproject::BinaryLibrary.new(name)
89
- attatch_includes(hash,bblock)
129
+ attach_includes(hash,bblock)
90
130
  bblock.add_lib_element(Cxxproject::HasLibraries::SEARCH_PATH, hash[:lib_path], true) if hash.has_key?(:lib_path)
91
131
  return bblock
92
132
  end
@@ -105,8 +145,8 @@ module Cxx
105
145
  raise "not a hash" unless hash.is_a?(Hash)
106
146
  check_hash(hash,[:sources,:includes])
107
147
  bblock = Cxxproject::SingleSource.new(name)
108
- attatch_sources(hash,bblock)
109
- attatch_includes(hash,bblock)
148
+ attach_sources(hash,bblock)
149
+ attach_includes(hash,bblock)
110
150
  all_blocks << bblock
111
151
  end
112
152
 
@@ -1,4 +1,4 @@
1
1
  module Cxx
2
- VERSION = '0.1.15'
2
+ VERSION = '0.1.16'
3
3
  end
4
4
 
@@ -1,11 +1,13 @@
1
1
  require 'cxx'
2
2
 
3
- unittest_flags = {
4
- :DEFINES => ['UNIT_TEST','CPPUNIT_MAIN=main'],
5
- :FLAGS => "-O0 -g3 -Wall"
3
+ flags = {
4
+ :DEFINES => ['UNIT_TEST','EXAMPLE=main'],
5
+ :FLAGS => ['-O0', '-g3', '-Wall']
6
6
  }
7
7
 
8
- cxx(Dir['**/project.rb'], 'out', "<%= toolchain %>", './') do
9
- Provider.modify_cpp_compiler("<%= toolchain %>", unittest_flags)
8
+ cxx(Dir['**/project.rb'], 'out', "<%= toolchain %>", './') do |tc|
9
+ tc[:COMPILER][:C].update(flags)
10
+ tc[:COMPILER][:CPP].update(flags)
11
+ tc[:LINKER].update(flags)
12
+ # tc[:TARGET_OS] = :UNIX | OSX | :WINDOWS
10
13
  end
11
-
@@ -2,5 +2,5 @@ cxx_configuration do
2
2
  <%= building_block %> "<%= name %>",
3
3
  :sources => FileList['**/*.cpp'],
4
4
  :includes => ['include'],
5
- :dependencies => []
5
+ :dependencies => []<%= whole_archive ? ",\n :whole_archive => true" : "" %>
6
6
  end
@@ -16,7 +16,7 @@ def prepare_project(dir_name)
16
16
  end
17
17
  say "This will create a new cxx-project in directory: '#{dir_name}'"
18
18
  if confirm("Are you sure you want to continue") then
19
- building_block = choose_building_block
19
+ building_block, whole_archive = choose_building_block
20
20
  generate_makefile = confirm("Do you also whant to generate a rakefile", building_block.eql?("exe"))
21
21
 
22
22
  toolchain = nil
@@ -25,7 +25,7 @@ def prepare_project(dir_name)
25
25
  return unless toolchain
26
26
  end
27
27
 
28
- create_project(dir_name, building_block, toolchain, generate_makefile)
28
+ create_project(dir_name, building_block, whole_archive, toolchain, generate_makefile)
29
29
  say "Completed project-setup ;-)"
30
30
  else
31
31
  say "Stopped project-setup!"
@@ -39,14 +39,18 @@ def prepare_project(dir_name)
39
39
  end
40
40
 
41
41
  def choose_building_block
42
- res = nil
42
+ building_block = nil
43
+ whole_archive = nil
43
44
  choose do |menu|
44
- say "What building-block do you whant to create?"
45
- menu.choice(:exe) { res = "exe" }
46
- menu.choice(:lib) { res = "source_lib" }
47
- menu.prompt = "Select a building-block: "
45
+ say 'What building-block do you whant to create?'
46
+ menu.choice(:exe) { building_block = 'exe' }
47
+ menu.choice(:lib) do
48
+ building_block = 'source_lib'
49
+ whole_archive = confirm('Is this a test-library', false)
50
+ end
51
+ menu.prompt = 'Select a building-block: '
48
52
  end
49
- res
53
+ [building_block, whole_archive]
50
54
  end
51
55
 
52
56
  def choose_toolchain
@@ -74,10 +78,10 @@ def choose_toolchain
74
78
  res
75
79
  end
76
80
 
77
- def create_project(dir_name, building_block, toolchain, generate_rakefile)
81
+ def create_project(dir_name, building_block, whole_archive, toolchain, generate_rakefile)
78
82
  rakefile_template = IO.read(File.join(File.dirname(__FILE__),"Rakefile.rb.template"))
79
83
  project_template = IO.read(File.join(File.dirname(__FILE__),"project.rb.template"))
80
- binding = create_binding("new-item", building_block, toolchain)
84
+ binding = create_binding("new-item", building_block, whole_archive, toolchain)
81
85
 
82
86
  if !File.directory?(dir_name) then
83
87
  mkdir_p(dir_name, :verbose => false)
@@ -94,7 +98,7 @@ def create_project(dir_name, building_block, toolchain, generate_rakefile)
94
98
  end
95
99
  end
96
100
 
97
- def create_binding(name, building_block, toolchain)
101
+ def create_binding(name, building_block, whole_archive, toolchain)
98
102
  return binding()
99
103
  end
100
104
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cxx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
5
- prerelease:
4
+ version: 0.1.16
6
5
  platform: ruby
7
6
  authors:
8
7
  - christian koestlin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
11
+ date: 2013-08-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: cxxproject
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: highline
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -51,34 +46,33 @@ extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
48
  - bin/cxx
49
+ - lib/cxx/eval_context.rb
54
50
  - lib/cxx/version.rb
51
+ - lib/cxx/wizard/Rakefile.rb.template
55
52
  - lib/cxx/wizard/project.rb.template
56
53
  - lib/cxx/wizard/project_wizard.rb
57
- - lib/cxx/wizard/Rakefile.rb.template
58
- - lib/cxx/eval_context.rb
59
54
  - lib/cxx.rb
60
55
  homepage:
61
56
  licenses: []
57
+ metadata: {}
62
58
  post_install_message:
63
59
  rdoc_options: []
64
60
  require_paths:
65
61
  - lib
66
62
  required_ruby_version: !ruby/object:Gem::Requirement
67
- none: false
68
63
  requirements:
69
64
  - - ! '>='
70
65
  - !ruby/object:Gem::Version
71
66
  version: '0'
72
67
  required_rubygems_version: !ruby/object:Gem::Requirement
73
- none: false
74
68
  requirements:
75
69
  - - ! '>='
76
70
  - !ruby/object:Gem::Version
77
71
  version: '0'
78
72
  requirements: []
79
73
  rubyforge_project:
80
- rubygems_version: 1.8.24
74
+ rubygems_version: 2.0.6
81
75
  signing_key:
82
- specification_version: 3
76
+ specification_version: 4
83
77
  summary: defines the method cxx_configuration
84
78
  test_files: []