build-tool 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +28 -1
  3. data/Manifest.txt +91 -52
  4. data/README.txt +63 -0
  5. data/Rakefile +20 -23
  6. data/bin/build-tool +53 -0
  7. data/lib/build-tool.rb +7 -0
  8. data/lib/build-tool/GUI.rb +360 -0
  9. data/lib/build-tool/application.rb +84 -0
  10. data/lib/build-tool/build-system/autoconf.rb +60 -0
  11. data/lib/build-tool/build-system/base.rb +142 -0
  12. data/lib/build-tool/build-system/cmake.rb +119 -0
  13. data/lib/build-tool/build-system/custom.rb +115 -0
  14. data/lib/build-tool/build-system/qt.rb +113 -0
  15. data/lib/build-tool/cfg/lexer.rb +558 -0
  16. data/lib/build-tool/cfg/lexer.rex +248 -0
  17. data/lib/build-tool/cfg/lexer_base.rb +82 -0
  18. data/lib/build-tool/cfg/node.rb +94 -0
  19. data/lib/build-tool/cfg/parser.rb +871 -0
  20. data/lib/build-tool/cfg/parser.y +279 -0
  21. data/lib/build-tool/cfg/visitor.rb +471 -0
  22. data/lib/build-tool/commands.rb +639 -0
  23. data/lib/build-tool/commands/build.rb +120 -0
  24. data/lib/build-tool/commands/configure.rb +73 -0
  25. data/lib/build-tool/commands/ctags.rb +46 -0
  26. data/lib/build-tool/commands/environments.rb +29 -0
  27. data/lib/build-tool/commands/environments/list.rb +37 -0
  28. data/lib/build-tool/commands/environments/set.rb +33 -0
  29. data/lib/build-tool/commands/fetch.rb +50 -0
  30. data/lib/build-tool/commands/files.rb +73 -0
  31. data/lib/build-tool/commands/help.rb +22 -0
  32. data/lib/build-tool/commands/info.rb +48 -0
  33. data/lib/build-tool/commands/install.rb +56 -0
  34. data/lib/build-tool/commands/modules.rb +29 -0
  35. data/lib/build-tool/commands/modules/info.rb +75 -0
  36. data/lib/build-tool/commands/modules/list.rb +49 -0
  37. data/lib/build-tool/commands/modules/shell.rb +40 -0
  38. data/lib/build-tool/commands/rebase.rb +46 -0
  39. data/lib/build-tool/commands/recipes.rb +32 -0
  40. data/lib/build-tool/commands/recipes/info.rb +46 -0
  41. data/lib/build-tool/commands/recipes/install.rb +184 -0
  42. data/lib/build-tool/commands/recipes/list.rb +33 -0
  43. data/lib/build-tool/configuration.rb +115 -0
  44. data/lib/build-tool/environment.rb +119 -0
  45. data/lib/build-tool/errors.rb +9 -0
  46. data/lib/build-tool/module.rb +366 -0
  47. data/lib/build-tool/pluginbase.rb +43 -0
  48. data/lib/build-tool/recipe.rb +180 -0
  49. data/lib/build-tool/repository.rb +59 -0
  50. data/lib/build-tool/server.rb +43 -0
  51. data/lib/build-tool/singleton.rb +50 -0
  52. data/lib/build-tool/sshkey.rb +22 -0
  53. data/lib/build-tool/vcs/base.rb +105 -0
  54. data/lib/build-tool/vcs/git-svn.rb +154 -0
  55. data/lib/build-tool/vcs/git.rb +187 -0
  56. data/lib/build-tool/vcs/svn.rb +136 -0
  57. data/lib/mj/logging.rb +31 -0
  58. data/lib/mj/tools/ssh.rb +64 -0
  59. data/lib/{kde-build → mj/tools}/subprocess.rb +21 -16
  60. data/lib/mj/visitor.rb +21 -0
  61. data/recipes/kde/files/finish_installation.sh +16 -0
  62. data/recipes/kde/files/kde4.desktop +22 -0
  63. data/recipes/kde/files/xsession +89 -0
  64. data/recipes/kde/info.yaml +10 -0
  65. data/recipes/kde/recipe +585 -0
  66. data/recipes/kde/recipe-local +90 -0
  67. data/recipes/kde/settings.yaml +52 -0
  68. data/recipes/kde43/info.yaml +10 -0
  69. data/recipes/kde43/recipe +256 -0
  70. data/recipes/kde43/recipe-local +90 -0
  71. data/recipes/kde43/settings.yaml +32 -0
  72. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/compile.sh +77 -0
  73. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/configure.sh +70 -0
  74. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/install.sh +39 -0
  75. data/recipes/kdeqt4.6/info.yaml +7 -0
  76. data/recipes/kdeqt4.6/recipe +155 -0
  77. data/recipes/kdeqt4.6/recipe-local +30 -0
  78. data/recipes/kdeqt4.6/settings.yaml +27 -0
  79. data/tags +745 -0
  80. data/tasks/genfiles.rake +28 -0
  81. data/tasks/rdoc.rake +34 -0
  82. data/tasks/rspec.rake +21 -0
  83. data/test.rb +28 -0
  84. data/test/commands/test_build.rb +29 -0
  85. data/test/test_build_system.rb +98 -0
  86. data/test/test_cli.rb +61 -0
  87. data/test/test_command.rb +175 -0
  88. data/test/test_configuration_parser.rb +542 -0
  89. data/test/test_environment.rb +82 -0
  90. data/test/test_helper.rb +39 -7
  91. data/test/test_module.rb +158 -0
  92. data/test/test_repository.rb +75 -0
  93. data/test/test_singleton.rb +51 -0
  94. data/test/test_ssh_key.rb +14 -0
  95. data/test/test_svn_parser.rb +28 -0
  96. data/test/test_vcs.rb +33 -0
  97. metadata +139 -90
  98. metadata.gz.sig +0 -0
  99. data/PostInstall.txt +0 -3
  100. data/TODO +0 -2
  101. data/bin/kde-build.rb +0 -21
  102. data/config/website.yml +0 -2
  103. data/config/website.yml.sample +0 -2
  104. data/lib/kde-build.rb +0 -18
  105. data/lib/kde-build/application.rb +0 -270
  106. data/lib/kde-build/build_system.rb +0 -28
  107. data/lib/kde-build/build_system/autoconf.rb +0 -108
  108. data/lib/kde-build/build_system/base.rb +0 -139
  109. data/lib/kde-build/build_system/cmake.rb +0 -94
  110. data/lib/kde-build/build_system/qtcopy.rb +0 -127
  111. data/lib/kde-build/command.rb +0 -42
  112. data/lib/kde-build/command/build.rb +0 -106
  113. data/lib/kde-build/command/compile.rb +0 -39
  114. data/lib/kde-build/command/configure.rb +0 -48
  115. data/lib/kde-build/command/ctags.rb +0 -41
  116. data/lib/kde-build/command/fetch.rb +0 -33
  117. data/lib/kde-build/command/help.rb +0 -71
  118. data/lib/kde-build/command/info.rb +0 -45
  119. data/lib/kde-build/command/install.rb +0 -39
  120. data/lib/kde-build/command/module_based.rb +0 -44
  121. data/lib/kde-build/command/rebase.rb +0 -50
  122. data/lib/kde-build/command/version.rb +0 -43
  123. data/lib/kde-build/configuration.rb +0 -209
  124. data/lib/kde-build/exception.rb +0 -6
  125. data/lib/kde-build/metaaid.rb +0 -18
  126. data/lib/kde-build/module.rb +0 -227
  127. data/lib/kde-build/module_configuration.rb +0 -107
  128. data/lib/kde-build/moduleregistry.rb +0 -85
  129. data/lib/kde-build/tools/ctags.rb +0 -59
  130. data/lib/kde-build/tools/logging.rb +0 -49
  131. data/lib/kde-build/tools/make.rb +0 -58
  132. data/lib/kde-build/tools/ssh.rb +0 -47
  133. data/lib/kde-build/vcs.rb +0 -28
  134. data/lib/kde-build/vcs/base.rb +0 -85
  135. data/lib/kde-build/vcs/git-svn.rb +0 -139
  136. data/lib/kde-build/vcs/git.rb +0 -121
  137. data/lib/kde-build/vcs/svn.rb +0 -102
  138. data/script/console +0 -10
  139. data/script/destroy +0 -14
  140. data/script/generate +0 -14
  141. data/script/txt2html +0 -71
  142. data/test.yaml.tmpl +0 -632
  143. data/test/test_kde-build.rb +0 -11
  144. data/test/test_vcs_svn.rb +0 -44
  145. data/website/index.html +0 -84
  146. data/website/index.txt +0 -59
  147. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  148. data/website/stylesheets/screen.css +0 -159
  149. data/website/template.html.erb +0 -50
@@ -1,44 +0,0 @@
1
- require 'kde-build/command'
2
-
3
- module BuildTool
4
-
5
- class ModuleBasedCommand < Command
6
-
7
- def execute( args )
8
-
9
- # If no argument is given show the help and quit.
10
- if args.length == 0
11
- show_help
12
- return
13
- end
14
-
15
- # Map the command line to real modules
16
- real_modules = []
17
- ModuleRegistry.get_modules( args ) do |mod|
18
- # Check if the module is fit for the command
19
- if is_module_ready( mod )
20
- real_modules.push( mod )
21
- end
22
- end
23
-
24
- # Execute the command for each module
25
- real_modules.each do |mod|
26
- begin
27
-
28
- execute_for_module( mod )
29
-
30
- rescue Interrupt => e
31
- $log.info("SIGBREAK recieved.")
32
- return
33
-
34
- rescue Exception => e
35
- $log.info("error: #{e.class}: #{e.message}")
36
- puts e.backtrace if $verbose
37
- end
38
-
39
- end
40
- end
41
-
42
- end
43
-
44
- end
@@ -1,50 +0,0 @@
1
- require 'kde-build/command/module_based'
2
-
3
- module BuildTool
4
-
5
- class RebaseCommand < ModuleBasedCommand
6
-
7
- def initialize
8
- super( 'rebase', false )
9
- self.short_desc = "Rebase the local repository."
10
- self.description = <<-"EOS"
11
- Rebases the local repository against the changes made in the remote
12
- repository. The changes will be first fetched and then the rebase is done. If
13
- the vcs doesn't support that separation fetch and rebase are done in one step.
14
-
15
- If --no-update is present only a rebase is done. Remember that svn doesn't
16
- support that separation and will still fetch changes.
17
- EOS
18
- @update = true
19
- self.options = CmdParse::OptionParserWrapper.new do |opt|
20
- opt.separator "Options:"
21
- opt.on( "--no-update", "Do not update from the repository" ) { |t|
22
- @update = false
23
- }
24
- end
25
- end
26
-
27
- def is_module_ready( mod )
28
- mod.activate_ssh_key
29
- true
30
- end
31
-
32
- def execute_for_module( mod )
33
-
34
- $log.info( "###############################################################" )
35
- $log.info( "### Rebasing module #{mod.name}" )
36
- $log.info( "###############################################################" )
37
-
38
- if mod.checkedout?
39
- mod.fetch if @update
40
- mod.rebase
41
- else
42
- mod.init
43
- end
44
- end
45
-
46
- end
47
-
48
-
49
- end
50
-
@@ -1,43 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- require 'kde-build/command'
4
-
5
- module BuildTool
6
-
7
-
8
- # The default version command. It adds the options "-v" and "--version" to the global options of
9
- # the associated +CommandParser+. When specified on the command line, it shows the version of the
10
- # program.
11
- class VersionCommand < Command
12
-
13
- def initialize
14
- super( 'version', false )
15
- self.short_desc = "Show the version of the program"
16
- end
17
-
18
- def init
19
- case commandparser.main_command.options
20
- when CmdParse::OptionParserWrapper
21
- commandparser.main_command.options.instance do |opt|
22
- opt.on_tail( "--version", "-v", "Show the version of the program" ) do
23
- execute( [] )
24
- end
25
- end
26
- end
27
- end
28
-
29
- def usage
30
- "Usage: #{commandparser.program_name} version"
31
- end
32
-
33
- def execute( args )
34
- version = commandparser.program_version
35
- version = version.join( '.' ) if version.instance_of?( Array )
36
- puts commandparser.banner + "\n" if commandparser.banner
37
- puts version
38
- end
39
-
40
- end
41
-
42
-
43
- end
@@ -1,209 +0,0 @@
1
- # encoding: utf-8
2
- #
3
-
4
- require 'kde-build/metaaid'
5
-
6
- module MJ;
7
-
8
- class ConfigurationError < Exception
9
- end
10
-
11
- module Configuration
12
-
13
- class Option
14
-
15
- attr_accessor :name, :attribute, :description, :default
16
-
17
- def initialize( obj, name, description )
18
- @name = name
19
- @attribute =self.class.sanitize name
20
- @description = description
21
- @default = nil
22
- @one_of = nil
23
- @on_read = nil
24
- @on_write = nil
25
- @required = false
26
-
27
- install obj
28
- end
29
-
30
- def default=( value )
31
- @default = value
32
- self
33
- end
34
-
35
- def self.sanitize( name )
36
- name.gsub( /[^a-zA-Z_]/, '_' )
37
- end
38
-
39
- def install( obj )
40
- attribute = @attribute
41
-
42
- obj.class_def( attribute ) do
43
- opt = self.class.__options__[attribute]
44
- value = self.values[attribute]
45
- end
46
-
47
- obj.class_def( "#{attribute}=" ) do
48
- |value|
49
- opt = self.class.__options__[attribute]
50
-
51
- if !opt
52
- puts self
53
- puts self.class.__options__.inspect
54
- raise Exception, "????"
55
- end
56
- # First validate the value
57
- opt.validate(value)
58
- value = opt.write(value)
59
-
60
- # Then call the custom on_write method
61
- self.values[attribute] = value
62
- end
63
- end
64
-
65
- def validate( value )
66
- if @one_of and !@one_of.include? value
67
- raise ConfigurationError, "Value #{value} is invalid for #{@name}."
68
- end
69
- if @required and value === nil || value.empty?
70
- raise ConfigurationError, "Required option #{@name} is not set."
71
- end
72
- end
73
-
74
- def one_of( options )
75
- @one_of = options
76
- self
77
- end
78
-
79
- def on_write( &block )
80
- @on_write = block
81
- end
82
-
83
- def required
84
- @required = true
85
- self
86
- end
87
-
88
- def write( value )
89
- begin
90
- return @on_write.call( value ) if @on_write
91
- value
92
- rescue Exception => e
93
- $log.error("Error while setting #{@name} to #{value}")
94
- raise e
95
- end
96
- end
97
-
98
- def on_read( &block )
99
- @on_read = block
100
- end
101
-
102
- def read( value )
103
- return @on_read.call( value ) if @on_read
104
- value
105
- end
106
-
107
- end
108
-
109
- def flatten_values( val, &block )
110
- if val.instance_of?( Array )
111
- val.each do |i|
112
- flatten_values( i, &block )
113
- end
114
- elsif val.instance_of?( Hash )
115
- val.each do |k, v|
116
- yield k, v
117
- end
118
- else
119
- puts o.class
120
- puts o.inspect
121
- raise Exception, "??????????"
122
- end
123
- end
124
- module_function :flatten_values
125
-
126
-
127
- module Configurable
128
-
129
- def self.included( klass )
130
- klass.extend( ClassMethods )
131
- klass.send( :class_variable_set, '@@__options__', Hash.new )
132
- end
133
-
134
- module ClassMethods
135
-
136
- def __options__
137
- class_variable_get( '@@__options__' )
138
- end
139
-
140
- def option( name, description )
141
- opt = Option.new( self, name, description )
142
- self.__options__[opt.attribute] = opt
143
- opt
144
- end
145
-
146
-
147
- end
148
-
149
-
150
- def values
151
- return @values if @values
152
- @values = Hash.new
153
- self.class.__options__.each_pair do |name, opt|
154
- @values[name] = opt.default
155
- end
156
- @values
157
- end
158
-
159
- def set( key, val )
160
- begin
161
- # puts "Options = #{self.class.options.inspect}"
162
- self.send( "#{Option.sanitize( key )}=", val )
163
- rescue BuildTool::VCS::UnknownVcsError => e
164
- $log.warn( "Unknown vcs '#{key}' configured for #{self.name}:#{self.class}" )
165
- raise e
166
- rescue NameError => e
167
- $log.warn( "Unknown option #{key} configured for #{self.name}:#{self.class}" )
168
- raise e
169
- rescue Exception => e
170
- $log.warn( "Caught exception #{e.message} for #{self.inspect}:#{self.class} while setting #{key} to #{val.inspect}" )
171
- raise e
172
- end
173
- end
174
-
175
- def validate
176
- begin
177
- self.class.__options__.each_pair do |name, opt|
178
- opt.validate( self.values[opt.attribute] )
179
- end
180
- rescue ConfigurationError => e
181
- $log.error( "Validation for #{self.class} (#{self.to_s}) failed: #{e}" )
182
- puts e.backtrace if $verbose
183
- raise e
184
- end
185
- end
186
-
187
- def parse( val )
188
- # If it is a array we expect it to only contain hashes
189
- if val.instance_of?( Array )
190
- val.each { |i| parse( i ) }
191
- elsif val.instance_of?( Hash )
192
- val.each_pair {
193
- |k, v|
194
- begin
195
- # puts "#{self.class}.#{k} = #{v}"
196
- send "#{Option.sanitize k}=", v
197
- rescue NameError => e
198
- $log.warn( "Unknown option '#{k}' for #{self.class} in #{self.name}: #{e}" )
199
- end
200
- }
201
- else
202
- raise Exception, "FIXME"
203
- end
204
- self
205
- end
206
- end
207
- end
208
- end
209
-
@@ -1,6 +0,0 @@
1
- module BuildTool
2
-
3
- class BuildToolError < Exception
4
- end
5
-
6
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Object
4
-
5
- # The hidden singleton lurks behind everyone
6
- def metaclass; class << self; self; end; end
7
- def meta_eval &blk; metaclass.instance_eval( &blk ); end
8
-
9
- # Adds methods to a metaclass
10
- def meta_def name, &blk
11
- meta_eval { define_method name, &blk }
12
- end
13
-
14
- # Defines an instance method within a class
15
- def class_def name, &blk
16
- class_eval { define_method name, &blk }
17
- end
18
- end
@@ -1,227 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- require 'kde-build/tools/ssh.rb'
4
- require 'kde-build/tools/logging.rb'
5
-
6
- module BuildTool
7
-
8
- class ConfigureError < Exception
9
- end
10
-
11
- class BuildError < Exception
12
- end
13
-
14
- class Module
15
-
16
- def initialize(config)
17
- @config = config
18
- @build_system = nil
19
- @vcs = nil
20
- end
21
-
22
- def activate_ssh_key
23
- # No key, no cookies
24
- return if !@config.ssh_key
25
-
26
- ssh = MJ::Tools::SSH.new
27
- if !ssh.has_key? ssh_key
28
- ssh.add_key(ssh_file)
29
- end
30
- end
31
-
32
- def name
33
- @config.name
34
- end
35
-
36
- # The build directory
37
- def build_directory
38
- "#{workdir}/bld/#{local_path}"
39
- end
40
-
41
- def local_path
42
- @local_path = @config.local_path || @config.remote_path
43
- end
44
-
45
- def build( install, clean = false )
46
- $log.info("Compiling")
47
- rc = nil
48
- if clean
49
- while_logging_to( name, "50_build" ) do
50
- if build_system.make( "clean" ) != 0
51
- raise BuildError, "make returned error code #{rc}"
52
- end
53
- $log.info( "make clean was successful" )
54
- end
55
- end
56
-
57
- while_logging_to( name, "50_build" ) do
58
- rc =
59
- if install
60
- build_system.make( "install" )
61
- else
62
- build_system.make
63
- end
64
-
65
- if rc != 0
66
- raise BuildError, "make returned error code #{rc}"
67
- end
68
- $log.info( "build was successful" )
69
- end
70
- end
71
-
72
- # The build system
73
- def build_system
74
- if not @build_system
75
- if not @config.build_system
76
- klass = BuildTool::BuildSystem::Registry.guess( source_directory )
77
- if !klass
78
- raise ModuleError, "Failed to guess the build system for #{name}"
79
- end
80
- else
81
- klass = BuildTool::BuildSystem::get(@config.build_system.name)
82
- end
83
- @build_system = klass.new( self )
84
- @build_system.configuration = @config.build_system
85
- end
86
- @build_system
87
- end
88
-
89
-
90
- def remove_build_directory
91
- $log.info("removing #{build_directory}")
92
- build_system.remove_build_directory
93
- end
94
-
95
-
96
- # Configure the module
97
- def reconfigure( clean = false )
98
- $log.info("Reconfiguring")
99
- while_logging_to( name, "30_configure" ) do
100
- if !$noop and !vcs.checkedout?
101
- raise ConfigureError, "Module is not checked out."
102
- end
103
- rc = build_system.reconfigure( clean )
104
- if rc != 0
105
- raise ConfigureError, "configure returned error code #{rc}"
106
- end
107
- end
108
- end
109
-
110
- # Configure the module
111
- def configure
112
- $log.info("configuring")
113
- while_logging_to( name, "30_configure" ) do
114
- if !$noop and !vcs.checkedout?
115
- raise ConfigureError, "Module is not checked out."
116
- end
117
- rc = build_system.configure
118
- if rc != 0
119
- raise ConfigureError, "configure returned error code #{rc}"
120
- end
121
- end
122
- end
123
-
124
- # Is the module already configured?
125
- def configured?
126
- if !vcs.checkedout?
127
- return false
128
- end
129
- build_system.configured?
130
- end
131
-
132
- def checkedout?
133
- vcs.checkedout?
134
- end
135
-
136
- def env
137
- @config.env
138
- end
139
-
140
- def fetch
141
- $log.info("Fetching from #{remote_path}")
142
- while_logging_to( name, "20_fetch" ) do
143
- vcs.fetch
144
- end
145
- end
146
-
147
- def init
148
- $log.info("Initializing #{local_path} from #{remote_path}")
149
- while_logging_to( name, "10_initialize" ) do
150
- vcs.init
151
- end
152
- end
153
-
154
- def info
155
- puts "############### Module #{name}"
156
- puts "Repository: #{remote_path}"
157
- puts "SSH Key: #{ssh_file}" if ssh_file
158
- puts "Local Checkout: #{workdir}/#{local_path} #{configured? ? '(EXISTS)' : '' }"
159
- puts "Build Directory: #{build_directory} #{checkedout? ? '(EXISTS)' : '' }"
160
- puts "Prefix: #{prefix}"
161
- puts "Environment:"
162
- env.each do |var, val|
163
- puts " %-20s %s" % [ var + ":", val ]
164
- end if env
165
- vcs.info
166
- build_system.info
167
- end
168
-
169
- def ssh_key
170
- return @config.ssh_key
171
- end
172
-
173
- def ssh_file
174
- return @config.ssh_file
175
- end
176
-
177
- # The root directory for the +/bld+, +/src+ and +/log+ directories
178
- def workdir
179
- Application::instance.workdir
180
- end
181
-
182
- def rebase
183
- $log.info("rebasing")
184
- while_logging_to( name, "40_rebase" ) do
185
- vcs.rebase
186
- end
187
- end
188
-
189
- # The absolute remote path
190
- def remote_path
191
- "#{repository}/#{@config.remote_path}"
192
- end
193
-
194
- # The repository url
195
- def repository
196
- @config.repository
197
- end
198
-
199
- def prefix
200
- @config.prefix
201
- end
202
-
203
- # The absolute source directory.
204
- def source_directory
205
- "#{workdir}/src/#{local_path}"
206
- end
207
-
208
- # reimplement
209
- def to_yaml_type
210
- "!michael-jansen.biz,2009-01-01/Module"
211
- end
212
-
213
- # #########
214
- # protected
215
- # #########
216
-
217
- def vcs
218
- if ! @vcs
219
- @vcs = VCS::get(@config.vcs.name).new( remote_path, source_directory )
220
- @vcs.configuration = @config.vcs
221
- end
222
- @vcs
223
- end
224
-
225
- end
226
-
227
- end