build-tool 0.0.1

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.
Files changed (54) hide show
  1. data.tar.gz.sig +3 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +51 -0
  4. data/PostInstall.txt +3 -0
  5. data/README.rdoc +55 -0
  6. data/Rakefile +30 -0
  7. data/TODO +2 -0
  8. data/bin/kde-build.rb +21 -0
  9. data/config/website.yml +2 -0
  10. data/config/website.yml.sample +2 -0
  11. data/lib/kde-build.rb +18 -0
  12. data/lib/kde-build/application.rb +258 -0
  13. data/lib/kde-build/build_system.rb +26 -0
  14. data/lib/kde-build/build_system/autoconf.rb +109 -0
  15. data/lib/kde-build/build_system/base.rb +132 -0
  16. data/lib/kde-build/build_system/cmake.rb +82 -0
  17. data/lib/kde-build/build_system/qtcopy.rb +125 -0
  18. data/lib/kde-build/command.rb +30 -0
  19. data/lib/kde-build/command/build.rb +119 -0
  20. data/lib/kde-build/command/fetch.rb +28 -0
  21. data/lib/kde-build/command/help.rb +71 -0
  22. data/lib/kde-build/command/info.rb +42 -0
  23. data/lib/kde-build/command/version.rb +43 -0
  24. data/lib/kde-build/configuration.rb +186 -0
  25. data/lib/kde-build/exception.rb +6 -0
  26. data/lib/kde-build/metaaid.rb +18 -0
  27. data/lib/kde-build/module.rb +203 -0
  28. data/lib/kde-build/module_configuration.rb +107 -0
  29. data/lib/kde-build/moduleregistry.rb +85 -0
  30. data/lib/kde-build/subprocess.rb +82 -0
  31. data/lib/kde-build/tools/ctags.rb +34 -0
  32. data/lib/kde-build/tools/logging.rb +49 -0
  33. data/lib/kde-build/tools/make.rb +58 -0
  34. data/lib/kde-build/tools/ssh.rb +47 -0
  35. data/lib/kde-build/vcs.rb +26 -0
  36. data/lib/kde-build/vcs/base.rb +81 -0
  37. data/lib/kde-build/vcs/git-svn.rb +133 -0
  38. data/lib/kde-build/vcs/git.rb +96 -0
  39. data/lib/kde-build/vcs/svn.rb +105 -0
  40. data/script/console +10 -0
  41. data/script/destroy +14 -0
  42. data/script/generate +14 -0
  43. data/script/txt2html +71 -0
  44. data/test.yaml.tmpl +552 -0
  45. data/test/test_helper.rb +12 -0
  46. data/test/test_kde-build.rb +11 -0
  47. data/test/test_vcs_svn.rb +44 -0
  48. data/website/index.html +84 -0
  49. data/website/index.txt +59 -0
  50. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  51. data/website/stylesheets/screen.css +159 -0
  52. data/website/template.html.erb +50 -0
  53. metadata +171 -0
  54. metadata.gz.sig +0 -0
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'cmdparse'
4
+
5
+ module BuildTool
6
+
7
+
8
+ class Command < CmdParse::Command
9
+
10
+
11
+ def show_help
12
+ puts "#{name}: #{short_desc}"
13
+ puts description if description
14
+ if has_commands?
15
+ list_commands
16
+ end
17
+ end
18
+
19
+ def complete( args )
20
+ if options.instance
21
+ puts options.instance.complete( :long, "-v", true )
22
+ return ["#{name} Yeah"]
23
+ else
24
+ return []
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ #
3
+
4
+ require 'kde-build/command'
5
+ require 'kde-build/command/help'
6
+
7
+ module BuildTool
8
+
9
+
10
+ class BuildCommand < Command
11
+
12
+ def initialize
13
+ super( 'build', false )
14
+ self.short_desc = "build [options] [:package|module|path/]..."
15
+ self.description = "fetch, rebase, build and install the specified modules."
16
+ @update = true
17
+ @configure = false
18
+ @reconfigure = false
19
+ @install = true
20
+ @from_scratch = false
21
+ self.options = CmdParse::OptionParserWrapper.new do |opt|
22
+ opt.separator "Global Options"
23
+ opt.on( "--no-update", "Do not update from the repository" ) { |t|
24
+ @update = false
25
+ }
26
+ opt.on( "--configure", "Run the configuration step again" ) { |t|
27
+ @configure = true
28
+ }
29
+ opt.on( "--reconfigure", "Remove old configuration then run configuration again" ) { |t|
30
+ @reconfigure = true
31
+ }
32
+ opt.on( "--no-install", "Do not install" ) { |t|
33
+ @install = false
34
+ }
35
+ opt.on( "--from-scratch", "Remove build dir" ) { |t|
36
+ @from_scratch = true
37
+ }
38
+ opt.on( "--help", "Show this help" ) { |t|
39
+ }
40
+ end
41
+ end
42
+
43
+ def prepare_execution( mod )
44
+ skip = false
45
+ if @update
46
+ mod.activate_ssh_key
47
+ else
48
+ if !mod.checkedout?
49
+ $log.error("Module #{mod.name} is not checkedout and will be skipped!")
50
+ skip = true
51
+ end
52
+ end
53
+ !skip
54
+ end
55
+
56
+ def execute( args )
57
+ if args.length == 0
58
+ show_help
59
+ return
60
+ end
61
+
62
+ real_modules = []
63
+
64
+ ModuleRegistry.get_modules( args ) do |mod|
65
+ if prepare_execution( mod )
66
+ real_modules.push( mod )
67
+ end
68
+ end
69
+
70
+ real_modules.each do |mod|
71
+ begin
72
+ $log.info( "###############################################################" )
73
+ $log.info( "### Building module #{mod.name}" )
74
+ $log.info( "###############################################################" )
75
+
76
+ if @from_scratch
77
+ mod.remove_build_directory
78
+ end
79
+
80
+ if @update
81
+
82
+ if mod.checkedout?
83
+ mod.fetch
84
+ mod.rebase
85
+ else
86
+ mod.init
87
+ end
88
+
89
+ end
90
+
91
+ if @reconfigure
92
+ mod.reconfigure( true )
93
+
94
+ elsif @configure
95
+ if mod.configured?
96
+ mod.reconfigure
97
+ else
98
+ mod.configure
99
+ end
100
+
101
+ elsif !mod.configured?
102
+ mod.configure
103
+ end
104
+
105
+
106
+ mod.build( @install )
107
+
108
+ rescue Exception => e
109
+ $log.info("error: #{e.class}: #{e.message}")
110
+ puts e.backtrace if $verbose
111
+ end
112
+ $log.info("")
113
+
114
+ end
115
+ end
116
+
117
+ end
118
+
119
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'kde-build/command'
4
+
5
+ module BuildTool
6
+
7
+ class FetchCommand < Command
8
+
9
+ def initialize
10
+ super( 'fetch', false )
11
+ self.short_desc = "Fetch"
12
+ self.description = "Fetch long"
13
+ self.options = CmdParse::OptionParserWrapper.new do |opt|
14
+ opt.on( "--verbose", "Verbose output" ) { |t|
15
+ $verbose = true
16
+ }
17
+ end
18
+
19
+ end
20
+
21
+ def execute( args )
22
+ puts "do: #{args}"
23
+ end
24
+
25
+ end
26
+
27
+
28
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'kde-build/command'
4
+
5
+ module BuildTool
6
+
7
+
8
+ # The default help command. It adds the options "-h" and "--help" to the global options of the
9
+ # associated +CommandParser+. When the command is specified on the command line, it can show the
10
+ # main help or individual command help.
11
+ class HelpCommand < Command
12
+
13
+ def initialize
14
+ super( 'help', false )
15
+ self.short_desc = 'Provide help for individual commands'
16
+ self.description = 'This command prints the program help if no arguments are given. ' \
17
+ 'If one or more command names are given as arguments, these arguments are interpreted ' \
18
+ 'as a hierachy of commands and the help for the right most command is show.'
19
+ end
20
+
21
+ def init
22
+ case commandparser.main_command.options
23
+ when CmdParse::OptionParserWrapper
24
+ commandparser.main_command.options.instance do |opt|
25
+ opt.on_tail( "-h", "--help", "Show help" ) do
26
+ execute( [] )
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def usage
33
+ "Usage: #{commandparser.program_name} help [COMMAND SUBCOMMAND ...]"
34
+ end
35
+
36
+ def execute( args )
37
+ if args.length > 0
38
+ cmd = commandparser.main_command
39
+ arg = args.shift
40
+ while !arg.nil? && cmd.commands[ arg ]
41
+ cmd = cmd.commands[arg]
42
+ arg = args.shift
43
+ end
44
+ if arg.nil?
45
+ cmd.show_help
46
+ else
47
+ raise InvalidArgumentError, args.unshift( arg ).join(' ')
48
+ end
49
+ else
50
+ show_program_help
51
+ end
52
+ end
53
+
54
+ #######
55
+ private
56
+ #######
57
+
58
+ def show_program_help
59
+ puts commandparser.banner + "\n" if commandparser.banner
60
+ puts "Usage: #{commandparser.program_name} [options] COMMAND [options] [COMMAND [options] ...] [args]"
61
+ puts ""
62
+ list_commands( 1, commandparser.main_command )
63
+ puts ""
64
+ puts commandparser.main_command.options.summarize
65
+ puts
66
+ end
67
+
68
+ end
69
+
70
+
71
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'kde-build/command'
4
+
5
+ module BuildTool
6
+
7
+
8
+ class InfoCommand < Command
9
+
10
+ def initialize
11
+ super( 'info', false )
12
+ self.short_desc = "Information about a module"
13
+ self.description = "Retrieve Information aboud modules"
14
+ end
15
+
16
+ def execute( args )
17
+ args.each do |modname|
18
+ mod = ModuleRegistry.get_modules( modname ) do |mod|
19
+ if mod == nil
20
+ puts "#{modname} is unknown"
21
+ return
22
+ end
23
+
24
+ puts "Building: #{modname}"
25
+ puts "Repository: #{mod.repository}"
26
+ puts "Remote Path: #{mod.remote_path}"
27
+ puts "Stage: #{mod.workdir}"
28
+ puts "Build Directory: #{mod.build_directory}"
29
+ puts "Source Directory: #{mod.source_directory}"
30
+
31
+ puts "VCS: #{mod.vcs.name}"
32
+ puts " #{mod.vcs.configuration.externals}"
33
+ puts " checkedout: #{mod.vcs.checkedout?}"
34
+ end
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+
41
+ end
42
+
@@ -0,0 +1,43 @@
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
@@ -0,0 +1,186 @@
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
16
+
17
+ def initialize( obj, name, description )
18
+ @name = name
19
+ @attribute =self.class.sanitize name
20
+ @description = description
21
+ @one_of = nil
22
+ @on_read = nil
23
+ @on_write = nil
24
+ @required = false
25
+ install obj
26
+ end
27
+
28
+ def self.sanitize( name )
29
+ name.gsub( /[^a-zA-Z_]/, '_' )
30
+ end
31
+
32
+ def install( obj )
33
+ attribute = @attribute
34
+
35
+ obj.class_def( attribute ) do
36
+ opt = self.class.__options__[attribute]
37
+ value = self.values[attribute]
38
+ opt.read(value)
39
+ end
40
+
41
+ obj.class_def( "#{attribute}=" ) do
42
+ |value|
43
+ opt = self.class.__options__[attribute]
44
+
45
+ if !opt
46
+ puts self
47
+ puts self.class.__options__.inspect
48
+ end
49
+ # First validate the value
50
+ opt.validate(value)
51
+ value = opt.write(value)
52
+
53
+ # Then call the custom on_write method
54
+ self.values[attribute] = value
55
+ end
56
+ end
57
+
58
+ def validate( value )
59
+ if @one_of and !@one_of.include? value
60
+ raise ConfigurationError, "Value #{value} is invalid for #{@name}."
61
+ end
62
+ if @required and value === nil || value.empty?
63
+ raise ConfigurationError, "Required option #{@name} is not set."
64
+ end
65
+ end
66
+
67
+ def one_of( options )
68
+ @one_of = options
69
+ self
70
+ end
71
+
72
+ def on_write( &block )
73
+ @on_write = block
74
+ end
75
+
76
+ def required
77
+ @required = true
78
+ self
79
+ end
80
+
81
+ def write( value )
82
+ begin
83
+ return @on_write.call( value ) if @on_write
84
+ value
85
+ rescue Exception => e
86
+ $log.error("Error while setting #{@name} to #{value}")
87
+ raise e
88
+ end
89
+ end
90
+
91
+ def on_read( &block )
92
+ @on_read = block
93
+ end
94
+
95
+ def read( value )
96
+ return @on_read.call( value ) if @on_read
97
+ value
98
+ end
99
+
100
+ end
101
+
102
+ def flatten_values( val, &block )
103
+ if val.instance_of?( Array )
104
+ val.each do |i|
105
+ flatten_values( i, &block )
106
+ end
107
+ elsif val.instance_of?( Hash )
108
+ val.each do |k, v|
109
+ yield k, v
110
+ end
111
+ else
112
+ puts o.class
113
+ puts o.inspect
114
+ exit( -1 )
115
+ end
116
+ end
117
+ module_function :flatten_values
118
+
119
+
120
+ module Configurable
121
+
122
+ def self.included( klass )
123
+ klass.extend( ClassMethods )
124
+ klass.send( :class_variable_set, '@@__options__', Hash.new )
125
+ end
126
+
127
+ module ClassMethods
128
+
129
+ def __options__
130
+ class_variable_get( '@@__options__' )
131
+ end
132
+
133
+ def option( name, description )
134
+ opt = Option.new( self, name, description )
135
+ self.__options__[opt.attribute] = opt
136
+ opt
137
+ end
138
+
139
+
140
+ end
141
+
142
+
143
+ def values
144
+ @values ||= Hash.new
145
+ end
146
+
147
+ def set( key, val )
148
+ # puts "Options = #{self.class.options.inspect}"
149
+ self.send( "#{Option.sanitize( key )}=", val )
150
+ end
151
+
152
+ def validate
153
+ begin
154
+ self.class.__options__.each_pair do |name, opt|
155
+ opt.validate( @values[opt.attribute] )
156
+ end
157
+ rescue ConfigurationError => e
158
+ $log.error( "Validation for #{self.class} (#{self.to_s}) failed: #{e}" )
159
+ puts e.backtrace if $verbose
160
+ raise e
161
+ end
162
+ end
163
+
164
+ def parse( val )
165
+ # If it is a array we expect it to only contain hashes
166
+ if val.instance_of?( Array )
167
+ val.each { |i| parse( i ) }
168
+ elsif val.instance_of?( Hash )
169
+ val.each_pair {
170
+ |k, v|
171
+ begin
172
+ # puts "#{self.class}.#{k} = #{v}"
173
+ send "#{Option.sanitize k}=", v
174
+ rescue NameError => e
175
+ $log.warn( "Unknown option '#{k}' for #{self.class} in #{self.name}: #{e}" )
176
+ end
177
+ }
178
+ else
179
+ throw "TODO"
180
+ end
181
+ self
182
+ end
183
+ end
184
+ end
185
+ end
186
+