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.
- data.tar.gz.sig +3 -0
- data/History.txt +7 -0
- data/Manifest.txt +51 -0
- data/PostInstall.txt +3 -0
- data/README.rdoc +55 -0
- data/Rakefile +30 -0
- data/TODO +2 -0
- data/bin/kde-build.rb +21 -0
- data/config/website.yml +2 -0
- data/config/website.yml.sample +2 -0
- data/lib/kde-build.rb +18 -0
- data/lib/kde-build/application.rb +258 -0
- data/lib/kde-build/build_system.rb +26 -0
- data/lib/kde-build/build_system/autoconf.rb +109 -0
- data/lib/kde-build/build_system/base.rb +132 -0
- data/lib/kde-build/build_system/cmake.rb +82 -0
- data/lib/kde-build/build_system/qtcopy.rb +125 -0
- data/lib/kde-build/command.rb +30 -0
- data/lib/kde-build/command/build.rb +119 -0
- data/lib/kde-build/command/fetch.rb +28 -0
- data/lib/kde-build/command/help.rb +71 -0
- data/lib/kde-build/command/info.rb +42 -0
- data/lib/kde-build/command/version.rb +43 -0
- data/lib/kde-build/configuration.rb +186 -0
- data/lib/kde-build/exception.rb +6 -0
- data/lib/kde-build/metaaid.rb +18 -0
- data/lib/kde-build/module.rb +203 -0
- data/lib/kde-build/module_configuration.rb +107 -0
- data/lib/kde-build/moduleregistry.rb +85 -0
- data/lib/kde-build/subprocess.rb +82 -0
- data/lib/kde-build/tools/ctags.rb +34 -0
- data/lib/kde-build/tools/logging.rb +49 -0
- data/lib/kde-build/tools/make.rb +58 -0
- data/lib/kde-build/tools/ssh.rb +47 -0
- data/lib/kde-build/vcs.rb +26 -0
- data/lib/kde-build/vcs/base.rb +81 -0
- data/lib/kde-build/vcs/git-svn.rb +133 -0
- data/lib/kde-build/vcs/git.rb +96 -0
- data/lib/kde-build/vcs/svn.rb +105 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +71 -0
- data/test.yaml.tmpl +552 -0
- data/test/test_helper.rb +12 -0
- data/test/test_kde-build.rb +11 -0
- data/test/test_vcs_svn.rb +44 -0
- data/website/index.html +84 -0
- data/website/index.txt +59 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +159 -0
- data/website/template.html.erb +50 -0
- metadata +171 -0
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
data/History.txt
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
== 0.0.1 2009-06-04
|
2
|
+
|
3
|
+
* 1 major enhancement:
|
4
|
+
* Initial release (test)
|
5
|
+
* The only currently supported command is build. It's possible to compile a
|
6
|
+
complete kde session using it with nearly no manual intervention. If your
|
7
|
+
system has the deveopment requirements met for kde.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
PostInstall.txt
|
4
|
+
README.rdoc
|
5
|
+
Rakefile
|
6
|
+
TODO
|
7
|
+
bin/kde-build.rb
|
8
|
+
config/website.yml
|
9
|
+
config/website.yml.sample
|
10
|
+
lib/kde-build.rb
|
11
|
+
lib/kde-build/application.rb
|
12
|
+
lib/kde-build/build_system.rb
|
13
|
+
lib/kde-build/build_system/autoconf.rb
|
14
|
+
lib/kde-build/build_system/base.rb
|
15
|
+
lib/kde-build/build_system/cmake.rb
|
16
|
+
lib/kde-build/build_system/qtcopy.rb
|
17
|
+
lib/kde-build/command.rb
|
18
|
+
lib/kde-build/command/build.rb
|
19
|
+
lib/kde-build/command/fetch.rb
|
20
|
+
lib/kde-build/command/help.rb
|
21
|
+
lib/kde-build/command/info.rb
|
22
|
+
lib/kde-build/command/version.rb
|
23
|
+
lib/kde-build/configuration.rb
|
24
|
+
lib/kde-build/exception.rb
|
25
|
+
lib/kde-build/metaaid.rb
|
26
|
+
lib/kde-build/module.rb
|
27
|
+
lib/kde-build/module_configuration.rb
|
28
|
+
lib/kde-build/moduleregistry.rb
|
29
|
+
lib/kde-build/subprocess.rb
|
30
|
+
lib/kde-build/tools/ctags.rb
|
31
|
+
lib/kde-build/tools/logging.rb
|
32
|
+
lib/kde-build/tools/make.rb
|
33
|
+
lib/kde-build/tools/ssh.rb
|
34
|
+
lib/kde-build/vcs.rb
|
35
|
+
lib/kde-build/vcs/base.rb
|
36
|
+
lib/kde-build/vcs/git-svn.rb
|
37
|
+
lib/kde-build/vcs/git.rb
|
38
|
+
lib/kde-build/vcs/svn.rb
|
39
|
+
script/console
|
40
|
+
script/destroy
|
41
|
+
script/generate
|
42
|
+
script/txt2html
|
43
|
+
test.yaml.tmpl
|
44
|
+
test/test_helper.rb
|
45
|
+
test/test_kde-build.rb
|
46
|
+
test/test_vcs_svn.rb
|
47
|
+
website/index.html
|
48
|
+
website/index.txt
|
49
|
+
website/javascripts/rounded_corners_lite.inc.js
|
50
|
+
website/stylesheets/screen.css
|
51
|
+
website/template.html.erb
|
data/PostInstall.txt
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
= kde-build
|
2
|
+
|
3
|
+
* http://build-tool.rubyforge.org/git?p=build-tool.git;a=tree
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
A ruby based alternative to kdesvn-build.
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* *WARNING* Very young and immature program
|
12
|
+
|
13
|
+
== SYNOPSIS:
|
14
|
+
|
15
|
+
kde-build build :qt kdesupport/ :default
|
16
|
+
|
17
|
+
This will build
|
18
|
+
1. The package _qt_ as configured in the config file.
|
19
|
+
2. All modules named _kdesupport_/... in the order specified in the config file.
|
20
|
+
3. The package _default_ as configured in the config file.
|
21
|
+
|
22
|
+
If you haven't changed the default configuration you should end up with a
|
23
|
+
usable kde session.
|
24
|
+
|
25
|
+
== REQUIREMENTS:
|
26
|
+
|
27
|
+
Packages
|
28
|
+
- ruby
|
29
|
+
- rubygems
|
30
|
+
|
31
|
+
Gems
|
32
|
+
- cmdparse
|
33
|
+
- log4r
|
34
|
+
|
35
|
+
== INSTALL:
|
36
|
+
|
37
|
+
Currently not supported
|
38
|
+
|
39
|
+
== LICENSE:
|
40
|
+
|
41
|
+
Copyright (C) 2009 Michael Jansen <kde@michael-jansen.biz>
|
42
|
+
|
43
|
+
This library is free software; you can redistribute it and/or
|
44
|
+
modify it under the terms of the GNU General Public
|
45
|
+
License version 2 or later as published by the Free Software Foundation.
|
46
|
+
|
47
|
+
This library is distributed in the hope that it will be useful,
|
48
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
49
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
50
|
+
Library General Public License for more details.
|
51
|
+
|
52
|
+
You should have received a copy of the GNU Library General Public License
|
53
|
+
along with this library; see the file COPYING.LIB. If not, write to
|
54
|
+
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
55
|
+
Boston, MA 02110-1301, USA.
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
2
|
+
%w[rake rake/clean fileutils newgem rubigen].each { |f| require f }
|
3
|
+
require File.dirname(__FILE__) + '/lib/kde-build'
|
4
|
+
|
5
|
+
# Generate all the Rake tasks
|
6
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
7
|
+
$hoe = Hoe.new('build-tool', KdeBuild::VERSION) do |p|
|
8
|
+
p.developer( 'Michael Jansen', 'kde@michael-jansen.biz' )
|
9
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
10
|
+
p.post_install_message = 'PostInstall.txt'
|
11
|
+
p.rubyforge_name = p.name
|
12
|
+
p.extra_deps = [
|
13
|
+
['cmdparse','>= 2.0.2'],
|
14
|
+
['log4r','>= 1.0.5'],
|
15
|
+
]
|
16
|
+
p.extra_dev_deps = [
|
17
|
+
['newgem', ">= #{::Newgem::VERSION}"]
|
18
|
+
]
|
19
|
+
|
20
|
+
p.clean_globs |= %w[**/.DS_Store tmp *.log]
|
21
|
+
path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
|
22
|
+
p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
|
23
|
+
p.rsync_args = '-av --delete --ignore-errors'
|
24
|
+
end
|
25
|
+
|
26
|
+
require 'newgem/tasks' # load /tasks/*.rake
|
27
|
+
Dir['tasks/**/*.rake'].each { |t| load t }
|
28
|
+
|
29
|
+
# TODO - want other tests/tasks run by default? Add them to the list
|
30
|
+
# task :default => [:spec, :features]
|
data/bin/kde-build.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding:utf-8 -*-
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../lib/kde-build'
|
7
|
+
|
8
|
+
require 'kde-build/application'
|
9
|
+
|
10
|
+
app = BuildTool::Application.instance
|
11
|
+
|
12
|
+
# Set the root directory. Its where we find the config template
|
13
|
+
app.root_directory= Pathname.new( File.dirname(__FILE__) ).join( '..' ).cleanpath
|
14
|
+
|
15
|
+
# Read the configuration file. The configuration file to load depends on the
|
16
|
+
# scriptname used to invoke us. This makes it possible to have more than one
|
17
|
+
# configuration using symlinks
|
18
|
+
if app.read_configuration( "#{Pathname.new($0).basename}.yaml" )
|
19
|
+
app.main(ARGV)
|
20
|
+
end
|
21
|
+
|
data/config/website.yml
ADDED
data/lib/kde-build.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
module KdeBuild
|
5
|
+
VERSION = '0.0.1'
|
6
|
+
end
|
7
|
+
|
8
|
+
module Kernel
|
9
|
+
# Suppresses warnings within a given block.
|
10
|
+
def with_warnings_suppressed
|
11
|
+
saved_verbosity = $-v
|
12
|
+
$-v = nil
|
13
|
+
yield
|
14
|
+
ensure
|
15
|
+
$-v = saved_verbosity
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,258 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
require 'kde-build/vcs/git-svn'
|
4
|
+
require 'kde-build/command/build'
|
5
|
+
require 'kde-build/command/help'
|
6
|
+
require 'kde-build/command/info'
|
7
|
+
require 'kde-build/command/version'
|
8
|
+
|
9
|
+
require 'kde-build/configuration'
|
10
|
+
|
11
|
+
require 'kde-build/tools/ctags.rb'
|
12
|
+
require 'kde-build/tools/logging.rb'
|
13
|
+
|
14
|
+
require 'kde-build/moduleregistry'
|
15
|
+
require 'kde-build/module_configuration'
|
16
|
+
|
17
|
+
require 'cmdparse'
|
18
|
+
require 'erb'
|
19
|
+
require 'singleton'
|
20
|
+
require 'yaml'
|
21
|
+
require 'fileutils'
|
22
|
+
|
23
|
+
# log4r produces nasty warnings
|
24
|
+
# (eval):1: warning: redefine off?
|
25
|
+
# (eval):2: warning: redefine debug
|
26
|
+
# (eval):2: warning: redefine info
|
27
|
+
with_warnings_suppressed do
|
28
|
+
require 'log4r'
|
29
|
+
include Log4r
|
30
|
+
Log4r.define_levels('DEBUG','CMDOUT', 'CMD', 'INFO', 'WARN', 'ERROR', 'FATAL')
|
31
|
+
$log = Logger.new('default')
|
32
|
+
$log.outputters = StdoutOutputter.new( "log_stdout", :level => INFO )
|
33
|
+
Outputter["log_stdout"].formatter = BuildTool::PlainFormatter.new
|
34
|
+
end
|
35
|
+
|
36
|
+
module BuildTool
|
37
|
+
|
38
|
+
|
39
|
+
class Application
|
40
|
+
|
41
|
+
include Singleton
|
42
|
+
|
43
|
+
include MJ::Configuration::Configurable
|
44
|
+
|
45
|
+
# This is where the script is installed.
|
46
|
+
attr_accessor :root_directory
|
47
|
+
|
48
|
+
option( "workdir", "Working directory" ).
|
49
|
+
required.on_write{
|
50
|
+
|val|
|
51
|
+
File.expand_path( val )
|
52
|
+
}
|
53
|
+
|
54
|
+
def initialize
|
55
|
+
$noop = false
|
56
|
+
$verbose = false
|
57
|
+
with_warnings_suppressed do
|
58
|
+
@outputter = Outputter["log_stdout"]
|
59
|
+
end
|
60
|
+
|
61
|
+
@command = CmdParse::CommandParser.new(
|
62
|
+
false, # handle exceptions
|
63
|
+
true # Allow partial command matching
|
64
|
+
)
|
65
|
+
@command.program_name = "kde4svn-build"
|
66
|
+
@command.program_version = [ 0, 1, 1 ]
|
67
|
+
@command.options = CmdParse::OptionParserWrapper.new do |opt|
|
68
|
+
opt.separator "Global Options"
|
69
|
+
opt.on( "--verbose", "Verbose output" ) { |t|
|
70
|
+
$verbose = true
|
71
|
+
with_warnings_suppressed do
|
72
|
+
@outputter.level = DEBUG
|
73
|
+
end
|
74
|
+
}
|
75
|
+
opt.on( "--dry-run", "Verbose output" ) { |t|
|
76
|
+
$noop = true
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
YAML.add_domain_type(
|
81
|
+
"michael-jansen.biz,2009", "ApplicationConfiguration" ) {
|
82
|
+
|type, val|
|
83
|
+
mc = Application::instance
|
84
|
+
MJ::Configuration::flatten_values val do
|
85
|
+
|k, v|
|
86
|
+
mc.set( k, v )
|
87
|
+
end
|
88
|
+
mc
|
89
|
+
}
|
90
|
+
|
91
|
+
@command.add_command( BuildCommand.new, true )
|
92
|
+
@command.add_command( InfoCommand.new, true )
|
93
|
+
|
94
|
+
@command.add_command( HelpCommand.new )
|
95
|
+
@command.add_command( VersionCommand.new )
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
# Read the configuration file. If we can't find a configuration file
|
100
|
+
# provide a template file
|
101
|
+
def read_configuration( name )
|
102
|
+
|
103
|
+
configdir = Pathname.new("~").expand_path.join('.build_tool')
|
104
|
+
# Make sure out configuration directory exists
|
105
|
+
if !configdir.exist?
|
106
|
+
# Create it
|
107
|
+
FileUtils.mkdir_p( configdir )
|
108
|
+
else
|
109
|
+
# It's there. Make sure it's a directory
|
110
|
+
if !configdir.directory?
|
111
|
+
puts "Failed to create configuration directory #{configdir}. There is a file with this name!"
|
112
|
+
return false
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Check if the configuration file exists
|
117
|
+
configfile = configdir.join( name )
|
118
|
+
if !configfile.exist?
|
119
|
+
# Copy our template file (if we find it)
|
120
|
+
templatefile = root_directory.join( 'test.yaml.tmpl' )
|
121
|
+
if !templatefile.exist?
|
122
|
+
$log.error( "Could not find our template file at #{templatefile}!" )
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
FileUtils.copy( templatefile, configfile )
|
126
|
+
$log.info( "I copied a template configuration file to '#{configfile}'. Please review it and adapt it to your needs." )
|
127
|
+
return false
|
128
|
+
end
|
129
|
+
|
130
|
+
# The config file exists. Go on and read it
|
131
|
+
config_string = File.read(configfile)
|
132
|
+
config = ERB.new( config_string )
|
133
|
+
@configuration = YAML.load( config.result )
|
134
|
+
return true
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
def cli
|
139
|
+
require 'readline'
|
140
|
+
require 'shellwords'
|
141
|
+
|
142
|
+
Readline.completion_proc = method(:completion)
|
143
|
+
Readline.completer_word_break_characters = "\x00"
|
144
|
+
|
145
|
+
begin
|
146
|
+
|
147
|
+
while line = Readline.readline('> ', true)
|
148
|
+
|
149
|
+
return nil if line.nil?
|
150
|
+
|
151
|
+
# Remove duplicate or empty lines from history
|
152
|
+
if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line
|
153
|
+
Readline::HISTORY.pop
|
154
|
+
end
|
155
|
+
|
156
|
+
# Split the line like bash would do it
|
157
|
+
execute Shellwords.shellwords( line )
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
rescue Interrupt => e
|
162
|
+
exit
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
def completion( string )
|
169
|
+
args = Shellwords.shellwords(string)
|
170
|
+
|
171
|
+
# Check if we are able to resolve to a command
|
172
|
+
cmd = @command.main_command.commands[args[0]]
|
173
|
+
|
174
|
+
if cmd
|
175
|
+
# We are still on the first shellword
|
176
|
+
if args.length == 1 and args[0] != cmd.name
|
177
|
+
return [ cmd.name ]
|
178
|
+
else
|
179
|
+
return cmd.complete args[1..-1]
|
180
|
+
end
|
181
|
+
else
|
182
|
+
# No command. Try to give some possible expansions
|
183
|
+
args[0] = "" if args[0] === nil
|
184
|
+
cmds = []
|
185
|
+
@command.main_command.commands.each do |name, cmd|
|
186
|
+
if name.start_with? args[0]
|
187
|
+
cmds.push cmd.name
|
188
|
+
end
|
189
|
+
end
|
190
|
+
cmds
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
|
195
|
+
def execute(args)
|
196
|
+
begin
|
197
|
+
|
198
|
+
@command.parse( args )
|
199
|
+
|
200
|
+
rescue CmdParse::InvalidCommandError => e
|
201
|
+
puts e.message
|
202
|
+
@command.main_command.commands.sort.each do |name, cmd|
|
203
|
+
print name.ljust( 15 ) + cmd.short_desc.to_s
|
204
|
+
print " (=default command)" if name == cmd.default_command
|
205
|
+
print "\n"
|
206
|
+
end
|
207
|
+
|
208
|
+
rescue CmdParse::InvalidOptionError => e
|
209
|
+
puts e.message
|
210
|
+
cmd = @command.main_command.commands[args[0]]
|
211
|
+
cmd.show_help
|
212
|
+
|
213
|
+
rescue Exception => e
|
214
|
+
puts e.message
|
215
|
+
puts e.backtrace if $verbose
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def log_directory
|
220
|
+
@log_directory
|
221
|
+
end
|
222
|
+
|
223
|
+
def initialize_logging
|
224
|
+
# Ensure the base log directory exists
|
225
|
+
if !File.exist? "#{workdir}/log"
|
226
|
+
FileUtils.mkdir_p "#{workdir}/log"
|
227
|
+
end
|
228
|
+
|
229
|
+
i = -1
|
230
|
+
|
231
|
+
begin
|
232
|
+
@log_directory = "#{workdir}/log/#{Date.today.to_s}-%02d" % i+=1
|
233
|
+
end until !File.exist?( @log_directory )
|
234
|
+
|
235
|
+
FileUtils.mkdir_p( @log_directory )
|
236
|
+
|
237
|
+
with_warnings_suppressed do
|
238
|
+
$log.add( FileOutputter.new(
|
239
|
+
"status",
|
240
|
+
:filename => "#{@log_directory}/build-status",
|
241
|
+
:level => INFO ) )
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
def main(args)
|
247
|
+
if args.length > 0
|
248
|
+
initialize_logging
|
249
|
+
execute(args)
|
250
|
+
else
|
251
|
+
cli
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|