autoproj 1.3.4 → 1.4.0
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/History.txt +11 -0
- data/Manifest.txt +6 -2
- data/README.txt +15 -13
- data/Rakefile +1 -1
- data/bin/autoproj +18 -8
- data/doc/guide/ext/init.rb +1 -0
- data/doc/guide/src/autoproj_bootstrap +120 -16
- data/doc/guide/src/customization.page +1 -1
- data/doc/guide/src/default.css +11 -0
- data/doc/guide/src/default.template +1 -1
- data/doc/guide/src/error_messages.page +2 -1
- data/doc/guide/src/htmldoc.metainfo +4 -0
- data/doc/guide/src/index.page +15 -13
- data/doc/guide/src/manifest.xml +14 -0
- data/doc/guide/src/{autobuild.page → package_sets/autobuild.page} +77 -11
- data/doc/guide/src/package_sets/importers.page +164 -0
- data/doc/guide/src/{source_yml.page → package_sets/index.page} +7 -2
- data/doc/guide/src/package_sets/manifest-xml.page +29 -0
- data/doc/guide/src/package_sets/osdeps.page +123 -0
- data/doc/guide/src/structure.page +43 -12
- data/lib/autoproj/autobuild.rb +81 -15
- data/lib/autoproj/default.osdeps +27 -3
- data/lib/autoproj/manifest.rb +27 -2
- data/lib/autoproj/osdeps.rb +49 -6
- data/lib/autoproj/system.rb +47 -2
- data/lib/autoproj/version.rb +1 -1
- metadata +29 -5
data/lib/autoproj/manifest.rb
CHANGED
@@ -17,13 +17,26 @@ end
|
|
17
17
|
|
18
18
|
module Autoproj
|
19
19
|
@build_system_dependencies = Set.new
|
20
|
+
|
21
|
+
# Declare OS packages that are required to import and build the packages
|
22
|
+
#
|
23
|
+
# It is used by autoproj itself to install the importers and/or the build
|
24
|
+
# systems for the packages.
|
20
25
|
def self.add_build_system_dependency(*names)
|
21
26
|
@build_system_dependencies |= names.to_set
|
22
27
|
end
|
23
28
|
class << self
|
29
|
+
# Returns the set of OS packages that are needed to build and/or import
|
30
|
+
# the packages
|
31
|
+
#
|
32
|
+
# See Autoproj.add_build_system_dependency
|
24
33
|
attr_reader :build_system_dependencies
|
25
34
|
end
|
26
35
|
|
36
|
+
# Expand build options in +value+.
|
37
|
+
#
|
38
|
+
# The method will expand in +value+ patterns of the form $NAME, replacing
|
39
|
+
# them with the corresponding build option.
|
27
40
|
def self.expand_environment(value)
|
28
41
|
# Perform constant expansion on the defined environment variables,
|
29
42
|
# including the option set
|
@@ -44,14 +57,22 @@ module Autoproj
|
|
44
57
|
end
|
45
58
|
|
46
59
|
@env_inherit = Set.new
|
60
|
+
# Returns true if the given environment variable must not be reset by the
|
61
|
+
# env.sh script, but that new values should simply be prepended to it.
|
62
|
+
#
|
63
|
+
# See Autoproj.env_inherit
|
47
64
|
def self.env_inherit?(name)
|
48
65
|
@env_inherit.include?(name)
|
49
66
|
end
|
67
|
+
# Declare that the given environment variable must not be reset by the
|
68
|
+
# env.sh script, but that new values should simply be prepended to it.
|
69
|
+
#
|
70
|
+
# See Autoproj.env_inherit?
|
50
71
|
def self.env_inherit(*names)
|
51
72
|
@env_inherit |= names
|
52
73
|
end
|
53
74
|
|
54
|
-
#
|
75
|
+
# Resets the value of the given environment variable to the given
|
55
76
|
def self.env_set(name, *value)
|
56
77
|
Autobuild.env_clear(name)
|
57
78
|
env_add(name, *value)
|
@@ -375,7 +396,11 @@ module Autoproj
|
|
375
396
|
end
|
376
397
|
|
377
398
|
if !vcs_spec.empty?
|
378
|
-
expansions = Hash["PACKAGE" => package_name,
|
399
|
+
expansions = Hash["PACKAGE" => package_name,
|
400
|
+
"PACKAGE_BASENAME" => File.basename(package_name),
|
401
|
+
"AUTOPROJ_ROOT" => Autoproj.root_dir,
|
402
|
+
"AUTOPROJ_CONFIG" => Autoproj.config_dir,
|
403
|
+
"AUTOPROJ_SOURCE_DIR" => local_dir]
|
379
404
|
|
380
405
|
vcs_spec = expand(vcs_spec, expansions)
|
381
406
|
vcs_spec = Autoproj.vcs_definition_to_hash(vcs_spec)
|
data/lib/autoproj/osdeps.rb
CHANGED
@@ -11,16 +11,36 @@ module Autoproj
|
|
11
11
|
|
12
12
|
OSDependencies.new(data)
|
13
13
|
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_reader :aliases
|
17
|
+
end
|
18
|
+
@aliases = Hash.new
|
19
|
+
|
20
|
+
def self.alias(old_name, new_name)
|
21
|
+
@aliases[new_name] = old_name
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.autodetect_ruby
|
25
|
+
ruby_package =
|
26
|
+
if RUBY_VERSION < "1.9.0" then "ruby18"
|
27
|
+
else "ruby19"
|
28
|
+
end
|
29
|
+
self.alias(ruby_package, "ruby")
|
30
|
+
end
|
31
|
+
|
14
32
|
AUTOPROJ_OSDEPS = File.join(File.expand_path(File.dirname(__FILE__)), 'default.osdeps')
|
15
33
|
def self.load_default
|
16
34
|
@default_osdeps ||= OSDependencies.load(AUTOPROJ_OSDEPS)
|
17
35
|
end
|
18
36
|
|
19
37
|
attr_reader :definitions
|
20
|
-
|
38
|
+
def gem_fetcher
|
39
|
+
@gem_fetcher ||= Gem::SpecFetcher.fetcher
|
40
|
+
end
|
41
|
+
|
21
42
|
def initialize(defs = Hash.new)
|
22
43
|
@definitions = defs.to_hash
|
23
|
-
@gem_fetcher = Gem::SpecFetcher.fetcher
|
24
44
|
end
|
25
45
|
|
26
46
|
def merge(info)
|
@@ -49,6 +69,10 @@ module Autoproj
|
|
49
69
|
release_string =~ /^.*([^\s]+)$/
|
50
70
|
version = $1
|
51
71
|
['gentoo', [version]]
|
72
|
+
elsif File.exists?('/etc/arch-release')
|
73
|
+
codename = "Unknown"
|
74
|
+
puts "Found Arch"
|
75
|
+
['arch', [codename]]
|
52
76
|
else
|
53
77
|
raise ConfigError, "Unknown operating system"
|
54
78
|
end
|
@@ -83,7 +107,8 @@ module Autoproj
|
|
83
107
|
OS_PACKAGE_INSTALL = {
|
84
108
|
'debian' => 'apt-get install -y %s',
|
85
109
|
'ubuntu' => 'apt-get install -y %s',
|
86
|
-
'gentoo' => 'emerge --noreplace %s'
|
110
|
+
'gentoo' => 'emerge --noreplace %s',
|
111
|
+
'arch' => 'pacman -Sy --noconfirm %s'
|
87
112
|
}
|
88
113
|
|
89
114
|
def generate_os_script(dependencies)
|
@@ -146,7 +171,10 @@ module Autoproj
|
|
146
171
|
# call-seq:
|
147
172
|
# partition_packages(package_names) => os_packages, gem_packages
|
148
173
|
def partition_packages(package_set, package_osdeps = Hash.new)
|
149
|
-
package_set = package_set.
|
174
|
+
package_set = package_set.
|
175
|
+
map { |name| OSDependencies.aliases[name] || name }.
|
176
|
+
to_set
|
177
|
+
|
150
178
|
osdeps, gems = [], []
|
151
179
|
package_set.to_set.each do |name|
|
152
180
|
pkg_def = definitions[name]
|
@@ -184,6 +212,19 @@ module Autoproj
|
|
184
212
|
return osdeps, gems
|
185
213
|
end
|
186
214
|
|
215
|
+
def guess_gem_program
|
216
|
+
if Autobuild.programs['gem']
|
217
|
+
return Autobuild.programs['gem']
|
218
|
+
end
|
219
|
+
|
220
|
+
ruby_bin = Config::CONFIG['RUBY_INSTALL_NAME']
|
221
|
+
if ruby_bin =~ /^ruby(.+)$/
|
222
|
+
Autobuild.programs['gem'] = "gem#{$1}"
|
223
|
+
else
|
224
|
+
Autobuild.programs['gem'] = "gem"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
187
228
|
# Requests the installation of the given set of packages
|
188
229
|
def install(packages, package_osdeps = Hash.new)
|
189
230
|
osdeps, gems = partition_packages(packages, package_osdeps)
|
@@ -223,7 +264,7 @@ module Autoproj
|
|
223
264
|
if !installed.empty? && Autobuild.do_update
|
224
265
|
# Look if we can update the package ...
|
225
266
|
dep = Gem::Dependency.new(name, version_requirements)
|
226
|
-
available =
|
267
|
+
available = gem_fetcher.find_matching(dep)
|
227
268
|
installed_version = installed.map(&:version).max
|
228
269
|
available_version = available.map { |(name, v), source| v }.max
|
229
270
|
needs_update = (available_version > installed_version)
|
@@ -236,12 +277,14 @@ module Autoproj
|
|
236
277
|
|
237
278
|
# Now install what is left
|
238
279
|
if !gems.empty?
|
280
|
+
guess_gem_program
|
281
|
+
|
239
282
|
if Autoproj.verbose
|
240
283
|
STDERR.puts "Installing rubygems dependencies with"
|
241
284
|
STDERR.puts "gem install #{gems.join(" ")}"
|
242
285
|
end
|
243
286
|
Autobuild.progress "installing/updating RubyGems dependencies: #{gems.join(", ")}"
|
244
|
-
Autobuild::Subprocess.run 'autoproj', 'osdeps', 'gem', 'install', *gems
|
287
|
+
Autobuild::Subprocess.run 'autoproj', 'osdeps', Autobuild.tool('gem'), 'install', *gems
|
245
288
|
did_something ||= true
|
246
289
|
end
|
247
290
|
|
data/lib/autoproj/system.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module Autoproj
|
2
|
-
BASE_DIR = File.expand_path(File.join('..', '..'), File.dirname(__FILE__))
|
3
|
-
|
4
2
|
class UserError < RuntimeError; end
|
5
3
|
|
4
|
+
# Returns the root directory of the current autoproj installation.
|
5
|
+
#
|
6
|
+
# If the current directory is not in an autoproj installation,
|
7
|
+
# raises UserError.
|
6
8
|
def self.root_dir
|
7
9
|
dir = Dir.pwd
|
8
10
|
while dir != "/" && !File.directory?(File.join(dir, "autoproj"))
|
@@ -14,36 +16,69 @@ module Autoproj
|
|
14
16
|
dir
|
15
17
|
end
|
16
18
|
|
19
|
+
# Returns the configuration directory for this autoproj installation.
|
20
|
+
#
|
21
|
+
# If the current directory is not in an autoproj installation,
|
22
|
+
# raises UserError.
|
17
23
|
def self.config_dir
|
18
24
|
File.join(root_dir, "autoproj")
|
19
25
|
end
|
26
|
+
|
27
|
+
# Returns the build directory (prefix) for this autoproj installation.
|
28
|
+
#
|
29
|
+
# If the current directory is not in an autoproj installation, raises
|
30
|
+
# UserError.
|
20
31
|
def self.build_dir
|
21
32
|
File.join(root_dir, "build")
|
22
33
|
end
|
23
34
|
|
35
|
+
# Returns the path to the provided configuration file.
|
36
|
+
#
|
37
|
+
# If the current directory is not in an autoproj installation, raises
|
38
|
+
# UserError.
|
24
39
|
def self.config_file(file)
|
25
40
|
File.join(config_dir, file)
|
26
41
|
end
|
27
42
|
|
43
|
+
# Run the provided command as user
|
28
44
|
def self.run_as_user(*args)
|
29
45
|
if !system(*args)
|
30
46
|
raise "failed to run #{args.join(" ")}"
|
31
47
|
end
|
32
48
|
end
|
33
49
|
|
50
|
+
# Run the provided command as root, using sudo to gain root access
|
34
51
|
def self.run_as_root(*args)
|
35
52
|
if !system('sudo', *args)
|
36
53
|
raise "failed to run #{args.join(" ")} as root"
|
37
54
|
end
|
38
55
|
end
|
39
56
|
|
57
|
+
# Return the directory in which remote package set definition should be
|
58
|
+
# checked out
|
40
59
|
def self.remotes_dir
|
41
60
|
File.join(root_dir, ".remotes")
|
42
61
|
end
|
62
|
+
|
63
|
+
# Return the directory in which RubyGems package should be installed
|
43
64
|
def self.gem_home
|
44
65
|
File.join(root_dir, ".gems")
|
45
66
|
end
|
46
67
|
|
68
|
+
# Find the given program in PATH. It raises ArgumentError if the program
|
69
|
+
# can't be found
|
70
|
+
def self.find_in_path(name)
|
71
|
+
result = ENV['PATH'].split(':').find { |dir| File.file?(File.join(dir, name)) }
|
72
|
+
if !result
|
73
|
+
raise ArgumentError, "#{name} can not be found in PATH"
|
74
|
+
end
|
75
|
+
File.join(result, name)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Initializes the environment variables to a "sane default"
|
79
|
+
#
|
80
|
+
# Use this in autoproj/init.rb to make sure that the environment will not
|
81
|
+
# get polluted during the build.
|
47
82
|
def self.set_initial_env
|
48
83
|
Autoproj.env_set 'RUBYOPT', "-rubygems"
|
49
84
|
Autoproj.env_set 'GEM_HOME', Autoproj.gem_home
|
@@ -53,6 +88,7 @@ module Autoproj
|
|
53
88
|
Autoproj.env_set 'LD_LIBRARY_PATH'
|
54
89
|
end
|
55
90
|
|
91
|
+
# Create the env.sh script in +subdir+. In general, +subdir+ should be nil.
|
56
92
|
def self.export_env_sh(subdir = nil)
|
57
93
|
filename = if subdir
|
58
94
|
File.join(Autoproj.root_dir, subdir, "env.sh")
|
@@ -75,6 +111,12 @@ module Autoproj
|
|
75
111
|
end
|
76
112
|
end
|
77
113
|
|
114
|
+
# Load a definition file given at +path+. +source+ is the package set from
|
115
|
+
# which the file is taken.
|
116
|
+
#
|
117
|
+
# If any error is detected, the backtrace will be filtered so that it is
|
118
|
+
# easier to understand by the user. Moreover, if +source+ is non-nil, the
|
119
|
+
# package set name will be mentionned.
|
78
120
|
def self.load(source, *path)
|
79
121
|
path = File.join(*path)
|
80
122
|
Kernel.load path
|
@@ -82,6 +124,7 @@ module Autoproj
|
|
82
124
|
Autoproj.filter_load_exception(e, source, path)
|
83
125
|
end
|
84
126
|
|
127
|
+
# Same as #load, but runs only if the file exists.
|
85
128
|
def self.load_if_present(source, *path)
|
86
129
|
path = File.join(*path)
|
87
130
|
if File.file?(path)
|
@@ -89,6 +132,8 @@ module Autoproj
|
|
89
132
|
end
|
90
133
|
end
|
91
134
|
|
135
|
+
# Look into +dir+, searching for shared libraries. For each library, display
|
136
|
+
# a warning message if this library has undefined symbols.
|
92
137
|
def self.validate_solib_dependencies(dir, exclude_paths = [])
|
93
138
|
Find.find(File.expand_path(dir)) do |name|
|
94
139
|
next unless name =~ /\.so$/
|
data/lib/autoproj/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autoproj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-06 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -62,6 +62,26 @@ dependencies:
|
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: 1.5.0
|
64
64
|
version:
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: rubyforge
|
67
|
+
type: :development
|
68
|
+
version_requirement:
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 2.0.3
|
74
|
+
version:
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: gemcutter
|
77
|
+
type: :development
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.3.0
|
84
|
+
version:
|
65
85
|
- !ruby/object:Gem::Dependency
|
66
86
|
name: webgen
|
67
87
|
type: :development
|
@@ -90,7 +110,7 @@ dependencies:
|
|
90
110
|
requirements:
|
91
111
|
- - ">="
|
92
112
|
- !ruby/object:Gem::Version
|
93
|
-
version: 2.
|
113
|
+
version: 2.5.0
|
94
114
|
version:
|
95
115
|
description: |-
|
96
116
|
What is Autoproj
|
@@ -137,7 +157,6 @@ files:
|
|
137
157
|
- doc/guide/ext/init.rb
|
138
158
|
- doc/guide/ext/previous_next.rb
|
139
159
|
- doc/guide/ext/rdoc_links.rb
|
140
|
-
- doc/guide/src/autobuild.page
|
141
160
|
- doc/guide/src/autoproj_bootstrap
|
142
161
|
- doc/guide/src/customization.page
|
143
162
|
- doc/guide/src/default.css
|
@@ -151,7 +170,12 @@ files:
|
|
151
170
|
- doc/guide/src/images/gradient1.png
|
152
171
|
- doc/guide/src/images/gradient2.png
|
153
172
|
- doc/guide/src/index.page
|
154
|
-
- doc/guide/src/
|
173
|
+
- doc/guide/src/manifest.xml
|
174
|
+
- doc/guide/src/package_sets/autobuild.page
|
175
|
+
- doc/guide/src/package_sets/importers.page
|
176
|
+
- doc/guide/src/package_sets/index.page
|
177
|
+
- doc/guide/src/package_sets/manifest-xml.page
|
178
|
+
- doc/guide/src/package_sets/osdeps.page
|
155
179
|
- doc/guide/src/structure.page
|
156
180
|
- lib/autoproj.rb
|
157
181
|
- lib/autoproj/autobuild.rb
|