rscons 1.9.3 → 1.10.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.
@@ -0,0 +1,93 @@
1
+ require "set"
2
+
3
+ module Rscons
4
+ # Class to keep track of a set of jobs that need to be performed.
5
+ class JobSet
6
+
7
+ # Create a JobSet
8
+ #
9
+ # @param build_dependencies [Hash]
10
+ # Hash mapping targets to a set of build dependencies. A job will not be
11
+ # returned as ready to run if any of its dependencies are still building.
12
+ def initialize(build_dependencies)
13
+ @jobs = {}
14
+ @build_dependencies = build_dependencies
15
+ end
16
+
17
+ # Add a job to the JobSet.
18
+ #
19
+ # @param options [Hash]
20
+ # Options.
21
+ # @option options [Symbol, String] :target
22
+ # Build target name.
23
+ # @option options [Builder] :builder
24
+ # The {Builder} to use to build the target.
25
+ # @option options [Array<String>] :sources
26
+ # Source file name(s).
27
+ # @option options [Hash] :vars
28
+ # Construction variable overrides.
29
+ def add_job(options)
30
+ # We allow multiple jobs to be registered per target for cases like:
31
+ # env.Directory("dest")
32
+ # env.Install("dest", "bin")
33
+ # env.Install("dest", "share")
34
+ @jobs[options[:target]] ||= []
35
+ @jobs[options[:target]] << options
36
+ end
37
+
38
+ # Get the next job that is ready to run from the JobSet.
39
+ #
40
+ # This method will remove the job from the JobSet.
41
+ #
42
+ # @param targets_still_building [Array<String>]
43
+ # Targets that are not finished building. This is used to avoid returning
44
+ # a job as available to run if it depends on one of the targets that are
45
+ # still building as a source.
46
+ #
47
+ # @return [nil, Hash]
48
+ # The next job to run.
49
+ def get_next_job_to_run(targets_still_building)
50
+ @jobs.keys.each do |target|
51
+ skip = false
52
+ (@jobs[target][0][:sources] + (@build_dependencies[target] || []).to_a).each do |src|
53
+ if @jobs.include?(src)
54
+ # Skip this target because it depends on another target later in
55
+ # the job set.
56
+ skip = true
57
+ break
58
+ end
59
+ if targets_still_building.include?(src)
60
+ # Skip this target because it depends on another target that is
61
+ # still being built.
62
+ skip = true
63
+ break
64
+ end
65
+ end
66
+ next if skip
67
+ job = @jobs[target][0]
68
+ if @jobs[target].size > 1
69
+ @jobs[target].slice!(0)
70
+ else
71
+ @jobs.delete(target)
72
+ end
73
+ return job
74
+ end
75
+
76
+ nil
77
+ end
78
+
79
+ # Remove all jobs from the JobSet.
80
+ def clear!
81
+ @jobs.clear
82
+ end
83
+
84
+ # Get the JobSet size.
85
+ #
86
+ # @return [Integer]
87
+ # JobSet size.
88
+ def size
89
+ @jobs.size
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,63 @@
1
+ module Rscons
2
+ # If a builder returns an instance of this class from its #run method, then
3
+ # Rscons will execute the command specified in a thread and allow other
4
+ # builders to continue executing in parallel.
5
+ class ThreadedCommand
6
+
7
+ # @return [Array<String>]
8
+ # The command to execute.
9
+ attr_reader :command
10
+
11
+ # @return [Object]
12
+ # Arbitrary object to store builder-specific info. This object value will
13
+ # be passed back into the builder's #finalize method.
14
+ attr_reader :builder_info
15
+
16
+ # @return [String]
17
+ # Short description of the command. This will be printed to standard
18
+ # output if the Environment's echo mode is :short.
19
+ attr_reader :short_description
20
+
21
+ # @return [Hash]
22
+ # Environment Hash to pass to Kernel#system.
23
+ attr_reader :system_env
24
+
25
+ # @return [Hash]
26
+ # Options Hash to pass to Kernel#system.
27
+ attr_reader :system_options
28
+
29
+ # @return [Hash]
30
+ # Field for Rscons to store the build operation while this threaded
31
+ # command is executing.
32
+ attr_accessor :build_operation
33
+
34
+ # @return [Thread]
35
+ # The thread waiting on this command to terminate.
36
+ attr_accessor :thread
37
+
38
+ # Create a ThreadedCommand object.
39
+ #
40
+ # @param command [Array<String>]
41
+ # The command to execute.
42
+ # @param options [Hash]
43
+ # Optional parameters.
44
+ # @option options [Object] :builder_info
45
+ # Arbitrary object to store builder-specific info. This object value will
46
+ # be passed back into the builder's #finalize method.
47
+ # @option options [String] :short_description
48
+ # Short description of the command. This will be printed to standard
49
+ # output if the Environment's echo mode is :short.
50
+ # @option options [Hash] :system_env
51
+ # Environment Hash to pass to Kernel#system.
52
+ # @option options [Hash] :system_options
53
+ # Options Hash to pass to Kernel#system.
54
+ def initialize(command, options = {})
55
+ @command = command
56
+ @builder_info = options[:builder_info]
57
+ @short_description = options[:short_description]
58
+ @system_env = options[:system_env]
59
+ @system_options = options[:system_options]
60
+ end
61
+
62
+ end
63
+ end
@@ -1,4 +1,4 @@
1
1
  module Rscons
2
2
  # gem version
3
- VERSION = "1.9.3"
3
+ VERSION = "1.10.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rscons
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.3
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Holtrop
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-30 00:00:00.000000000 Z
11
+ date: 2017-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -130,10 +130,14 @@ files:
130
130
  - lib/rscons/builders/object.rb
131
131
  - lib/rscons/builders/preprocess.rb
132
132
  - lib/rscons/builders/program.rb
133
+ - lib/rscons/builders/shared_library.rb
134
+ - lib/rscons/builders/shared_object.rb
133
135
  - lib/rscons/builders/simple_builder.rb
134
136
  - lib/rscons/cache.rb
135
137
  - lib/rscons/cli.rb
136
138
  - lib/rscons/environment.rb
139
+ - lib/rscons/job_set.rb
140
+ - lib/rscons/threaded_command.rb
137
141
  - lib/rscons/varset.rb
138
142
  - lib/rscons/version.rb
139
143
  - rscons.gemspec
@@ -157,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
161
  version: '0'
158
162
  requirements: []
159
163
  rubyforge_project:
160
- rubygems_version: 2.6.7
164
+ rubygems_version: 2.6.12
161
165
  signing_key:
162
166
  specification_version: 4
163
167
  summary: Software construction library inspired by SCons and implemented in Ruby