cxx 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/lib/cxx.rb +6 -4
  2. data/lib/cxx/eval_context.rb +22 -7
  3. data/lib/cxx/version.rb +1 -1
  4. metadata +5 -43
  5. data/.gitignore +0 -3
  6. data/.rvmrc +0 -1
  7. data/Gemfile +0 -6
  8. data/Gemfile.lock +0 -35
  9. data/Rakefile.rb +0 -33
  10. data/cxx.gemspec +0 -23
  11. data/junit.rb +0 -91
  12. data/rake_helper/spec.rb +0 -14
  13. data/spec/cxx_spec.rb +0 -166
  14. data/spec/object_dependency_spec.rb +0 -63
  15. data/spec/project_path_spec.rb +0 -69
  16. data/spec/testdata/basic/exe12/help.cpp +0 -5
  17. data/spec/testdata/basic/exe12/help.h +0 -6
  18. data/spec/testdata/basic/exe12/main.cpp +0 -10
  19. data/spec/testdata/basic/exe12/project.rb +0 -5
  20. data/spec/testdata/basic/lib1/lib1.cpp +0 -7
  21. data/spec/testdata/basic/lib1/lib1.h +0 -8
  22. data/spec/testdata/basic/lib1/project.rb +0 -5
  23. data/spec/testdata/basic/lib2/lib2.cpp +0 -17
  24. data/spec/testdata/basic/lib2/lib2.h +0 -6
  25. data/spec/testdata/basic/lib2/project.rb +0 -8
  26. data/spec/testdata/multiple_levels/libs/lib1/lib1.cpp +0 -7
  27. data/spec/testdata/multiple_levels/libs/lib1/lib1.h +0 -8
  28. data/spec/testdata/multiple_levels/libs/lib1/project.rb +0 -5
  29. data/spec/testdata/multiple_levels/libs/lib2/lib2.cpp +0 -21
  30. data/spec/testdata/multiple_levels/libs/lib2/lib2.h +0 -6
  31. data/spec/testdata/multiple_levels/libs/lib2/project.rb +0 -19
  32. data/spec/testdata/multiple_levels/mainproject/basic/help.cpp +0 -5
  33. data/spec/testdata/multiple_levels/mainproject/basic/help.h +0 -6
  34. data/spec/testdata/multiple_levels/mainproject/basic/main.cpp +0 -10
  35. data/spec/testdata/multiple_levels/mainproject/basic/project.rb +0 -8
  36. data/spec/testdata/onlyOneHeader/.gitignore +0 -1
  37. data/spec/testdata/onlyOneHeader/Rakefile.rb +0 -4
  38. data/spec/testdata/onlyOneHeader/help.cpp +0 -5
  39. data/spec/testdata/onlyOneHeader/help.h +0 -7
  40. data/spec/testdata/onlyOneHeader/main.cpp +0 -8
  41. data/spec/testdata/onlyOneHeader/project.rb +0 -4
  42. data/spec/testdata/onlyOneHeader/testin.c +0 -0
data/lib/cxx.rb CHANGED
@@ -149,6 +149,9 @@ module Cxx
149
149
  end
150
150
  Cxxproject::ALL_BUILDING_BLOCKS.values.inject([]) do |memo,block|
151
151
  @log.debug "creating tasks for block: #{block.name}/taskname: #{block.get_task_name} (#{block})"
152
+ if block.name != block.get_task_name
153
+ task block.name => block.get_task_name # create task with simple name of buildinblock
154
+ end
152
155
  memo << block.convert_to_rake()
153
156
  end
154
157
  end
@@ -183,10 +186,12 @@ module Cxx
183
186
 
184
187
  def eval_file(b, project_file)
185
188
  loadContext = EvalContext.new
189
+ project_text = File.read(File.basename(project_file))
186
190
  begin
187
- loadContext.eval_project(File.read(File.basename(project_file)), project_file, Dir.pwd)
191
+ loadContext.eval_project(project_text, project_file, Dir.pwd)
188
192
  rescue Exception => e
189
193
  puts "problems with #{File.join(b, project_file)} in dir: #{Dir.pwd}"
194
+ puts project_text
190
195
  raise e
191
196
  end
192
197
 
@@ -194,9 +199,6 @@ module Cxx
194
199
  block.
195
200
  set_project_dir(Dir.pwd).
196
201
  set_config_files([Dir.pwd + "/" + project_file])
197
- if block.respond_to?(:sources) && block.sources.instance_of?(Rake::FileList)
198
- block.set_sources(block.sources.to_a)
199
- end
200
202
  end
201
203
  end
202
204
 
@@ -21,6 +21,21 @@ module Cxx
21
21
  instance_eval(project_text)
22
22
  end
23
23
 
24
+ def attatch_sources(hash,bblock)
25
+ if hash.has_key?(:sources)
26
+ ss = hash[:sources]
27
+ if ss.class == Array || ss.class == Rake::FileList
28
+ bblock.set_sources(ss)
29
+ else
30
+ raise "sources need to be given in an Array or FileList, not a #{ss.class}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def attatch_includes(hash,bblock)
36
+ bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
37
+ end
38
+
24
39
  # specify an executable
25
40
  # hash supports:
26
41
  # * :sources
@@ -31,8 +46,8 @@ module Cxx
31
46
  raise "not a hash" unless hash.is_a?(Hash)
32
47
  check_hash(hash,[:sources,:includes,:dependencies,:libpath,:output_dir])
33
48
  bblock = Cxxproject::Executable.new(name)
34
- bblock.set_sources(hash[:sources]) if hash.has_key?(:sources)
35
- bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
49
+ attatch_sources(hash,bblock)
50
+ attatch_includes(hash,bblock)
36
51
  if hash.has_key?(:dependencies)
37
52
  bblock.set_dependencies(hash[:dependencies])
38
53
  hash[:dependencies].each { |d| bblock.add_lib_element(Cxxproject::HasLibraries::DEPENDENCY, d) }
@@ -54,8 +69,8 @@ module Cxx
54
69
  check_hash(hash, [:sources, :includes, :dependencies, :toolchain, :file_dependencies, :output_dir, :whole_archive])
55
70
  raise ":sources need to be defined" unless hash.has_key?(:sources)
56
71
  bblock = Cxxproject::SourceLibrary.new(name, hash[:whole_archive])
57
- bblock.set_sources(hash[:sources])
58
- bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
72
+ attatch_sources(hash,bblock)
73
+ attatch_includes(hash,bblock)
59
74
  bblock.set_tcs(hash[:toolchain]) if hash.has_key?(:toolchain)
60
75
  if hash.has_key?(:dependencies)
61
76
  bblock.set_dependencies(hash[:dependencies])
@@ -71,7 +86,7 @@ module Cxx
71
86
  check_hash(hash, [:includes, :lib_path])
72
87
 
73
88
  bblock = Cxxproject::BinaryLibrary.new(name)
74
- bblock.set_includes(get_as_array(hash, :includes)) if hash.has_key?(:includes)
89
+ attatch_includes(hash,bblock)
75
90
  bblock.add_lib_element(Cxxproject::HasLibraries::SEARCH_PATH, hash[:lib_path], true) if hash.has_key?(:lib_path)
76
91
  return bblock
77
92
  end
@@ -90,8 +105,8 @@ module Cxx
90
105
  raise "not a hash" unless hash.is_a?(Hash)
91
106
  check_hash(hash,[:sources,:includes])
92
107
  bblock = Cxxproject::SingleSource.new(name)
93
- bblock.set_sources(hash[:sources]) if hash.has_key?(:sources)
94
- bblock.set_includes(hash[:includes]) if hash.has_key?(:includes)
108
+ attatch_sources(hash,bblock)
109
+ attatch_includes(hash,bblock)
95
110
  all_blocks << bblock
96
111
  end
97
112
 
@@ -1,4 +1,4 @@
1
1
  module Cxx
2
- VERSION = '0.1.14'
2
+ VERSION = '0.1.15'
3
3
  end
4
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cxx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-13 00:00:00.000000000 Z
12
+ date: 2012-09-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cxxproject
@@ -50,51 +50,13 @@ executables:
50
50
  extensions: []
51
51
  extra_rdoc_files: []
52
52
  files:
53
- - .gitignore
54
- - .rvmrc
55
- - Gemfile
56
- - Gemfile.lock
57
- - Rakefile.rb
58
53
  - bin/cxx
59
- - cxx.gemspec
60
- - junit.rb
61
- - lib/cxx.rb
62
- - lib/cxx/eval_context.rb
63
54
  - lib/cxx/version.rb
64
- - lib/cxx/wizard/Rakefile.rb.template
65
55
  - lib/cxx/wizard/project.rb.template
66
56
  - lib/cxx/wizard/project_wizard.rb
67
- - rake_helper/spec.rb
68
- - spec/cxx_spec.rb
69
- - spec/object_dependency_spec.rb
70
- - spec/project_path_spec.rb
71
- - spec/testdata/basic/exe12/help.cpp
72
- - spec/testdata/basic/exe12/help.h
73
- - spec/testdata/basic/exe12/main.cpp
74
- - spec/testdata/basic/exe12/project.rb
75
- - spec/testdata/basic/lib1/lib1.cpp
76
- - spec/testdata/basic/lib1/lib1.h
77
- - spec/testdata/basic/lib1/project.rb
78
- - spec/testdata/basic/lib2/lib2.cpp
79
- - spec/testdata/basic/lib2/lib2.h
80
- - spec/testdata/basic/lib2/project.rb
81
- - spec/testdata/multiple_levels/libs/lib1/lib1.cpp
82
- - spec/testdata/multiple_levels/libs/lib1/lib1.h
83
- - spec/testdata/multiple_levels/libs/lib1/project.rb
84
- - spec/testdata/multiple_levels/libs/lib2/lib2.cpp
85
- - spec/testdata/multiple_levels/libs/lib2/lib2.h
86
- - spec/testdata/multiple_levels/libs/lib2/project.rb
87
- - spec/testdata/multiple_levels/mainproject/basic/help.cpp
88
- - spec/testdata/multiple_levels/mainproject/basic/help.h
89
- - spec/testdata/multiple_levels/mainproject/basic/main.cpp
90
- - spec/testdata/multiple_levels/mainproject/basic/project.rb
91
- - spec/testdata/onlyOneHeader/.gitignore
92
- - spec/testdata/onlyOneHeader/Rakefile.rb
93
- - spec/testdata/onlyOneHeader/help.cpp
94
- - spec/testdata/onlyOneHeader/help.h
95
- - spec/testdata/onlyOneHeader/main.cpp
96
- - spec/testdata/onlyOneHeader/project.rb
97
- - spec/testdata/onlyOneHeader/testin.c
57
+ - lib/cxx/wizard/Rakefile.rb.template
58
+ - lib/cxx/eval_context.rb
59
+ - lib/cxx.rb
98
60
  homepage:
99
61
  licenses: []
100
62
  post_install_message:
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- pkg
2
- spec/build
3
- build/test_details.xml
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.3@cxxproject_tests --create
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source :rubygems
2
- gem 'rspec'
3
- gem 'grit'
4
- gem 'roodi'
5
- gem 'builder'
6
- gem 'gem-release'
@@ -1,35 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- builder (3.1.3)
5
- diff-lcs (1.1.3)
6
- gem-release (0.4.1)
7
- grit (2.5.0)
8
- diff-lcs (~> 1.1)
9
- mime-types (~> 1.15)
10
- posix-spawn (~> 0.3.6)
11
- mime-types (1.19)
12
- posix-spawn (0.3.6)
13
- roodi (2.1.0)
14
- ruby_parser
15
- rspec (2.11.0)
16
- rspec-core (~> 2.11.0)
17
- rspec-expectations (~> 2.11.0)
18
- rspec-mocks (~> 2.11.0)
19
- rspec-core (2.11.1)
20
- rspec-expectations (2.11.3)
21
- diff-lcs (~> 1.1.3)
22
- rspec-mocks (2.11.2)
23
- ruby_parser (2.3.1)
24
- sexp_processor (~> 3.0)
25
- sexp_processor (3.2.0)
26
-
27
- PLATFORMS
28
- ruby
29
-
30
- DEPENDENCIES
31
- builder
32
- gem-release
33
- grit
34
- roodi
35
- rspec
@@ -1,33 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require './rake_helper/spec.rb'
3
-
4
- task :package => :build
5
-
6
- projects = ['frazzle',
7
- 'cxxproject',
8
- 'cxxproject_gcctoolchain']
9
-
10
- desc 'cleanup all built gems'
11
- task :clean do
12
- projects.each do |p|
13
- cd "../#{p}" do
14
- sh 'rake clobber_package'
15
- end
16
- end
17
- end
18
-
19
- desc 'install prerequisites for build'
20
- task :wipe_gems do
21
- sh "rvm --force gemset empty"
22
- end
23
-
24
- desc 'install all built gems'
25
- task :build_and_install_gems do
26
- projects.each do |p|
27
- cd "../#{p}" do
28
- sh 'rm -rf pkg'
29
- sh 'rake package'
30
- sh 'rake install'
31
- end
32
- end
33
- end
@@ -1,23 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- gem_name = 'cxx'
3
- require File.expand_path("lib/#{gem_name}/version")
4
-
5
- spec = Gem::Specification.new do |s|
6
- s.name = gem_name
7
- s.version = Cxx::VERSION
8
-
9
- s.description = 'ruby-based dsl for cxxproject'
10
- s.summary = 'defines the method cxx_configuration'
11
- s.author = 'christian koestlin'
12
- s.email = 'christian.koestlin@gmail.com'
13
- s.platform = Gem::Platform::RUBY
14
- s.files = `git ls-files`.split($\)
15
- s.require_path = 'lib'
16
-
17
- s.add_dependency 'cxxproject'
18
- s.add_dependency 'highline'
19
-
20
- s.executables = ['cxx']
21
-
22
- s.has_rdoc = false
23
- end
data/junit.rb DELETED
@@ -1,91 +0,0 @@
1
- =begin
2
-
3
- Copyright (c) 2012, Nathaniel Ritmeyer
4
- All rights reserved.
5
-
6
- Redistribution and use in source and binary forms, with or without
7
- modification, are permitted provided that the following conditions are met:
8
-
9
- 1. Redistributions of source code must retain the above copyright notice,
10
- this list of conditions and the following disclaimer.
11
-
12
- 2. Redistributions in binary form must reproduce the above copyright
13
- notice, this list of conditions and the following disclaimer in the
14
- documentation and/or other materials provided with the distribution.
15
-
16
- 3. Neither the name Nathaniel Ritmeyer nor the names of contributors to
17
- this software may be used to endorse or promote products derived from this
18
- software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
21
- IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
24
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
-
32
- =end
33
-
34
- require 'time'
35
- require 'builder'
36
- require 'rspec/core/formatters/base_formatter'
37
-
38
- class JUnit < RSpec::Core::Formatters::BaseFormatter
39
- def initialize output
40
- super output
41
- @test_results = []
42
- end
43
-
44
- def example_passed example
45
- @test_results << example
46
- end
47
-
48
- def example_failed example
49
- @test_results << example
50
- end
51
-
52
- def example_pending example
53
- @test_results << example
54
- end
55
-
56
- def failure_details_for example
57
- exception = example.metadata[:execution_result][:exception]
58
- exception.nil? ? "" : "#{exception.message}\n#{format_backtrace(exception.backtrace, example).join("\n")}"
59
- end
60
-
61
- def full_name_for example
62
- test_name = ""
63
- current_example_group = example.metadata[:example_group]
64
- until current_example_group.nil? do
65
- test_name = "#{current_example_group[:description]}." + test_name
66
- current_example_group = current_example_group[:example_group]
67
- end
68
- test_name << example.metadata[:description]
69
- end
70
-
71
- def dump_summary duration, example_count, failure_count, pending_count
72
- builder = Builder::XmlMarkup.new :indent => 2
73
- builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
74
- builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
75
- builder.properties
76
- @test_results.each do |test|
77
- builder.testcase :classname => full_name_for(test), :name => test.metadata[:full_description], :time => test.metadata[:execution_result][:run_time] do
78
- case test.metadata[:execution_result][:status]
79
- when "failed"
80
- builder.failure :message => "failed #{test.metadata[:full_description]}", :type => "failed" do
81
- builder.cdata! failure_details_for test
82
- end
83
- when "pending" then builder.skipped
84
- end
85
- end
86
- end
87
- end
88
- output.puts builder.target!
89
- end
90
- end
91
-
@@ -1,14 +0,0 @@
1
- require 'rake/clean'
2
-
3
- SPEC_PATTERN ='spec/**/*_spec.rb'
4
-
5
- require 'rspec/core/rake_task'
6
- desc "Run examples"
7
- RSpec::Core::RakeTask.new() do |t|
8
- t.pattern = SPEC_PATTERN
9
- if ENV['BUILD_SERVER']
10
- t.rspec_opts = '-r ./junit.rb -f JUnit -o build/test_details.xml'
11
- end
12
- end
13
-
14
- task :gem => [:spec]
@@ -1,166 +0,0 @@
1
- require 'cxx'
2
- require 'cxxproject/utils/cleanup'
3
-
4
- RSPECDIR = File.dirname(__FILE__)
5
- puts RSPECDIR
6
-
7
- class SpecTaskListener
8
- def initialize
9
- @task_execution_count = 0
10
- end
11
- def before_prerequisites(name)
12
- end
13
-
14
- def after_prerequisites(name)
15
- end
16
-
17
- def before_execute(name)
18
- @task_execution_count += 1
19
- end
20
-
21
- def after_execute(name)
22
- end
23
- def reset_exec_count()
24
- @task_execution_count = 0
25
- end
26
- def get_exec_count()
27
- @task_execution_count
28
- end
29
- end
30
-
31
- def rebuild
32
- tasks = fresh_cxx.all_tasks
33
- execute_all_tasks(tasks)
34
- end
35
-
36
- def check_rebuilding (end_product, prereq_file, should_rebuild = true)
37
- sleep(1)
38
- FileUtils.touch prereq_file
39
- # prereq_file should be newer
40
- File.mtime(prereq_file).should > File.mtime(end_product)
41
- rebuild
42
- if should_rebuild
43
- # prereq_file should NOT be newer
44
- File.mtime(prereq_file).should <= File.mtime(end_product)
45
- else
46
- # prereq_file should still be newer
47
- File.mtime(prereq_file).should > File.mtime(end_product)
48
- end
49
- end
50
-
51
- def execute_all_tasks(tasks)
52
- tasks.each do |t|
53
- t.invoke
54
- end
55
- end
56
-
57
- def fresh_cxx
58
- Cxxproject::Utils.cleanup_rake
59
- outputdir = 'output'
60
- cxx(FileList['**/project.rb'], outputdir, 'gcc','.')
61
- end
62
-
63
- def cleanup
64
- rm_r 'output' if File.directory?('output')
65
- end
66
-
67
- ONLY_ONE_HEADER = "#{RSPECDIR}/testdata/onlyOneHeader"
68
- describe Cxx::RubyDsl do
69
- before(:all) do
70
- Rake::application.options.silent = true
71
- end
72
-
73
- it 'should provide runtask for executables' do
74
- cd ONLY_ONE_HEADER, :verbose => false do
75
- cleanup
76
- tasks = fresh_cxx.all_tasks
77
- Rake::Task['run:basic'].invoke
78
- cleanup
79
- end
80
- end
81
-
82
- it 'should rebuild only when one file was changed' do
83
- require 'cxxproject/ext/rake_listener'
84
- require 'cxxproject/ext/rake_dirty'
85
-
86
- listener = SpecTaskListener.new
87
- Rake::add_listener(listener)
88
- cd(ONLY_ONE_HEADER, :verbose => false) do
89
- # fresh build
90
- listener.reset_exec_count
91
- cleanup
92
-
93
- tasks = fresh_cxx.all_tasks
94
- CLOBBER.each { |fn| rm_r fn rescue nil }
95
- execute_all_tasks(tasks)
96
- fresh_build_steps = listener.get_exec_count
97
-
98
- # rebuild, nothing changed
99
- listener.reset_exec_count
100
- execute_all_tasks(tasks)
101
- rebuild_build_steps = listener.get_exec_count
102
-
103
- # rebuild, nothing changed
104
- listener.reset_exec_count
105
- execute_all_tasks(tasks)
106
- listener.get_exec_count.should == rebuild_build_steps
107
-
108
- # rebuild after header changed
109
- listener.reset_exec_count
110
- sleep(1)
111
- files2touch = Dir.glob('help.h')
112
- FileUtils.touch files2touch
113
- execute_all_tasks(fresh_cxx.all_tasks)
114
- rebuild_after_touch_steps = listener.get_exec_count
115
- rebuild_after_touch_steps.should > rebuild_build_steps
116
-
117
- # rebuild, nothing changed
118
- listener.reset_exec_count
119
- execute_all_tasks(tasks)
120
- listener.get_exec_count.should == rebuild_build_steps
121
-
122
- cleanup
123
- end
124
- Rake::remove_listener(listener)
125
- end
126
-
127
- it 'should rebuild when any source file changes' do
128
- cd("#{RSPECDIR}/testdata/basic", :verbose => false) do
129
- cleanup
130
-
131
- tasks = fresh_cxx.all_tasks
132
- CLOBBER.each { |fn| rm_r fn rescue nil }
133
- execute_all_tasks(tasks)
134
-
135
- # dependencies: exe -> libC -> libB
136
-
137
- headerA = 'exe12/help.h'
138
- sourceA = 'exe12/main.cpp'
139
- projectA = 'exe12/project.rb'
140
- headerB = 'lib1/lib1.h'
141
- sourceB = 'lib1/lib1.cpp'
142
- projectB = 'lib1/project.rb'
143
- headerC = 'lib2/lib2.h'
144
- sourceC = 'lib2/lib2.cpp'
145
- projectC = 'lib2/project.rb'
146
- exe = 'output/basic.exe'
147
- libB = 'output/libs/lib1.a'
148
- libC = 'output/libs/lib2.a'
149
-
150
- check_rebuilding exe, headerA
151
- check_rebuilding exe, sourceA
152
- check_rebuilding exe, projectA
153
- check_rebuilding exe, headerB
154
- check_rebuilding exe, headerC
155
- check_rebuilding libB, sourceA, false
156
- check_rebuilding libB, sourceB
157
-
158
- check_rebuilding libB, sourceC, false
159
- check_rebuilding libC, sourceB
160
-
161
- cleanup
162
- Cxxproject::Utils.cleanup_rake
163
- end
164
- end
165
-
166
- end
@@ -1,63 +0,0 @@
1
- require 'cxx'
2
- require 'cxxproject/ext/rake_listener.rb'
3
- require 'cxxproject/utils/cleanup'
4
-
5
- OUT_DIR='cxxbuild'
6
-
7
- describe Rake::Task do
8
- compiler = 'gcc'
9
-
10
- before(:each) do
11
- Rake::application.options.silent = true
12
- Cxxproject::Utils.cleanup_rake
13
- end
14
-
15
- after(:each) do
16
- Cxxproject::Utils.cleanup_rake
17
- end
18
-
19
- it 'should fail if source of object is missing' do
20
- file 'test.cc' => 'compiler'
21
- File.delete('test.cc') if File.exists?('test.cc')
22
- sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
23
- cxx = cxx([], OUT_DIR, compiler, '.')
24
-
25
- task = Rake::application['lib:testlib']
26
- task.invoke
27
- task.failure.should eq(true)
28
-
29
- FileUtils.rm_rf(OUT_DIR)
30
- end
31
-
32
- it 'should not fail if include-dependency of object is missing' do
33
- File.open('test.cc', 'w') do |io|
34
- io.puts('#include "test.h"')
35
- end
36
-
37
- File.open('test.h', 'w') do |io|
38
- end
39
-
40
- sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
41
- cxx([], OUT_DIR, compiler, '.')
42
-
43
- task = Rake::application['lib:testlib']
44
- task.invoke
45
- task.failure.should == false
46
-
47
- Cxxproject::Utils.cleanup_rake
48
-
49
- FileUtils.rm_rf('test.h')
50
- File.open('test.cc', 'w') do |io|
51
- end
52
-
53
- sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
54
- cxx([], OUT_DIR, compiler, '.')
55
-
56
- task = Rake::application[File.join(OUT_DIR, 'libs', 'libtestlib.a')]
57
- task.invoke
58
- task.failure.should == false
59
-
60
- FileUtils.rm_rf('test.cc')
61
- end
62
-
63
- end
@@ -1,69 +0,0 @@
1
- require 'cxx'
2
- require 'cxxproject/utils/cleanup'
3
-
4
- RSPECDIR = File.dirname(__FILE__)
5
-
6
- describe Cxx::RubyDsl do
7
-
8
- def execute_all_tasks(tasks)
9
- tasks.each do |t|
10
- t.invoke
11
- end
12
- end
13
-
14
- def fresh_cxx(outputdir,base)
15
- Cxxproject::Utils.cleanup_rake
16
- project_configs = nil
17
- cd base do # have to be relative to base
18
- project_configs = Dir.glob('**/project.rb')
19
- end
20
- cxx(project_configs, outputdir, 'gcc', base)
21
- end
22
-
23
- # def is_older? fileA, fileB
24
- # File.mtime(fileA) < File.mtime(fileB)
25
- # end
26
-
27
- # def is_newer? fileA, fileB
28
- # File.mtime(fileA) > File.mtime(fileB)
29
- # end
30
-
31
- def test_on_level(base, outputdir)
32
- libOne = "#{outputdir}/libs/lib1.a"
33
- libTwo = "#{outputdir}/libs/lib2.a"
34
- exe = "#{outputdir}/basic.exe"
35
- exe2 = "#{outputdir}/debug.exe"
36
- files = [libOne,libTwo,exe,exe2]
37
- rm_r outputdir if File.directory?(outputdir)
38
- tasks = fresh_cxx(outputdir, base).all_tasks
39
- CLOBBER.each { |fn| rm_r fn rescue nil }
40
-
41
- files.all? {|f| File.exists?(f).should be_false }
42
-
43
- execute_all_tasks(tasks)
44
-
45
- files.all? {|f| File.exists?(f).should be_true }
46
-
47
- # cleanup
48
- rm_r outputdir if File.directory?(outputdir)
49
- Cxxproject::Utils.cleanup_rake
50
- end
51
-
52
- it 'should resolve paths on different levels' do
53
- outputdir = 'output'
54
-
55
- cd("#{RSPECDIR}/testdata/multiple_levels", :verbose => false) do
56
- test_on_level(".", outputdir)
57
- end
58
-
59
- cd("#{RSPECDIR}/testdata/multiple_levels/mainproject", :verbose => false) do
60
- test_on_level("..", outputdir)
61
- end
62
-
63
- cd("#{RSPECDIR}/testdata", :verbose => false) do
64
- test_on_level("multiple_levels/", outputdir)
65
- end
66
- end
67
-
68
- end
69
-
@@ -1,5 +0,0 @@
1
- #include "help.h"
2
- #include <iostream>
3
- void helpMe() {
4
- std::cout << "help me" << std::endl;
5
- }
@@ -1,6 +0,0 @@
1
- #ifndef help_h_
2
- #define help_h_
3
-
4
- void helpMe();
5
-
6
- #endif
@@ -1,10 +0,0 @@
1
- // #include "lib2.h"
2
- #include <iostream>
3
- #include "help.h"
4
-
5
- int main(int argc, char** args) {
6
- helpMe();
7
- // lib2();
8
- std::cout << "hello world" << std::endl;
9
- return 0;
10
- }
@@ -1,5 +0,0 @@
1
- cxx_configuration do
2
- exe "basic",
3
- :sources => FileList.new('**/*.cpp'),
4
- :dependencies => ['2']
5
- end
@@ -1,7 +0,0 @@
1
- #include "lib1.h"
2
-
3
- #include <iostream>
4
-
5
- void lib1() {
6
- std::cout << "lib1" << std::endl;
7
- }
@@ -1,8 +0,0 @@
1
- #ifndef lib1_h_
2
- #define lib1_h_
3
-
4
- void lib1();
5
-
6
-
7
- #endif
8
-
@@ -1,5 +0,0 @@
1
- cxx_configuration do
2
- source_lib "1",
3
- :sources => ['lib1.cpp'],
4
- :includes => ['.']
5
- end
@@ -1,17 +0,0 @@
1
- #include "lib2.h"
2
-
3
- #include <iostream>
4
- #include <math.h>
5
- #include "lib1.h"
6
- #include <dlfcn.h>
7
- #include <zlib.h>
8
-
9
- void lib2() {
10
- std::cout << "lib2" << std::endl;
11
- lib1();
12
- std::cout << sin(5) << std::endl;
13
- void* help = dlopen("test", RTLD_LAZY);
14
- std::cout << (long)help << std::endl;
15
- Bytef b = 0;
16
- uLong res = crc32(0, &b, 1);
17
- }
@@ -1,6 +0,0 @@
1
- #ifndef lib2_h_
2
- #define lib2_h_
3
-
4
- void lib2();
5
-
6
- #endif
@@ -1,8 +0,0 @@
1
- cxx_configuration do
2
- deps = ['1', BinaryLibrary.new('z')]
3
- deps << BinaryLibrary.new('dl') if Utils::OS.linux?
4
- source_lib "2",
5
- :sources => FileList['**/*.cpp'],
6
- :dependencies => deps,
7
- :includes => ['.']
8
- end
@@ -1,7 +0,0 @@
1
- #include "lib1.h"
2
-
3
- #include <iostream>
4
-
5
- void lib1() {
6
- std::cout << "lib1" << std::endl;
7
- }
@@ -1,8 +0,0 @@
1
- #ifndef lib1_h_
2
- #define lib1_h_
3
-
4
- void lib1();
5
-
6
-
7
- #endif
8
-
@@ -1,5 +0,0 @@
1
- cxx_configuration do
2
- source_lib "1",
3
- :sources => FileList['lib1.cpp'],
4
- :includes => ['.']
5
- end
@@ -1,21 +0,0 @@
1
- #include "lib2.h"
2
-
3
- #include <iostream>
4
- #include <math.h>
5
- #include "lib1.h"
6
- #include <dlfcn.h>
7
- #include <zlib.h>
8
-
9
- void lib2() {
10
- #ifdef UNIT_TEST
11
- std::cout << "lib2 for UNIT_TEST defined" << std::endl;
12
- #else
13
- std::cout << "lib2" << std::endl;
14
- #endif
15
- lib1();
16
- std::cout << sin(5) << std::endl;
17
- void* help = dlopen("test", RTLD_LAZY);
18
- std::cout << (long)help << std::endl;
19
- Bytef b = 0;
20
- uLong res = crc32(0, &b, 1);
21
- }
@@ -1,6 +0,0 @@
1
- #ifndef lib2_h_
2
- #define lib2_h_
3
-
4
- void lib2();
5
-
6
- #endif
@@ -1,19 +0,0 @@
1
- cxx_configuration do
2
- deps = ['1', BinaryLibrary.new('z')]
3
- deps << BinaryLibrary.new('dl') if Utils::OS.linux?
4
-
5
- source_lib "2",
6
- :sources => FileList['**/*.cpp'],
7
- :dependencies => deps,
8
- :includes => ['.']
9
-
10
-
11
- unittest_flags = {
12
- :DEFINES => ['UNIT_TEST','CPPUNIT_MAIN="main"']
13
- }
14
- source_lib "2_debug",
15
- :sources => FileList['**/*.cpp'],
16
- :dependencies => deps,
17
- :includes => ['.'],
18
- :toolchain => Provider.modify_cpp_compiler("gcc", unittest_flags)
19
- end
@@ -1,5 +0,0 @@
1
- #include "help.h"
2
- #include <iostream>
3
- void helpMe() {
4
- std::cout << "help me" << std::endl;
5
- }
@@ -1,6 +0,0 @@
1
- #ifndef help_h_
2
- #define help_h_
3
-
4
- void helpMe();
5
-
6
- #endif
@@ -1,10 +0,0 @@
1
- #include "lib2.h"
2
- #include <iostream>
3
- #include "help.h"
4
-
5
- int main(int argc, char** args) {
6
- helpMe();
7
- lib2();
8
- std::cout << "hello world" << std::endl;
9
- return 0;
10
- }
@@ -1,8 +0,0 @@
1
- cxx_configuration do
2
- exe "basic",
3
- :sources => FileList['**/*.cpp'],
4
- :dependencies => ['2']
5
- exe "debug",
6
- :sources => FileList['**/*.cpp'],
7
- :dependencies => ['2_debug']
8
- end
@@ -1 +0,0 @@
1
- output
@@ -1,4 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),"..","..","lib")
2
- require 'cxxproject'
3
- BuildDir='output'
4
- CxxProject2Rake.new(['project.rb'], BuildDir, "clang")
@@ -1,5 +0,0 @@
1
- #include "help.h"
2
- #include <iostream>
3
- void helpMe() {
4
- std::cout << "help me" << std::endl;
5
- }
@@ -1,7 +0,0 @@
1
- #ifndef help_h_
2
- #define help_h_
3
-
4
-
5
- void helpMe();
6
-
7
- #endif
@@ -1,8 +0,0 @@
1
- #include <iostream>
2
- #include "help.h"
3
-
4
- int main(int argc, char** args) {
5
- helpMe();
6
- std::cout << "hello world" << std::endl;
7
- return 0;
8
- }
@@ -1,4 +0,0 @@
1
- cxx_configuration do
2
- exe "basic",
3
- :sources => FileList.new('**/*.cpp')
4
- end
File without changes