autobuild 0.6.4 → 0.6.5

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/Changes.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == Version 0.6.5
2
+
3
+ * add Autobuild.default_packages
4
+ * big rdoc update
5
+
1
6
  == Version 0.6.4
2
7
 
3
8
  This is a bugfix release
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ Hoe.new('autobuild', Autobuild::VERSION) do |p|
8
8
  p.summary = 'Rake-based utility to build and install multiple packages with dependencies'
9
9
  p.description = p.paragraphs_of('README.txt', 3..5).join("\n\n")
10
10
  p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
11
- p.changes = p.paragraphs_of('Changes.txt', 0..2).join("\n\n")
11
+ p.changes = p.paragraphs_of('Changes.txt', 0..1).join("\n\n")
12
12
 
13
13
  p.extra_deps << ['rake', '>= 0.7.0']
14
14
  p.extra_deps << 'rmail'
data/bin/autobuild CHANGED
@@ -9,6 +9,7 @@ DEFAULT_HTTP_PORT = 2000
9
9
 
10
10
  # Load the command line options
11
11
  conffile, *packages = Autobuild.commandline(ARGV)
12
+ Autobuild.packages = packages
12
13
 
13
14
  # make conffile an absolute path since daemonize mode makes
14
15
  # / the current directory
@@ -30,6 +31,9 @@ begin
30
31
  targets = ['import']
31
32
  targets += ['prepare', 'build'] if Autobuild.do_build
32
33
  targets.each do |phase|
34
+ packages = Autobuild.packages
35
+ packages = Autobuild.default_packages if packages.empty?
36
+
33
37
  if packages.empty?
34
38
  Rake::Task[phase].invoke
35
39
  else
data/lib/autobuild.rb CHANGED
@@ -3,6 +3,6 @@ require 'autobuild/reporting'
3
3
  require 'autobuild/package'
4
4
 
5
5
  module Autobuild
6
- VERSION = "0.6.4" unless defined? Autobuild::VERSION
6
+ VERSION = "0.6.5" unless defined? Autobuild::VERSION
7
7
  end
8
8
 
@@ -2,25 +2,44 @@ require 'optparse'
2
2
  require 'rake'
3
3
  require 'singleton'
4
4
 
5
+ # Evaluates +script+ in autobuild context
5
6
  def Autobuild(&script)
6
7
  Autobuild.send(:module_eval, &script)
7
8
  end
8
9
 
10
+ # Main Autobuild module. This module includes the build configuration options
11
+ # (see Autobuild::DEFAULT_OPTIONS) for the default values)
12
+ # nice:: the nice value at which we should spawn subprocesses
13
+ # srcdir:: the base source directory. If a package defines a relative srcdir, then
14
+ # it is defined relatively to Autobuild.srcdir
15
+ # prefix:: the base install directory. If a package defines a relative prefix, then
16
+ # it is defined relatively to Autobuild.prefix.
17
+ # verbose:: if true, displays all subprocesses output
18
+ # debug:: more verbose than 'verbose': displays Rake's debugging output
19
+ # do_update:: if we should update the packages
20
+ # do_build:: if we should build the packages
21
+ # daemonize:: if the build should go into daemon mode
22
+ # clean_log:: remove all logs before starting the build
23
+ # packages:: a list of packages to build specifically
24
+ # default_packages:: the list of packages to build if Autobuild.packages is empty.
25
+ # It this array is empty too, build all defined packages.
9
26
  module Autobuild
10
27
  class << self
11
28
  %w{ nice srcdir prefix
12
29
  verbose debug do_update do_build
13
- daemonize clean_log }.each do |name|
30
+ daemonize clean_log packages default_packages }.each do |name|
14
31
  attr_accessor name
15
32
  end
16
33
 
34
+ # Configure the programs used by different packages
17
35
  attr_reader :programs
36
+ # The directory in which logs are saved. Defaults to PREFIX/log.
18
37
  attr_writer :logdir
19
38
  end
20
39
  DEFAULT_OPTIONS = { :nice => 0,
21
40
  :srcdir => nil, :prefix => nil, :logdir => nil,
22
41
  :verbose => false, :debug => false, :do_build => true, :do_update => true,
23
- :daemonize => false }
42
+ :daemonize => false, :packages => [], :default_packages => [] }
24
43
 
25
44
  @programs = Hash.new
26
45
  DEFAULT_OPTIONS.each do |name, value|
@@ -29,29 +48,42 @@ module Autobuild
29
48
 
30
49
  @mail = Hash.new
31
50
  class << self
51
+ # Mailing configuration. It is a hash with the following keys (as symbols)
52
+ # [:to] the mail destination. Defaults to USER@HOSTNAME, where USER is the username
53
+ # of autobuild's caller, and HOSTNAME the hostname of the current machine.
54
+ # [:from] the mail origin. Defaults to the same value than +:to+
55
+ # [:smtp] the hostname of the SMTP server, defaults to localhost
56
+ # [:port] the port of the SMTP server, defauts to 22
57
+ # [:only_errors] mail only on errors. Defaults to false.
32
58
  attr_reader :mail
59
+
60
+ # The directory in which logs are saved
33
61
  def logdir; @logdir || "#{prefix}/log" end
34
62
 
63
+ # Removes all log files
35
64
  def clean_log!
36
65
  Reporting.each_log do |file|
37
66
  FileUtils.rm_f file
38
67
  end
39
68
  end
40
69
 
41
- # Get a given program, using its name as default value
70
+ # Get a given program, using its name as default value. For
71
+ # instance
72
+ # tool('automake')
73
+ # will return 'automake' unless the autobuild script defined
74
+ # another automake program in Autobuild.programs by doing
75
+ # Autobuild.programs['automake'] = 'automake1.9'
42
76
  def tool(name)
43
77
  programs[name.to_sym] || programs[name.to_s] || name.to_s
44
78
  end
45
79
 
46
- # Gets autobuild options from the command line
47
- # and returns the remaining elements
80
+ # Gets autobuild options from the command line and returns the
81
+ # remaining elements
48
82
  def commandline(args)
49
83
  parser = OptionParser.new do |opts|
50
84
  opts.separator "Path specification"
51
85
  opts.on("--srcdir PATH", "sources are installed in PATH") do |@srcdir| end
52
- opts.on("--prefix PATH", "built packages are installed in PATH") do |@prefix|
53
- logdir = "#{prefix}/autobuild"
54
- end
86
+ opts.on("--prefix PATH", "built packages are installed in PATH") do |@prefix| end
55
87
  opts.on("--logdir PATH", "logs are saved in PATH (default: <prefix>/autobuild)") do |@logdir| end
56
88
 
57
89
  opts.separator ""
@@ -68,7 +100,7 @@ module Autobuild
68
100
  opts.separator ""
69
101
  opts.separator "Program output"
70
102
  opts.on("--[no-]verbose", "display output of commands on stdout") do |@verbose| end
71
- opts.on("--[no-]debug", "verbose information (for debugging purposes)") do |@debug| end
103
+ opts.on("--[no-]debug", "debug information (for debugging purposes)") do |@debug| end
72
104
 
73
105
  opts.separator ""
74
106
  opts.separator "Mail reports"
@@ -4,6 +4,14 @@ require 'autobuild/importer'
4
4
 
5
5
  module Autobuild
6
6
  class CVSImporter < Importer
7
+ # Creates a new importer which gets the module +name+ from the
8
+ # repository in +root+. The following values are allowed in +options+:
9
+ # [:cvsup] options to give to 'cvs up'. Default: -dP.
10
+ # [:cvsco] options to give to 'cvs co'. Default: -P.
11
+ #
12
+ # This importer uses the 'cvs' tool to perform the import. It defaults
13
+ # to 'cvs' and can be configured by doing
14
+ # Autobuild.programs['cvs'] = 'my_cvs_tool'
7
15
  def initialize(root, name, options = {})
8
16
  @root = root
9
17
  @module = name
@@ -16,13 +24,12 @@ module Autobuild
16
24
  super(options)
17
25
  end
18
26
 
19
- def modulename
20
- @module
21
- end
27
+ # Returns the module to get
28
+ def modulename; @module end
22
29
 
23
30
  private
24
31
 
25
- def update(package)
32
+ def update(package) # :nodoc:
26
33
  Dir.chdir(package.srcdir) do
27
34
  if !File.exists?("#{package.srcdir}/CVS/Root")
28
35
  raise ConfigException, "#{package.srcdir} is not a CVS working copy"
@@ -38,7 +45,7 @@ module Autobuild
38
45
  end
39
46
  end
40
47
 
41
- def checkout(package)
48
+ def checkout(package) # :nodoc:
42
49
  head, tail = File.split(package.srcdir)
43
50
  cvsroot = @root
44
51
 
@@ -50,8 +57,10 @@ module Autobuild
50
57
  end
51
58
  end
52
59
 
53
- def self.cvs(repo, name, package_options = {})
54
- CVSImporter.new(repo, name, package_options)
60
+ # Returns the CVS importer which will get the +name+ module in repository
61
+ # +repo+. The allowed values in +options+ are described in CVSImporter.new.
62
+ def self.cvs(repo, name, options = {})
63
+ CVSImporter.new(repo, name, options)
55
64
  end
56
65
  end
57
66
 
@@ -4,17 +4,25 @@ require 'autobuild/importer'
4
4
 
5
5
  module Autobuild
6
6
  class DarcsImporter < Importer
7
+ # Creates a new importer which gets the source from the Darcs repository
8
+ # +source+ # The following values are allowed in +options+:
9
+ # [:get] options to give to 'darcs get'.
10
+ # [:pull] options to give to 'darcs pull'.
11
+ #
12
+ # This importer uses the 'darcs' tool to perform the import. It defaults
13
+ # to 'darcs' and can be configured by doing
14
+ # Autobuild.programs['darcs'] = 'my_darcs_tool'
7
15
  def initialize(source, options = {})
8
16
  @source = source
9
17
  @program = Autobuild.tool('darcs')
10
18
  super(options)
11
19
  @pull = [*options[:pull]]
12
- @get = [*options[:get]]
20
+ @get = [*options[:get]]
13
21
  end
14
22
 
15
23
  private
16
24
 
17
- def update(package)
25
+ def update(package) # :nodoc:
18
26
  if !File.directory?( File.join(package.srcdir, '_darcs') )
19
27
  raise ConfigException, "#{package.srcdir} is not a Darcs repository"
20
28
  end
@@ -23,12 +31,14 @@ module Autobuild
23
31
  'pull', '--all', "--repodir=#{package.srcdir}", '--set-scripts-executable', @source, *@pull)
24
32
  end
25
33
 
26
- def checkout(package)
34
+ def checkout(package) # :nodoc:
27
35
  Subprocess.run(package.name, :import, @program,
28
36
  'get', '--set-scripts-executable', @source, package.srcdir, *@get)
29
37
  end
30
38
  end
31
39
 
40
+ # Returns the Darcs importer which will get the source from the Darcs repository
41
+ # +source+. The allowed values in +options+ are described in DarcsImporter.new.
32
42
  def self.darcs(source, options = {})
33
43
  DarcsImporter.new(source, options)
34
44
  end
@@ -3,6 +3,14 @@ require 'autobuild/importer'
3
3
 
4
4
  module Autobuild
5
5
  class SVN < Importer
6
+ # Creates an importer which gets the source for the Subversion URL +source+.
7
+ # The following options are allowed:
8
+ # [:svnup] options to give to 'svn up'
9
+ # [:svnco] options to give to 'svn co'
10
+ #
11
+ # This importer uses the 'svn' tool to perform the import. It defaults
12
+ # to 'svn' and can be configured by doing
13
+ # Autobuild.programs['svn'] = 'my_svn_tool'
6
14
  def initialize(source, options = {})
7
15
  @source = [*source].join("/")
8
16
  @program = Autobuild.tool('svn')
@@ -13,7 +21,7 @@ module Autobuild
13
21
 
14
22
  private
15
23
 
16
- def update(package)
24
+ def update(package) # :nodoc:
17
25
  Dir.chdir(package.srcdir) {
18
26
  old_lang, ENV['LC_ALL'] = ENV['LC_ALL'], 'C'
19
27
  svninfo = IO.popen("svn info") { |io| io.readlines }
@@ -34,12 +42,14 @@ module Autobuild
34
42
  }
35
43
  end
36
44
 
37
- def checkout(package)
45
+ def checkout(package) # :nodoc:
38
46
  options = [ @program, 'co' ] + @options_co + [ @source, package.srcdir ]
39
47
  Subprocess.run(package.name, :import, *options)
40
48
  end
41
49
  end
42
50
 
51
+ # Creates a subversion importer which import the source for the Subversion
52
+ # URL +source+. The allowed values in +options+ are described in SVN.new.
43
53
  def self.svn(source, options = {})
44
54
  SVN.new(source, options)
45
55
  end
@@ -2,8 +2,11 @@ require 'open-uri'
2
2
 
3
3
  module Autobuild
4
4
  class TarImporter < Importer
5
+ # The tarball is not compressed
5
6
  Plain = 0
7
+ # The tarball is compressed with gzip
6
8
  Gzip = 1
9
+ # The tarball is compressed using bzip
7
10
  Bzip = 2
8
11
 
9
12
  TAR_OPTION = {
@@ -12,22 +15,25 @@ module Autobuild
12
15
  Bzip => 'j'
13
16
  }
14
17
 
18
+ # Known URI schemes for +url+
15
19
  VALID_URI_SCHEMES = [ 'file', 'http', 'ftp' ]
16
20
 
21
+ # Returns the unpack mode from the file name
17
22
  def self.url_to_mode(url)
18
23
  ext = File.extname(url)
24
+ unless ext == '.tar'
25
+ raise "Invalid file type in #{url}" unless File.basename(url, ext) != '.tar'
26
+ end
19
27
  mode = case ext
20
28
  when '.tar'; Plain
21
29
  when '.gz'; Gzip
22
30
  when '.bz2'; Bzip
23
31
  end
24
32
 
25
- unless ext == '.tar'
26
- raise "Invalid file type in #{url}" unless File.basename(url, ext) != '.tar'
27
- end
28
33
  mode
29
34
  end
30
35
 
36
+ # Updates the downloaded file in cache only if it is needed
31
37
  def update_cache
32
38
  do_update = true
33
39
 
@@ -67,6 +73,7 @@ module Autobuild
67
73
  end
68
74
  end
69
75
 
76
+ # Sets the source URL and update +cachefile+ and +mode+ attributes accordingly.
70
77
  def url=(url)
71
78
  @url = URI.parse(url)
72
79
  raise ConfigException, "invalid URL #{url}" unless VALID_URI_SCHEMES.include?(@url.scheme)
@@ -79,22 +86,31 @@ module Autobuild
79
86
  end
80
87
  end
81
88
 
82
- attr_reader :url, :cachefile, :mode
89
+ # The source URL
90
+ attr_reader :url
91
+ # The local file (either a downloaded file if +url+ is not local, or +url+ itself)
92
+ attr_reader :cachefile
93
+ # The unpack mode. One of Bzip, Gzip or Plain
94
+ attr_reader :mode
95
+ # The directory in which remote files are cached
83
96
  def cachedir; @options[:cachedir] end
84
97
 
98
+ # Creates a new importer which downloads +url+ in +cachedir+ and unpacks it. The following options
99
+ # are allowed:
100
+ # [:cachedir] the cache directory. Defaults to "#{Autobuild.prefix}/cache"
85
101
  def initialize(url, options)
86
102
  @options = options.dup
87
- @options[:cachedir] ||= $CACHEDIR
103
+ @options[:cachedir] ||= "#{Autobuild.prefix}/cache"
88
104
  self.url = url
89
105
  end
90
106
 
91
- def update(package)
107
+ def update(package) # :nodoc:
92
108
  checkout if update_cache
93
109
  rescue OpenURI::HTTPError
94
110
  raise Autobuild::Exception.new(package.name, :import)
95
111
  end
96
112
 
97
- def checkout(package)
113
+ def checkout(package) # :nodoc:
98
114
  update_cache
99
115
 
100
116
  base_dir = File.dirname(package.srcdir)
@@ -111,10 +127,10 @@ module Autobuild
111
127
  end
112
128
  end
113
129
 
114
- module Import
115
- def self.tar(source, package_options)
116
- TarImporter.new(source, package_options)
117
- end
130
+ # Creates an importer which downloads a tarball from +source+ and unpacks
131
+ # it. The allowed values in +options+ are described in TarImporter.new.
132
+ def self.tar(source, options)
133
+ TarImporter.new(source, options)
118
134
  end
119
135
  end
120
136
 
@@ -1,11 +1,17 @@
1
1
  require 'autobuild/config'
2
2
  require 'autobuild/exceptions'
3
3
 
4
+ # This class is the base class for objects that are used to get the source from
5
+ # various RCS into the package source directory. A list of patches to apply
6
+ # after the import can be given in the +:patches+ option.
4
7
  class Autobuild::Importer
5
- def initialize(options)
6
- @options = options
7
- end
8
+ # Creates a new Importer object. The options known to Importer are:
9
+ # [:patches] a list of patch to apply after import
10
+ #
11
+ # More options are specific to each importer type.
12
+ def initialize(options); @options = options end
8
13
 
14
+ # Performs the import of +package+
9
15
  def import(package)
10
16
  srcdir = package.srcdir
11
17
  if File.directory?(srcdir)
@@ -32,8 +38,8 @@ class Autobuild::Importer
32
38
 
33
39
  private
34
40
 
35
- # We assume that package.srcdir already exists (checkout
36
- # is supposed to have been called)
41
+ # We assume that package.srcdir already exists (checkout is supposed to
42
+ # have been called)
37
43
  def patchlist(package)
38
44
  "#{package.srcdir}/patches-autobuild-stamp"
39
45
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: autobuild
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.6.4
7
- date: 2007-02-12 00:00:00 +01:00
6
+ version: 0.6.5
7
+ date: 2007-02-14 00:00:00 +01:00
8
8
  summary: Rake-based utility to build and install multiple packages with dependencies
9
9
  require_paths:
10
10
  - lib