add Rscons::BuildTarget
Return a BuildTarget object from Environment#method_missing when a build target is registered.
This commit is contained in:
1 parent
87b25d7bfd
commit
1b50a9dd3c
8 files changed
+69
-15
No files matched your search
@@ -0,0 +1,29 @@
|
||||
module Rscons
|
||||
# The BuildTarget class represents a single build target.
|
||||
class BuildTarget
|
||||
# Create a BuildTarget object.
|
||||
#
|
||||
# @param env [Environment] The Environment.
|
||||
# @param target [String] Name of the target file.
|
||||
def initialize(env, target)
|
||||
@env = env
|
||||
@target = target
|
||||
end
|
||||
|
||||
# Manually record a given target as depending on the specified files.
|
||||
#
|
||||
# @param user_deps [Array<String>] Dependency files.
|
||||
def depends(*user_deps)
|
||||
@env.depends(@target, *user_deps)
|
||||
end
|
||||
|
||||
# Convert the BuildTarget to a String.
|
||||
#
|
||||
# This method always returns the target file name.
|
||||
#
|
||||
# @return [String] Target file name.
|
||||
def to_s
|
||||
@target
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -19,6 +19,19 @@ module Rscons
|
||||
{}
|
||||
end
|
||||
|
||||
# Create a BuildTarget object for this build target.
|
||||
#
|
||||
# Builder sub-classes can override this method to manipulate parameters
|
||||
# (for example, add a suffix to the user-given target file name).
|
||||
#
|
||||
# @param env [Environment] The Environment.
|
||||
# @param target [String] The user-supplied target name.
|
||||
#
|
||||
# @return [BuildTarget]
|
||||
def create_build_target(env, target)
|
||||
BuildTarget.new(env, target)
|
||||
end
|
||||
|
||||
# Return whether this builder object is capable of producing a given target
|
||||
# file name from a given source file name.
|
||||
# @param target [String] The target file name.
|
||||
|
||||
@@ -18,6 +18,13 @@ module Rscons
|
||||
}
|
||||
end
|
||||
|
||||
def create_build_target(env, target)
|
||||
unless target =~ /\./
|
||||
target += env.expand_varref("${PROGSUFFIX}")
|
||||
end
|
||||
super(env, target)
|
||||
end
|
||||
|
||||
def run(target, sources, cache, env, vars)
|
||||
# build sources to linkable objects
|
||||
objects = env.build_sources(sources, env.expand_varref(["${OBJSUFFIX}", "${LIBSUFFIX}"], vars).flatten, cache, vars)
|
||||
@@ -32,9 +39,6 @@ module Rscons
|
||||
else
|
||||
"${CC}"
|
||||
end
|
||||
unless target =~ /\./
|
||||
target += env.expand_varref("${PROGSUFFIX}", vars)
|
||||
end
|
||||
vars = vars.merge({
|
||||
'_TARGET' => target,
|
||||
'_SOURCES' => objects,
|
||||
|
||||
@@ -260,7 +260,10 @@ module Rscons
|
||||
raise "Unexpected construction variable set: #{vars.inspect}"
|
||||
end
|
||||
sources = Array(sources)
|
||||
add_target(target, @builders[method.to_s], sources, vars, rest)
|
||||
builder = @builders[method.to_s]
|
||||
build_target = builder.create_build_target(self, target)
|
||||
add_target(build_target.to_s, builder, sources, vars, rest)
|
||||
build_target
|
||||
else
|
||||
super
|
||||
end
|
||||
@@ -275,9 +278,14 @@ module Rscons
|
||||
}
|
||||
end
|
||||
|
||||
# Manually record a given target as depending on the specified
|
||||
# dependency files.
|
||||
# Manually record a given target as depending on the specified files.
|
||||
#
|
||||
# @param target [String,BuildTarget] Target file.
|
||||
# @param user_deps [Array<String>] Dependency files.
|
||||
#
|
||||
# @return [void]
|
||||
def depends(target, *user_deps)
|
||||
target = target.to_s
|
||||
@user_deps[target] ||= []
|
||||
@user_deps[target] = (@user_deps[target] + user_deps).uniq
|
||||
end
|
||||
|
||||
Reference in new issue
Block a user