autobuild 1.0.1 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Changes.txt +12 -0
- data/Manifest.txt +3 -0
- data/README.txt +28 -4
- data/Rakefile +3 -3
- data/bin/autobuild +5 -1
- data/lib/autobuild.rb +1 -1
- data/lib/autobuild/config.rb +29 -5
- data/lib/autobuild/configurable.rb +101 -0
- data/lib/autobuild/environment.rb +6 -1
- data/lib/autobuild/import/cvs.rb +9 -2
- data/lib/autobuild/import/git.rb +57 -0
- data/lib/autobuild/package.rb +5 -1
- data/lib/autobuild/packages/autotools.rb +4 -3
- data/lib/autobuild/packages/cmake.rb +89 -0
- data/lib/autobuild/packages/import.rb +12 -2
- data/lib/autobuild/reporting.rb +4 -1
- data/lib/autobuild/subcommand.rb +3 -0
- data/lib/autobuild/timestamps.rb +10 -4
- metadata +84 -74
data/Changes.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== Version 1.1
|
2
|
+
* Make the CVS importer discard differences on method and username between the
|
3
|
+
current root and the configured root
|
4
|
+
* Allow to specify exclusions in the importer package, which are used to
|
5
|
+
ignore some changes in the source tree. Useful if some packages are built
|
6
|
+
inside the imported source tree
|
7
|
+
* added the git importer
|
8
|
+
* added the cmake package
|
9
|
+
* set the current repository as default global prefix and srcdir
|
10
|
+
* misc fixes w.r.t. handling dependencies
|
11
|
+
* added Autobuild.post_success_message
|
12
|
+
|
1
13
|
== Version 1.0.1
|
2
14
|
* The "test suites are there for something" release
|
3
15
|
* Fixes bugs introduced in the last version
|
data/Manifest.txt
CHANGED
@@ -6,15 +6,18 @@ TODO
|
|
6
6
|
bin/autobuild
|
7
7
|
lib/autobuild.rb
|
8
8
|
lib/autobuild/config.rb
|
9
|
+
lib/autobuild/configurable.rb
|
9
10
|
lib/autobuild/environment.rb
|
10
11
|
lib/autobuild/exceptions.rb
|
11
12
|
lib/autobuild/import/cvs.rb
|
12
13
|
lib/autobuild/import/darcs.rb
|
14
|
+
lib/autobuild/import/git.rb
|
13
15
|
lib/autobuild/import/svn.rb
|
14
16
|
lib/autobuild/import/tar.rb
|
15
17
|
lib/autobuild/importer.rb
|
16
18
|
lib/autobuild/package.rb
|
17
19
|
lib/autobuild/packages/autotools.rb
|
20
|
+
lib/autobuild/packages/cmake.rb
|
18
21
|
lib/autobuild/packages/genom.rb
|
19
22
|
lib/autobuild/packages/import.rb
|
20
23
|
lib/autobuild/packages/pkgconfig.rb
|
data/README.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
Copyright (c) 2006-
|
2
|
-
|
3
|
-
http://
|
1
|
+
Copyright (c) 2006-2008 Sylvain Joyeux <sylvain.joyeux@m4x.org>
|
2
|
+
|
3
|
+
* http://www.rubyforge.org/projects/autobuild
|
4
|
+
* http://autobuild.rubyforge.org/autobuild
|
4
5
|
|
5
6
|
This work is licensed under the GPLv2 license. See License.txt for details
|
6
7
|
|
@@ -97,6 +98,22 @@ The only program used during the build and install phases is +make+. Its path ca
|
|
97
98
|
in the Autobuild.programs hash
|
98
99
|
Autobuild.programs['make'] = 'gnumake'
|
99
100
|
|
101
|
+
=== CMake
|
102
|
+
|
103
|
+
A cmake package is defined with
|
104
|
+
|
105
|
+
require 'autobuild/packages/cmake'
|
106
|
+
Autobuild.cmake :package_name do |pkg|
|
107
|
+
<package configuration> ...
|
108
|
+
end
|
109
|
+
|
110
|
+
The only configuration attribute available for CMake package is:
|
111
|
+
+builddir+
|
112
|
+
the directory in which to configure and build the package. It is relative to
|
113
|
+
the package sources. A global value can be defined through Autobuild::CMake.builddir
|
114
|
+
|
115
|
+
Additionally, the #define(name, value) method allows to define configuration variables.
|
116
|
+
|
100
117
|
== Available importers
|
101
118
|
You must set an importer object for each package. The package importer is the +importer+ attribute
|
102
119
|
and is set via <tt>package.importer = my_importer</tt>. An importer +foo+ is defined by the class
|
@@ -151,8 +168,15 @@ Where +options+ is a hash. See also Autobuild::DarcsImporter and Autobuild.darcs
|
|
151
168
|
* by default, no options are given to pull. You can add some by giving a +pull+ option
|
152
169
|
darcs url, :pull => ['--my', '--darcs', '--options']
|
153
170
|
|
171
|
+
=== Git
|
172
|
+
package.importer = git(url[, branch])
|
173
|
+
|
174
|
+
Imports the given branch (or master if none is given) of the repository at the
|
175
|
+
given URL. The branch is imported as the 'autobuild' remote and fetched into
|
176
|
+
the master local branch.
|
177
|
+
|
154
178
|
= Copyright and license
|
155
179
|
Author:: Sylvain Joyeux <sylvain.joyeux@m4x.org>
|
156
|
-
Copyright:: Copyright (c) 2005-
|
180
|
+
Copyright:: Copyright (c) 2005-2008 Sylvain Joyeux
|
157
181
|
License:: GPL
|
158
182
|
|
data/Rakefile
CHANGED
@@ -6,9 +6,9 @@ Hoe.new('autobuild', Autobuild::VERSION) do |p|
|
|
6
6
|
p.email = "sylvain.joyeux@m4x.org"
|
7
7
|
|
8
8
|
p.summary = 'Rake-based utility to build and install multiple packages with dependencies'
|
9
|
-
p.description = p.paragraphs_of('README.txt',
|
10
|
-
p.url = p.paragraphs_of('README.txt',
|
11
|
-
p.changes = p.paragraphs_of('Changes.txt', 0
|
9
|
+
p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
|
10
|
+
p.url = p.paragraphs_of('README.txt', 1).first.split(/\n/)[1..-1]
|
11
|
+
p.changes = p.paragraphs_of('Changes.txt', 0).join("\n\n")
|
12
12
|
|
13
13
|
p.extra_deps << ['rake', '>= 0.7.0']
|
14
14
|
p.extra_deps << 'rmail'
|
data/bin/autobuild
CHANGED
data/lib/autobuild.rb
CHANGED
data/lib/autobuild/config.rb
CHANGED
@@ -11,14 +11,14 @@ end
|
|
11
11
|
# (see Autobuild::DEFAULT_OPTIONS) for the default values)
|
12
12
|
# nice:: the nice value at which we should spawn subprocesses
|
13
13
|
# srcdir:: the base source directory. If a package defines a relative srcdir, then
|
14
|
-
# it is defined relatively to Autobuild.srcdir
|
14
|
+
# it is defined relatively to Autobuild.srcdir. Defaults to the current directory.
|
15
15
|
# prefix:: the base install directory. If a package defines a relative prefix, then
|
16
16
|
# it is defined relatively to Autobuild.prefix.
|
17
17
|
# verbose:: if true, displays all subprocesses output
|
18
18
|
# debug:: more verbose than 'verbose': displays Rake's debugging output
|
19
19
|
# do_update:: if we should update the packages
|
20
20
|
# do_build:: if we should build the packages
|
21
|
-
# daemonize:: if the build should go into daemon mode
|
21
|
+
# daemonize:: if the build should go into daemon mode (only if the daemons gem is available)
|
22
22
|
# clean_log:: remove all logs before starting the build
|
23
23
|
# packages:: a list of packages to build specifically
|
24
24
|
# default_packages:: the list of packages to build if Autobuild.packages is empty.
|
@@ -37,7 +37,7 @@ module Autobuild
|
|
37
37
|
attr_writer :logdir
|
38
38
|
end
|
39
39
|
DEFAULT_OPTIONS = { :nice => 0,
|
40
|
-
:srcdir =>
|
40
|
+
:srcdir => Dir.pwd, :prefix => Dir.pwd, :logdir => nil,
|
41
41
|
:verbose => false, :debug => false, :do_build => true, :do_update => true,
|
42
42
|
:daemonize => false, :packages => [], :default_packages => [] }
|
43
43
|
|
@@ -57,7 +57,7 @@ module Autobuild
|
|
57
57
|
end
|
58
58
|
attr_reader :post_install_handler
|
59
59
|
|
60
|
-
def self.apply_post_install(info)
|
60
|
+
def self.apply_post_install(name, info)
|
61
61
|
return unless info
|
62
62
|
|
63
63
|
case info
|
@@ -81,6 +81,28 @@ module Autobuild
|
|
81
81
|
# [:port] the port of the SMTP server, defauts to 22
|
82
82
|
# [:only_errors] mail only on errors. Defaults to false.
|
83
83
|
attr_reader :mail
|
84
|
+
|
85
|
+
# call-seq:
|
86
|
+
# post_success_message => string
|
87
|
+
# post_success_message "msg" => "msg"
|
88
|
+
# post_success_message { } => block
|
89
|
+
#
|
90
|
+
# Gets or updates a message to be displayed on success. Can either be
|
91
|
+
# a string or a block, in which case the block must return the message
|
92
|
+
# string.
|
93
|
+
def post_success_message(*args, &block)
|
94
|
+
if args.empty? && !block
|
95
|
+
if @post_success_message.respond_to?(:to_str)
|
96
|
+
@post_success_message.to_str
|
97
|
+
elsif @post_success_message
|
98
|
+
@post_success_message.call
|
99
|
+
end
|
100
|
+
elsif block
|
101
|
+
@post_success_message = block
|
102
|
+
else
|
103
|
+
@post_success_message = args.first.to_str
|
104
|
+
end
|
105
|
+
end
|
84
106
|
|
85
107
|
# The directory in which logs are saved
|
86
108
|
def logdir; @logdir || "#{prefix}/log" end
|
@@ -118,7 +140,9 @@ module Autobuild
|
|
118
140
|
puts opts
|
119
141
|
exit
|
120
142
|
end
|
121
|
-
|
143
|
+
if defined? Daemons
|
144
|
+
opts.on("--[no-]daemon", "go into daemon mode") do |@daemonize| end
|
145
|
+
end
|
122
146
|
opts.on("--[no-]update", "update already checked-out sources") do |@do_update| end
|
123
147
|
opts.on("--[no-]build", "only prepare packages, do not build them") do |@do_build| end
|
124
148
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'autobuild/timestamps'
|
3
|
+
require 'autobuild/environment'
|
4
|
+
require 'autobuild/package'
|
5
|
+
require 'autobuild/subcommand'
|
6
|
+
require 'shellwords'
|
7
|
+
|
8
|
+
module Autobuild
|
9
|
+
# Base class for packages that require a configuration + build step.
|
10
|
+
#
|
11
|
+
# Child classes must provide a #configurestamp file which represents the
|
12
|
+
# last configuration step done. This file is updated by a call to
|
13
|
+
# #configure (see below)
|
14
|
+
#
|
15
|
+
# Three new methods are added, which can be reimplemented in child classes:
|
16
|
+
# * +configure+ does configure the package. It is ran after all
|
17
|
+
# depended-upon packages are installed.
|
18
|
+
# * +build+ is ran after +configure+ if the configure stamp and/or the
|
19
|
+
# source files have been updated. The #buildstamp stampfile represents when
|
20
|
+
# the last build has been done. The build must be done in the #builddir directory.
|
21
|
+
# * +install+ is ran after +build+.
|
22
|
+
#
|
23
|
+
class Configurable < Package
|
24
|
+
class << self
|
25
|
+
attr_reader :builddir
|
26
|
+
def builddir=(new)
|
27
|
+
raise ConfigException, "absolute builddirs are not supported" if (Pathname.new(new).absolute?)
|
28
|
+
raise ConfigException, "builddir must be non-nil and non-empty" if (new.nil? || new.empty?)
|
29
|
+
@builddir = new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
@builddir = 'build'
|
33
|
+
|
34
|
+
def builddir=(new)
|
35
|
+
raise ConfigException, "absolute builddirs are not supported" if (Pathname.new(new).absolute?)
|
36
|
+
raise ConfigException, "builddir must be non-empty" if new.empty?
|
37
|
+
@builddir = new
|
38
|
+
end
|
39
|
+
# Returns the absolute builddir
|
40
|
+
def builddir; File.expand_path(@builddir || Configurable.builddir, srcdir) end
|
41
|
+
|
42
|
+
# Build stamp
|
43
|
+
# This returns the name of the file which marks when the package has been
|
44
|
+
# successfully built for the last time. The path is absolute
|
45
|
+
def buildstamp; "#{builddir}/#{STAMPFILE}" end
|
46
|
+
|
47
|
+
def initialize(options)
|
48
|
+
super
|
49
|
+
Autobuild.update_environment(prefix)
|
50
|
+
end
|
51
|
+
|
52
|
+
def depends_on(*packages)
|
53
|
+
super
|
54
|
+
stamps = packages.collect { |p| Package[p.to_s].installstamp }
|
55
|
+
file configurestamp => stamps
|
56
|
+
end
|
57
|
+
|
58
|
+
def ensure_dependencies_installed
|
59
|
+
dependencies.each do |pkg|
|
60
|
+
Rake::Task[Package[pkg].installstamp].invoke
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def prepare
|
65
|
+
file configurestamp do
|
66
|
+
ensure_dependencies_installed
|
67
|
+
configure
|
68
|
+
end
|
69
|
+
|
70
|
+
source_tree srcdir do |pkg|
|
71
|
+
pkg.exclude << Regexp.new("^#{Regexp.quote(builddir)}")
|
72
|
+
end
|
73
|
+
|
74
|
+
file buildstamp => [ srcdir, configurestamp ] do
|
75
|
+
ensure_dependencies_installed
|
76
|
+
build
|
77
|
+
end
|
78
|
+
|
79
|
+
file installstamp => buildstamp do
|
80
|
+
install
|
81
|
+
Autobuild.update_environment(prefix)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Configure the builddir directory before starting make
|
86
|
+
def configure
|
87
|
+
touch_stamp(configurestamp)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Do the build in builddir
|
91
|
+
def build
|
92
|
+
end
|
93
|
+
|
94
|
+
# Install the result in prefix
|
95
|
+
def install
|
96
|
+
touch_stamp(installstamp)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
@@ -5,7 +5,7 @@ module Autobuild
|
|
5
5
|
oldpath = ENV[varname]
|
6
6
|
if oldpath.nil? || oldpath.empty?
|
7
7
|
ENV[varname] = path
|
8
|
-
|
8
|
+
elsif ENV[varname] !~ /(^|:)#{Regexp.quote(path)}($|:)/
|
9
9
|
ENV[varname] = "#{path}:#{oldpath}"
|
10
10
|
end
|
11
11
|
end
|
@@ -16,6 +16,11 @@ module Autobuild
|
|
16
16
|
def self.update_environment(newprefix)
|
17
17
|
pathvar("#{newprefix}/bin", 'PATH')
|
18
18
|
pathvar("#{newprefix}/lib/pkgconfig", 'PKG_CONFIG_PATH')
|
19
|
+
pathvar("#{newprefix}/lib/ruby/1.8", 'RUBYLIB')
|
20
|
+
|
21
|
+
require 'rbconfig'
|
22
|
+
ruby_arch = File.basename(Config::CONFIG['archdir'])
|
23
|
+
pathvar("#{newprefix}/lib/ruby/1.8/#{ruby_arch}", 'RUBYLIB')
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
data/lib/autobuild/import/cvs.rb
CHANGED
@@ -43,8 +43,15 @@ module Autobuild
|
|
43
43
|
root = File.open("#{package.srcdir}/CVS/Root") { |io| io.read }.chomp
|
44
44
|
mod = File.open("#{package.srcdir}/CVS/Repository") { |io| io.read }.chomp
|
45
45
|
|
46
|
-
|
47
|
-
|
46
|
+
# Remove any :ext: in front of the root
|
47
|
+
root = root.gsub /^:ext:/, ''
|
48
|
+
expected_root = @root.gsub /^:ext:/, ''
|
49
|
+
# Remove the optional ':' between the host and the path
|
50
|
+
root = root.gsub /:/, ''
|
51
|
+
expected_root = expected_root.gsub /:/, ''
|
52
|
+
|
53
|
+
if root != expected_root || mod != @module
|
54
|
+
raise ConfigException, "checkout in #{package.srcdir} is from #{root}:#{mod}, was expecting #{expected_root}:#{@module}"
|
48
55
|
end
|
49
56
|
Subprocess.run(package.name, :import, @program, 'up', *@options_up)
|
50
57
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'autobuild/subcommand'
|
3
|
+
require 'autobuild/importer'
|
4
|
+
|
5
|
+
module Autobuild
|
6
|
+
class Git < Importer
|
7
|
+
# Creates an importer which tracks the given repository
|
8
|
+
# and branch. +source+ is [repository, branch]
|
9
|
+
#
|
10
|
+
# This importer uses the 'git' tool to perform the
|
11
|
+
# import. It defaults to 'svn' and can be configured by
|
12
|
+
# doing
|
13
|
+
# Autobuild.programs['git'] = 'my_git_tool'
|
14
|
+
def initialize(repository, branch = nil, options = {})
|
15
|
+
@repository = repository.to_str
|
16
|
+
@branch = branch || 'master'
|
17
|
+
super(options)
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_accessor :repository
|
21
|
+
attr_accessor :branch
|
22
|
+
|
23
|
+
def update(package)
|
24
|
+
Dir.chdir(package.srcdir) do
|
25
|
+
if !File.directory?('.git')
|
26
|
+
raise "#{package.srcdir} is not a git repository"
|
27
|
+
end
|
28
|
+
|
29
|
+
Subprocess.run(package.name, :import, Autobuild.tool('git'), 'fetch', repository, "#{branch}:master")
|
30
|
+
Subprocess.run(package.name, :import, Autobuild.tool('git'), 'checkout', 'master')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def checkout(package)
|
35
|
+
base_dir = File.expand_path('..', package.srcdir)
|
36
|
+
if !File.directory?(base_dir)
|
37
|
+
FileUtils.mkdir_p base_dir
|
38
|
+
end
|
39
|
+
|
40
|
+
Subprocess.run(package.name, :import,
|
41
|
+
Autobuild.tool('git'), 'clone', '-o', 'autobuild',
|
42
|
+
repository, package.srcdir)
|
43
|
+
|
44
|
+
Dir.chdir(package.srcdir) do
|
45
|
+
Subprocess.run(package.name, :import, Autobuild.tool('git'),
|
46
|
+
'reset', '--hard', "autobuild/#{branch}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Creates a git importer which gets the source for the given repository and branch
|
52
|
+
# URL +source+. The allowed values in +options+ are described in SVN.new.
|
53
|
+
def self.git(repository, branch, options = {})
|
54
|
+
Git.new(repository, branch, options)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
data/lib/autobuild/package.rb
CHANGED
@@ -67,7 +67,7 @@ module Autobuild
|
|
67
67
|
# Declare the installation stampfile
|
68
68
|
file installstamp do
|
69
69
|
Dir.chdir(srcdir) do
|
70
|
-
Autobuild.apply_post_install(@post_install)
|
70
|
+
Autobuild.apply_post_install(name, @post_install)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
task "#{name}-build" => installstamp
|
@@ -126,6 +126,10 @@ module Autobuild
|
|
126
126
|
p = p.to_s
|
127
127
|
@@provides[p] = self
|
128
128
|
task p => name
|
129
|
+
task "#{p}-import" => "#{name}-import"
|
130
|
+
task "#{p}-prepare" => "#{name}-prepare"
|
131
|
+
task "#{p}-build" => "#{name}-build"
|
132
|
+
task "#{p}-install" => "#{name}-install"
|
129
133
|
@provides << p
|
130
134
|
end
|
131
135
|
end
|
@@ -96,8 +96,7 @@ module Autobuild
|
|
96
96
|
def depends_on(*packages)
|
97
97
|
super
|
98
98
|
stamps = packages.collect { |p| Package[p.to_s].installstamp }
|
99
|
-
|
100
|
-
file buildstamp => stamps
|
99
|
+
file "#{builddir}/config.status" => stamps
|
101
100
|
end
|
102
101
|
|
103
102
|
def ensure_dependencies_installed
|
@@ -133,7 +132,9 @@ module Autobuild
|
|
133
132
|
configure
|
134
133
|
end
|
135
134
|
|
136
|
-
source_tree srcdir
|
135
|
+
source_tree srcdir do |pkg|
|
136
|
+
pkg.exclude << Regexp.new("^#{Regexp.quote(builddir)}")
|
137
|
+
end
|
137
138
|
file buildstamp => [ srcdir, "#{builddir}/config.status" ] do
|
138
139
|
ensure_dependencies_installed
|
139
140
|
build
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'autobuild/configurable'
|
2
|
+
|
3
|
+
module Autobuild
|
4
|
+
def self.cmake(options, &block)
|
5
|
+
CMake.new(options, &block)
|
6
|
+
end
|
7
|
+
|
8
|
+
class CMake < Configurable
|
9
|
+
class << self
|
10
|
+
def builddir; @builddir || Configurable.builddir end
|
11
|
+
def builddir=(new)
|
12
|
+
raise ConfigException, "absolute builddirs are not supported" if (Pathname.new(new).absolute?)
|
13
|
+
raise ConfigException, "builddir must be non-nil and non-empty" if (new.nil? || new.empty?)
|
14
|
+
@builddir = new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :defines
|
19
|
+
|
20
|
+
def configurestamp; File.join(builddir, "CMakeCache.txt") end
|
21
|
+
|
22
|
+
def initialize(options)
|
23
|
+
@defines = Hash.new
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def define(name, value)
|
28
|
+
@defines[name] = value
|
29
|
+
end
|
30
|
+
|
31
|
+
def prepare
|
32
|
+
super
|
33
|
+
|
34
|
+
all_defines = defines.dup
|
35
|
+
all_defines['CMAKE_INSTALL_PREFIX'] = prefix
|
36
|
+
|
37
|
+
if File.exists?(configurestamp)
|
38
|
+
cache = File.read(configurestamp)
|
39
|
+
did_change = all_defines.any? do |name, value|
|
40
|
+
cache_line = cache.find do |line|
|
41
|
+
line =~ /^#{name}:/
|
42
|
+
end
|
43
|
+
if !cache_line || (cache_line.split("=")[1].chomp != value)
|
44
|
+
true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
if did_change
|
48
|
+
FileUtils.rm configurestamp
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Configure the builddir directory before starting make
|
54
|
+
def configure
|
55
|
+
if File.exists?(builddir) && !File.directory?(builddir)
|
56
|
+
raise ConfigException, "#{builddir} already exists but is not a directory"
|
57
|
+
end
|
58
|
+
|
59
|
+
FileUtils.mkdir_p builddir if !File.directory?(builddir)
|
60
|
+
Dir.chdir(builddir) do
|
61
|
+
command = [ "cmake", "-DCMAKE_INSTALL_PREFIX=#{prefix}" ]
|
62
|
+
defines.each do |name, value|
|
63
|
+
command << "-D#{name}=#{value}"
|
64
|
+
end
|
65
|
+
command << srcdir
|
66
|
+
|
67
|
+
Subprocess.run(name, 'configure', *command)
|
68
|
+
touch_stamp configurestamp
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Do the build in builddir
|
73
|
+
def build
|
74
|
+
Dir.chdir(builddir) do
|
75
|
+
Subprocess.run(name, 'build', Autobuild.tool(:make))
|
76
|
+
end
|
77
|
+
touch_stamp(buildstamp)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Install the result in prefix
|
81
|
+
def install
|
82
|
+
Dir.chdir(builddir) do
|
83
|
+
Subprocess.run(name, 'install', Autobuild.tool(:make), 'install')
|
84
|
+
end
|
85
|
+
touch_stamp(installstamp)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
@@ -10,9 +10,19 @@ module Autobuild
|
|
10
10
|
def installstamp
|
11
11
|
"#{srcdir}/#{STAMPFILE}"
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
|
+
attr_reader :exclude
|
15
|
+
|
16
|
+
def initialize(*args)
|
17
|
+
@exclude = []
|
14
18
|
super
|
15
|
-
|
19
|
+
exclude << Regexp.new("^#{Regexp.quote(installstamp)}")
|
20
|
+
|
21
|
+
source_tree(srcdir) do |pkg|
|
22
|
+
pkg.exclude.concat exclude
|
23
|
+
exclude.freeze
|
24
|
+
end
|
25
|
+
|
16
26
|
file installstamp => srcdir do
|
17
27
|
touch_stamp installstamp
|
18
28
|
end
|
data/lib/autobuild/reporting.rb
CHANGED
@@ -65,6 +65,9 @@ module Autobuild
|
|
65
65
|
end
|
66
66
|
def success
|
67
67
|
puts "Build finished successfully at #{Time.now}"
|
68
|
+
if Autobuild.post_success_message
|
69
|
+
puts Autobuild.post_success_message
|
70
|
+
end
|
68
71
|
end
|
69
72
|
end
|
70
73
|
|
@@ -98,7 +101,7 @@ module Autobuild
|
|
98
101
|
|
99
102
|
def success
|
100
103
|
unless only_errors
|
101
|
-
send_mail("success")
|
104
|
+
send_mail("success", Autobuild.post_success_message || "")
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
data/lib/autobuild/subcommand.rb
CHANGED
@@ -18,6 +18,9 @@ module Autobuild::Subprocess
|
|
18
18
|
|
19
19
|
FileUtils.mkdir_p Autobuild.logdir unless File.directory?(Autobuild.logdir)
|
20
20
|
logname = "#{Autobuild.logdir}/#{target}-#{phase}.log"
|
21
|
+
if !File.directory?(File.dirname(logname))
|
22
|
+
FileUtils.mkdir_p File.dirname(logname)
|
23
|
+
end
|
21
24
|
|
22
25
|
puts "#{target}: running #{command.join(" ")}\n (output goes to #{logname})"
|
23
26
|
|
data/lib/autobuild/timestamps.rb
CHANGED
@@ -32,19 +32,25 @@ module Autobuild
|
|
32
32
|
end
|
33
33
|
}
|
34
34
|
|
35
|
-
puts " #{latest}" if Autobuild.debug
|
35
|
+
puts " newest file: #{latest_file} at #{latest}" if Autobuild.debug
|
36
36
|
return latest
|
37
37
|
end
|
38
38
|
|
39
39
|
class SourceTreeTask < Rake::Task
|
40
40
|
attr_accessor :exclude
|
41
|
+
def initialize(*args, &block)
|
42
|
+
@exclude = []
|
43
|
+
super
|
44
|
+
end
|
45
|
+
|
41
46
|
def timestamp
|
42
47
|
tree_timestamp(name, %r#(?:^|/)(?:CVS|_darcs|\.svn)$#, *@exclude)
|
43
48
|
end
|
44
49
|
end
|
45
|
-
def source_tree(path,
|
46
|
-
task = SourceTreeTask.define_task(path
|
47
|
-
task
|
50
|
+
def source_tree(path, &block)
|
51
|
+
task = SourceTreeTask.define_task(path)
|
52
|
+
block.call(task)
|
53
|
+
task
|
48
54
|
end
|
49
55
|
|
50
56
|
def get_stamp(stampfile)
|
metadata
CHANGED
@@ -1,33 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: autobuild
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2007-06-22 00:00:00 +02:00
|
8
|
-
summary: Rake-based utility to build and install multiple packages with dependencies
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: sylvain.joyeux@m4x.org
|
12
|
-
homepage: http://www.rubyforge.org/projects/autobuild
|
13
|
-
rubyforge_project: autobuild
|
14
|
-
description: Autobuild config files are Ruby scripts which configure rake to * imports the package from a SCM or (optionnaly) updates it * configures it. This phase can handle code generation, configuration (for instance for autotools-based packages), ... * build * install It takes the dependencies between packages into account in its build process, updates the needed environment variables (+PKG_CONFIG_PATH+, +PATH+, +LD_LIBRARY_PATH+, ...) == WARNING for 0.5 users Old configuration files used with autobuild 0.5 aren't accepted by Autobuild 0.6. Since 0.6, Autobuild uses Ruby for configuration (just like rake does)
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: "1.1"
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Sylvain Joyeux
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-06-26 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.7.0
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: rmail
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: "0"
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: daemons
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: "0"
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: hoe
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.5.3
|
50
|
+
version:
|
51
|
+
description: This work is licensed under the GPLv2 license. See License.txt for details == What's autobuild ? Autobuild imports, configures, builds and installs various kinds of software packages. It can be used in software development to make sure that nothing is broken in the build process of a set of packages, or can be used as an automated installation tool. Autobuild config files are Ruby scripts which configure rake to * imports the package from a SCM or (optionnaly) updates it * configures it. This phase can handle code generation, configuration (for instance for autotools-based packages), ... * build * install It takes the dependencies between packages into account in its build process, updates the needed environment variables (+PKG_CONFIG_PATH+, +PATH+, +LD_LIBRARY_PATH+, ...)
|
52
|
+
email: sylvain.joyeux@m4x.org
|
53
|
+
executables:
|
54
|
+
- autobuild
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files:
|
58
|
+
- Changes.txt
|
59
|
+
- Manifest.txt
|
60
|
+
- README.txt
|
31
61
|
files:
|
32
62
|
- Changes.txt
|
33
63
|
- Manifest.txt
|
@@ -37,15 +67,18 @@ files:
|
|
37
67
|
- bin/autobuild
|
38
68
|
- lib/autobuild.rb
|
39
69
|
- lib/autobuild/config.rb
|
70
|
+
- lib/autobuild/configurable.rb
|
40
71
|
- lib/autobuild/environment.rb
|
41
72
|
- lib/autobuild/exceptions.rb
|
42
73
|
- lib/autobuild/import/cvs.rb
|
43
74
|
- lib/autobuild/import/darcs.rb
|
75
|
+
- lib/autobuild/import/git.rb
|
44
76
|
- lib/autobuild/import/svn.rb
|
45
77
|
- lib/autobuild/import/tar.rb
|
46
78
|
- lib/autobuild/importer.rb
|
47
79
|
- lib/autobuild/package.rb
|
48
80
|
- lib/autobuild/packages/autotools.rb
|
81
|
+
- lib/autobuild/packages/cmake.rb
|
49
82
|
- lib/autobuild/packages/genom.rb
|
50
83
|
- lib/autobuild/packages/import.rb
|
51
84
|
- lib/autobuild/packages/pkgconfig.rb
|
@@ -62,58 +95,35 @@ files:
|
|
62
95
|
- test/test_import_tar.rb
|
63
96
|
- test/test_subcommand.rb
|
64
97
|
- test/tools.rb
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
- test/test_import_svn.rb
|
69
|
-
- test/test_import_cvs.rb
|
98
|
+
has_rdoc: true
|
99
|
+
homepage: "* http://autobuild.rubyforge.org/autobuild"
|
100
|
+
post_install_message:
|
70
101
|
rdoc_options:
|
71
102
|
- --main
|
72
103
|
- README.txt
|
73
|
-
|
74
|
-
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
-
|
79
|
-
|
80
|
-
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: "0"
|
111
|
+
version:
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: "0"
|
117
|
+
version:
|
81
118
|
requirements: []
|
82
119
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: rmail
|
95
|
-
version_requirement:
|
96
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
97
|
-
requirements:
|
98
|
-
- - ">"
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: 0.0.0
|
101
|
-
version:
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: daemons
|
104
|
-
version_requirement:
|
105
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.0.0
|
110
|
-
version:
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: hoe
|
113
|
-
version_requirement:
|
114
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 1.2.1
|
119
|
-
version:
|
120
|
+
rubyforge_project: autobuild
|
121
|
+
rubygems_version: 1.0.1
|
122
|
+
signing_key:
|
123
|
+
specification_version: 2
|
124
|
+
summary: Rake-based utility to build and install multiple packages with dependencies
|
125
|
+
test_files:
|
126
|
+
- test/test_import_tar.rb
|
127
|
+
- test/test_subcommand.rb
|
128
|
+
- test/test_import_svn.rb
|
129
|
+
- test/test_import_cvs.rb
|