autobuild 1.0.1 → 1.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/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
|